java - 如何使用java检查sqlite中是否存在与数据库的连接?

标签 java sqlite jdbc database-connection repository-pattern

我有以下 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类)它给了我“数据库已锁定”

如何检查连接是否已存在?请帮助我..谢谢!!

最佳答案

您正在使用两个设备同时调用两个服务。因此,服务器将创建两个线程并服务这两个请求。这两个头将同时打开两个连接。使用此连接,线程将执行具有 CREATE table 命令的 SQL 语句。这是DDL表达式。因此,一个线程获得数据库锁,而其他线程将成为瓶颈并给出“数据库被锁”等异常。

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

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

关于java - 如何使用java检查sqlite中是否存在与数据库的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39559064/

相关文章:

java - Joda 日期时间、格式化和 Mysql 时间戳

java - 如何在 Map<Pair<Match,DatapathId>, FlowRuleStats> 中进行迭代循环?

Python Sqlite3 和 QSqlite 区别

iphone - 如何获取sqlite3中最后更新的值

java - 当我们 promise 时到底会发生什么?

java - select 语句给出字符串变量错误

java - 奇怪的SQLException : No suitable driver found for jdbc:postgresql

Java 使用仿函数连接集合

java - 如何配置 Logback 以将记录器的不同级别记录到不同的目的地?

python - 无法在 Jython 中导入 Python 函数