通过select with where子句锁定的Java JDBC SQLite数据库

我正在调用此方法:

1=string=K
2=string=O
3=string=Y
4=string=A
5=string=A
6=string=N
7=string=I
8=string=S
9=string=Q
10=string=A
11=string=T
12=string=S
13=string=I

一切正常执行,但似乎我的数据库仍然处于锁定状态,没有明显的原因。

另一方面,如果我要用此方法替换数据库,则在执行数据库之后就可以了:

ArrayList<String> selectFilteredJump(String owner,String fromDate,String toDate,String env) {
    ArrayList<String> a = new ArrayList<>();
    Connection c;
    Statement stmt;

    StringBuilder whereclause = new StringBuilder("WHERE a.Date BETWEEN '"+fromDate+ "' and '" + toDate+"'");
    if (!env.equals(constants.EMPTY) ) {
        whereclause.append(" and a.Environment = '").append(env).append("'");
    }

    if (!owner.equals(constants.EMPTY) ) {
        whereclause.append(" and a.UserId = '").append(owner).append("'");
    }

    String sql = "SELECT a.TicketID,a.Subject,a.UserID,a.Date,a.Solution,a.Comments," +
                 "a.Environment,(SELECT username FROM Users WHERE UserID = a.UserID) AS username FROM Tickets a " +
                 whereclause + " order by 4 asc;";
    System.out.println(sql);
    try {
        Class.forName("org.sqlite.JDBC");
        c = DriverManager.getconnection("jdbc:sqlite:" + this.dbPath + this.dbName) ;
        c.setautoCommit(false);
        stmt = c.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            a.add(rs.getString("TicketID"));
            a.add(rs.getString("Subject"));
            a.add(rs.getString("UserID"));
            a.add(rs.getString("Date"));
            a.add(rs.getString("Solution"));
            a.add(rs.getString("Comments"));
            a.add(rs.getString("Environment"));
            a.add(rs.getString("username"));
        }
        rs.close();
        stmt.close();
        c.close();
    }
    catch (Exception e) {
        System.err.println(e.getclass().getName() + ": " + e.getMessage());
    }
    return a;
}

我也尝试过使用特定的配置打开连接(像这样):

    ArrayList<String> selectAllJump() {
    if (constants.DEBUG_MODE) System.out.println("selectAllJump");
    ArrayList<String> a = new ArrayList<>();
    Connection c;
    Statement stmt;
    try {
        Class.forName("org.sqlite.JDBC");
        c = DriverManager.getconnection("jdbc:sqlite:" + this.dbPath + this.dbName);
        c.setautoCommit(false);
        stmt = c.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT a.TicketID," +
                "a.Environment,(SELECT username FROM Users WHERE UserID = a.UserID) AS username FROM Tickets a " +
                "order by 4 asc;");
        while (rs.next()) {
            a.add(rs.getString("TicketID"));
            a.add(rs.getString("Subject"));
            a.add(rs.getString("UserID"));
            a.add(rs.getString("Date"));
            a.add(rs.getString("Solution"));
            a.add(rs.getString("Comments"));
            a.add(rs.getString("Environment"));
            a.add(rs.getString("username"));
        }
        rs.close();
        stmt.close();
        c.close();
    }
    catch (Exception e) {
        System.err.println(e.getclass().getName() + ": " + e.getMessage());
    }
    return a;
}

,仍然是相同的错误:

org.sqlite.SQLiteException:[SQLITE_BUSY]数据库文件已锁定(数据库已锁定)

欢迎任何想法。

谢谢。

zhangcy_77 回答:通过select with where子句锁定的Java JDBC SQLite数据库

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1329006.html

大家都在问