Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-[SQLITE\u BUSY]数据库文件已锁定(数据库已锁定)_Java_Sqlite_Exception - Fatal编程技术网

Java-[SQLITE\u BUSY]数据库文件已锁定(数据库已锁定)

Java-[SQLITE\u BUSY]数据库文件已锁定(数据库已锁定),java,sqlite,exception,Java,Sqlite,Exception,我有一个带有mysql连接的java应用程序,但我不得不将我的数据库从mysql传输到sqlite,因为mysql无法嵌入,我有连接,但我在使用该应用程序时遇到了这个异常 org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked) 我知道这是一个常见的错误,但我尝试了大多数答案,但都无法解决。问题是我有大约30种不同的方法,包括void类型或return类型,例如下面的2

我有一个带有mysql连接的java应用程序,但我不得不将我的数据库从mysql传输到sqlite,因为mysql无法嵌入,我有连接,但我在使用该应用程序时遇到了这个异常

org.sqlite.SQLiteException: [SQLITE_BUSY]  The database file is locked (database is locked)
我知道这是一个常见的错误,但我尝试了大多数答案,但都无法解决。问题是我有大约30种不同的方法,包括void类型或return类型,例如下面的2种;(我稍后在swing应用程序上调用这些方法)

我在开始上课的时候就有这些

private Connection con = null;
private Statement statement = null;
private PreparedStatement preparedstatement = null;
方法,例如

public int lastPlaceProgram(){

    String query= "Select * from userprogram where laststayed = 1";
    try {
        statement = con.createStatement();
        ResultSet rs = statement.executeQuery(query);
        int programid = 0;
        while(rs.next()){
            programid = rs.getInt("programid");
        }
        return programid;
    } catch (SQLException ex) {
        Logger.getLogger(Operations.class.getName()).log(Level.SEVERE, null, ex);
        return 0;
    }

}

和建造商

public Operations() {
    String url = "jdbc:sqlite:C://Users//Me//Desktop//sqlited/trying.db";
    try {
        con = DriverManager.getConnection(url);
    } catch (SQLException ex) {
        Logger.getLogger(Operations.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
我尝试将这些finally块添加到我所有30个方法的after-catch块中

finally{
    try{
      con.close();
    } catch(Exception e){
    }
}

但它没有工作,它给了连接是关闭错误的这一次。我还尝试添加preparedstatement.close();到这个finally块,但仍然不起作用。

finally块对我不起作用,如果我有那个变量要关闭,我就手动关闭它们。我的意思是,如果我在一个方法中使用ResultSet和PreparedStatement,那么我在catch或return之前生成了rs.close()和PreparedStatement.close()。如果我在方法上有Preparedstatement变量,那么我就在catch块或return之前执行Preparedstatement.close()。

最后,如果要关闭该变量,块对我不起作用,我会手动关闭它们。我的意思是,如果我在一个方法中使用ResultSet和PreparedStatement,那么我在catch或return之前生成了rs.close()和PreparedStatement.close()。如果我在方法上有Preparedstatement变量,那么我只在catch块或return之前执行Preparedstatement.close()

finally{
    try{
      con.close();
    } catch(Exception e){
    }
}