我正在调用此方法:
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]数据库文件已锁定(数据库已锁定)
欢迎任何想法。
谢谢。