如何使用 java 检查 sqlite 中是否存在与数据库的连接?
how to check if a connection to a database exists in sqlite using java?
我有以下 dbConnection
public class DBConnection {
protected Statement statement;
protected Connection connection = null;
public DBConnection() {
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
try {
connection = DriverManager.getConnection("jdbc:sqlite:C:\Users\ion\Desktop\sample.db");
statement = connection.createStatement();
statement.setQueryTimeout(30);
statement.executeUpdate("CREATE TABLE IF NOT EXISTS person (id STRING PRIMARY KEY NOT NULL,"
+ "name STRING, email STRING UNIQUE, password STRING)");
statement.executeUpdate("CREATE TABLE IF NOT EXISTS message (id STRING PRIMARY KEY NOT NULL,"
+ "text STRING, subject STRING, dateMessage Date, parrentMessageId String , personId String, "
+ "categoryId String,"
+ " FOREIGN KEY(personId) REFERENCES person(id),FOREIGN KEY(categoryId) REFERENCES category(id))");
statement.executeUpdate(
"CREATE TABLE IF NOT EXISTS category (id STRING PRIMARY KEY NOT NULL," + "name STRING)");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
但是如果我像这样在 Servlet 中使用
String id = personService.getIdByEmail(email);
message.setPersonId(id);
messageService.persist(message);
我调用了两次调用不同存储库的不同服务(personRep 和 messageRep 都扩展了这个 DbConnection class)它给了我 "database is locked"
如何检查连接是否已存在?请帮助我..谢谢!!
您正在使用两个设备同时调用两个服务。因此,服务器将创建两个线程并为两个请求提供服务。这两个头会同时打开两个连接。并使用此连接,一个线程将执行具有 CREATE table 命令的 SQL 语句。这是 DDL 表达式。所以一个线程获得数据库锁,另一个线程将出现瓶颈并给出异常,如 'database is lock'.
您可以使用同步,这样只允许一个线程执行代码。其他的要等到完成。
我有以下 dbConnection
public class DBConnection {
protected Statement statement;
protected Connection connection = null;
public DBConnection() {
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
try {
connection = DriverManager.getConnection("jdbc:sqlite:C:\Users\ion\Desktop\sample.db");
statement = connection.createStatement();
statement.setQueryTimeout(30);
statement.executeUpdate("CREATE TABLE IF NOT EXISTS person (id STRING PRIMARY KEY NOT NULL,"
+ "name STRING, email STRING UNIQUE, password STRING)");
statement.executeUpdate("CREATE TABLE IF NOT EXISTS message (id STRING PRIMARY KEY NOT NULL,"
+ "text STRING, subject STRING, dateMessage Date, parrentMessageId String , personId String, "
+ "categoryId String,"
+ " FOREIGN KEY(personId) REFERENCES person(id),FOREIGN KEY(categoryId) REFERENCES category(id))");
statement.executeUpdate(
"CREATE TABLE IF NOT EXISTS category (id STRING PRIMARY KEY NOT NULL," + "name STRING)");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
但是如果我像这样在 Servlet 中使用
String id = personService.getIdByEmail(email);
message.setPersonId(id);
messageService.persist(message);
我调用了两次调用不同存储库的不同服务(personRep 和 messageRep 都扩展了这个 DbConnection class)它给了我 "database is locked"
如何检查连接是否已存在?请帮助我..谢谢!!
您正在使用两个设备同时调用两个服务。因此,服务器将创建两个线程并为两个请求提供服务。这两个头会同时打开两个连接。并使用此连接,一个线程将执行具有 CREATE table 命令的 SQL 语句。这是 DDL 表达式。所以一个线程获得数据库锁,另一个线程将出现瓶颈并给出异常,如 'database is lock'.
您可以使用同步,这样只允许一个线程执行代码。其他的要等到完成。