Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite无法连接到数据库错误:java.lang.unsatifiedlinkerror:org.sqlite.core.NativeDB.\u open\u utf8([BI)V_Java_Sqlite_Database Connection - Fatal编程技术网

sqlite无法连接到数据库错误:java.lang.unsatifiedlinkerror:org.sqlite.core.NativeDB.\u open\u utf8([BI)V

sqlite无法连接到数据库错误:java.lang.unsatifiedlinkerror:org.sqlite.core.NativeDB.\u open\u utf8([BI)V,java,sqlite,database-connection,Java,Sqlite,Database Connection,我得到以下错误: 我有这段代码,在我发布这段代码之前,我尝试了几件事情,我确定这是源错误,它没有连接到数据库。 我正在tomcat中运行此代码,作为微服务的后端数据库。由于某些原因,它试图连接到我的临时目录,但它没有访问权限。我使用了 System.setProperty("java.io.tmpdir", "C:\\Dev\\temp"); 它会将dll文件写入此位置。 但它不连接到数据库。 如果数据库不存在,它必须首先创建数据库 Caused by: **java.lang.Unsatis

我得到以下错误: 我有这段代码,在我发布这段代码之前,我尝试了几件事情,我确定这是源错误,它没有连接到数据库。 我正在tomcat中运行此代码,作为微服务的后端数据库。由于某些原因,它试图连接到我的临时目录,但它没有访问权限。我使用了

System.setProperty("java.io.tmpdir", "C:\\Dev\\temp");
它会将dll文件写入此位置。 但它不连接到数据库。 如果数据库不存在,它必须首先创建数据库

Caused by: **java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open_utf8([BI)V**
at org.sqlite.core.NativeDB._open_utf8(Native Method)
at org.sqlite.core.NativeDB._open(NativeDB.java:78)
at org.sqlite.core.DB.open(DB.java:202)
at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:243)
at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:61)
at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28)
at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:21)
at org.sqlite.JDBC.createConnection(JDBC.java:115)
at org.sqlite.JDBC.connect(JDBC.java:90)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open(Ljava/lang/String;I)V
我的基本代码是:

公共类数据库{

private static Database instance = new Database();
 Connection conn = null;
 Statement stmt = null;

private Database() { 
    getInstance();
}

public static Database getInstance() {
    return instance;
}

public Connection dbConnection() {

    String createTableQuery = "CREATE TABLE IF NOT EXIST fileBlock (pid not null, filename not null, PRIMARY KEY(pid,filename))";
    try {
        //create database if not exist and then connect
        Class.forName("org.sqlite.JDBC");
        conn = DriverManager.getConnection("jdbc:sqlite:blockedFiles.db");
        //verify table exist if not create it
        stmt = conn.createStatement();
        stmt.execute(createTableQuery);
        return conn;            
    }
    catch(Exception e){
        return null;
    }
}

public void closeConnection() {
    try {
        conn.close();
    }
    catch(Exception e) {}   
}
}

我的实现是

 Connection conn = Database.getInstance().dbConnection();
    if(conn != null ) {
        System.out.println("true");         
    }
    else {
        System.out.println("false");
    }       
    Database.getInstance().closeConnection();

我发现这主要是本地机器上的权限问题

我之所以能够解决这个问题,是因为使用了SQLiteConfig类

此类允许您传递配置选项。我添加到数据库连接类的设置:

 SQLiteConfig config = new SQLiteConfig();
  // config.setCacheSize(cache_size);
   config.setBusyTimeout(30000);
   config.setSynchronous(SynchronousMode.NORMAL);
   config.setTempStore(TempStore.MEMORY);
   config.setTempStoreDirectory("some path, I used same as java.io.tmpdir");
   config.setJournalMode(JournalMode.MEMORY);
 //create database if not exist and then connect
    Class.forName("org.sqlite.JDBC");
    conn = DriverManager.getConnection("jdbc:sqlite:blockedFiles.db", config.toProperties());
    //verify table exist if not create it
    stmt = conn.createStatement();
    stmt.execute(createTableQuery);
    return conn;

在连接到数据库之前,我告诉它在内存中加载驱动程序,并且日志文件(WAL)也在内存中。

我发现这主要是本地计算机上的权限问题

我之所以能够解决这个问题,是因为使用了SQLiteConfig类

此类允许您传递配置选项。我添加到数据库连接类的设置:

 SQLiteConfig config = new SQLiteConfig();
  // config.setCacheSize(cache_size);
   config.setBusyTimeout(30000);
   config.setSynchronous(SynchronousMode.NORMAL);
   config.setTempStore(TempStore.MEMORY);
   config.setTempStoreDirectory("some path, I used same as java.io.tmpdir");
   config.setJournalMode(JournalMode.MEMORY);
 //create database if not exist and then connect
    Class.forName("org.sqlite.JDBC");
    conn = DriverManager.getConnection("jdbc:sqlite:blockedFiles.db", config.toProperties());
    //verify table exist if not create it
    stmt = conn.createStatement();
    stmt.execute(createTableQuery);
    return conn;

在连接到数据库之前,我告诉它在内存中加载驱动程序和日志文件(WAL)也在内存中。

相关问题:相关问题:所述“权限问题”也可能由不存在的临时目录引起。这至少是我的问题所在。所述“权限问题”也可能由不存在的临时目录引起。这至少是我的问题所在。