【问题标题】:how to check if a connection to a database exists in sqlite using java?如何使用java检查sqlite中是否存在与数据库的连接?
【发布时间】:2016-09-18 15:01:02
【问题描述】:

我有以下 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 类)它给了我"database is locked"

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

【问题讨论】:

    标签: java sqlite jdbc database-connection repository-pattern


    【解决方案1】:

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

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

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

    【讨论】:

    • 类似的东西?同步 (lock1) { connection = DriverManager.getConnection("jdbc:sqlite:C:\\Users\\ion\\Desktop\\sample.db");语句 = 连接.createStatement(); statement.setQueryTimeout(30);
    猜你喜欢
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2016-04-24
    相关资源
    最近更新 更多