【问题标题】:SQLite java error " unable to open database file"SQLite java 错误“无法打开数据库文件”
【发布时间】:2014-03-03 15:21:26
【问题描述】:

我在 Windows 7 上运行 Sqlite 并使用 Eclipse 中的 java 程序,尝试将输入文件中的数据加载到 sqlite 数据库表中。 sqlite exe文件、java sqlite JDBC jar文件和数据库文件都在同一个目录下。

我已经阅读了大多数听起来似乎接近回答这个问题但到目前为止还没有解决的帖子。

我已经更改了文件夹权限,因此任何人/每个人都可以更新/更改文件夹(数据库文件所在的位置),但仍然没有乐趣。我已经建立了一个数据库连接(见下面的显示),但现在卡住了,我的想法已经用完了 - 有人可以帮忙吗? 代码在第 30 行失败

公共类数据库{

public void loadPersonData() {
    Connection connection = null;
    PreparedStatement preparedStatement = null;

    try {
    connection = ConnectionConfig.getConnection();
    preparedStatement = connection
        .prepareStatement("INSERT INTO PERSON(PERSON_ID,LAST_NAME,FIRST_NAME,STREET,CITY) "
            + "VALUES(?,?,?,?,?)");

        for (PersonData x : ReadPersonData.personList) {
            preparedStatement.setInt(1, x.getPersonID());
            preparedStatement.setString(2, x.getLastName());
            preparedStatement.setString(3, x.getFirstName());
            preparedStatement.setString(4, x.getStreet());
            preparedStatement.setString(5, x.getCity());
            preparedStatement.addBatch();
        }

这是第 30 行 ->>>>preparedStatement.executeBatch();

    } catch (Exception e) {
        e.printStackTrace();

目前的错误信息如下:-

数据库连接建立

java.sql.SQLException: 无法打开数据库文件

at org.sqlite.core.DB.throwex(DB.java:859)
at org.sqlite.core.DB.executeBatch(DB.java:760)
at org.sqlite.core.CorePreparedStatement.executeBatch(CorePreparedStatement.java:77)
at Database.loadPersonData(Database.java:30)
at MainApp.main(MainApp.java:16)

java.sql.SQLException: [SQLITE_ERROR] SQL 错误或缺少数据库(连接已关闭)

at org.sqlite.core.DB.newSQLException(DB.java:890)
at org.sqlite.core.CoreStatement.internalClose(CoreStatement.java:109)
at org.sqlite.jdbc3.JDBC3Statement.close(JDBC3Statement.java:35)
at Database.loadPersonData(Database.java:44)
at MainApp.main(MainApp.java:16)

【问题讨论】:

  • ConnectionConfig 类中有哪些内容?
  • 嗨 Sanjeev,公共类 ConnectionConfig { public static Connection getConnection(){ Connection connection = null;尝试{ Class.forName("org.sqlite.JDBC");连接 = DriverManager.getConnection("jdbc:sqlite:C:\\Program Files (x86)\\SQLite\\SS200.db"); System.out.println("数据库连接建立"); } catch (Exception e) {e.printStackTrace();} 返回连接; } }
  • 嗨 Sanjeev,我不能完全让这个评论工作,(新手)上面的代码(对不起格式!)在 connectionConfig 类中创建到 SQLite 数据库的连接,干杯, 马丁
  • 是不是一打开数据库连接就先插入数据?还要检查数据库目录,如果有锁文件,可能是数据库被某些操作意外锁定了。
  • 嗨 Sanjeev,是的,插入是打开数据库后的第一个操作。至于锁定文件,在目录中看不到任何可能的文件,是在数据库关闭后保留还是只有在数据库打开时才保留?

标签: java database sqlite


【解决方案1】:

我认为有锁定文件锁定了您的数据库。 你必须删除它们 转到您的数据库目录并搜索带有“YourDbName-journal”的文件删除它 如果它不起作用,这应该可以工作确保您一次运行一个连接 并确保每次都关闭连接。

在 catch 子句之后添加这个

    finally{
    try{
    preparedStatement.close();
    connection.close();}
    catch(Exception e){e.printStackTrace();}}

请确保在每个方法调用连接之后添加此代码,因为 sqlite 不支持多个连接。

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 2011-05-01
    • 2020-06-10
    • 2020-07-03
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多