如何使用 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'.

您可以使用同步,这样只允许一个线程执行代码。其他的要等到完成。

更多详情https://www.sqlite.org/cvstrac/wiki?p=DatabaseIsLocked