【问题标题】:Cannot save record/data to SQLite database with jdbc:sqlite::resource:无法使用 jdbc:sqlite::resource 将记录/数据保存到 SQLite 数据库:
【发布时间】:2018-11-25 03:01:56
【问题描述】:

我使用 SQLITEStudio 创建了一个数据库并将其保存到我的项目文件夹中。 数据库名称是 ThirftersDataBase.db,其中包含表 accHistory 和列“user”和“password”。 当我使用 Select 查询时连接正常,但当我尝试插入数据时,它不起作用。请帮忙。

这是我的数据库类。

package db.Util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;



public class databaseConnection {

    static Connection con = getConnection();
    static String user;

    public static Connection getConnection(){
        String url = "jdbc:sqlite::resource:ThirftersDataBase.db";
        try {
            con = DriverManager.getConnection(url);
            System.out.println("connected");
            return con;
        } catch (SQLException e) {

            e.printStackTrace();
        }
        return null;
    }

    public void logIN(String user, String pass) {

        String sql = "Insert or replace into accHistory(user, password) VALUES (?, ?)";
        PreparedStatement st;

        try {
            st = con.prepareStatement(sql);
            st.setString(1, user);
            st.setString(2, pass);
            st.executeUpdate();


            //Check if query is executed;
            System.out.println("Saved");
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

我有一个带有按钮的 FXML 控制器,点击该按钮可以保存数据。

public class ThriftersController{

    databaseConnection connect = new databaseConnection();

    public void Save(ActionEvent e) {
         //Save "Mark" to user column and save "1234456" to password column
        connect.logIN("Mark", "1234456");
    }
}

按钮事件处理得很好,当我点击按钮时,它会打印“已保存”,但不会保存在我的数据库中。

【问题讨论】:

  • It doesn't work ... 有错误输出吗?
  • 没什么。这就是我感到困惑和愤怒的地方。我会尝试复制其他代码并尝试它是否有效。
  • 您是否有可能将自动提交设置为关闭?
  • 拥有 accHistory 表的 DDL 会很有用。您需要关闭语句而不是连接:使用资源尝试或尝试/最终阻止。类名应以大写字母开头。

标签: java sqlite jdbc


【解决方案1】:

通过jdbc:sqlite::resource: 的数据库连接是只读的,如here 所述:

读取类路径或网络中的数据库文件(只读)

要加载可以从类加载器中找到的 db 文件(例如,类路径中 jar 文件中的 db 文件),请使用 jdbc:sqlite::resource: 前缀。

如果你想更新你的数据库,你需要把它放在不同的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多