【发布时间】:2019-02-05 16:09:31
【问题描述】:
我在 Apache Tomcat 服务器上使用 servlet 通过 JDBC 向数据库写入和读取数据。收到的所有信息都是正确的,但是在第一次读/写数据库之后,数据库文件被锁定。这是一个代码sn-p:
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection(path);
conn.setAutoCommit(false);
Statement stat = conn.createStatement();
String req = "select * from login where username=\""+username+"\" and password=\""+password+"\"";
System.out.println(req);
ResultSet rs2 = stat.executeQuery(req);
conn.setAutoCommit(true);
System.out.println(rs2.getString("rights"));
int rights = Integer.parseInt(rs2.getString("rights"));
rs2.close();
stat.close();
conn.close();
如果我关闭连接,数据库文件将被锁定并保持访问和锁定状态。
【问题讨论】:
-
stackoverflow.com/q/8511901/266374 的可能副本编辑:哎呀,那是 C#。但也许它仍然是 Java 中的 GC 问题?
-
你为什么在查询前设置
conn.setAutoCommit(false);,在查询后设置conn.setAutoCommit(true);? -
我已经阅读了一些关于此的说明,其中大多数都是这样完成的。
-
如果我删除这两个命令,它也不起作用。
-
在 Web 应用程序中使用 sqlite 是个坏主意;它并不真正支持多个连接(或者至少 AFAIK,JDBC 使用不支持该功能并且需要独占访问权限才能写入的变体)。使用“真实”数据库。