sqlite cannot connect to database error: java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open_utf8([BI)V
sqlite cannot connect to database error: java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open_utf8([BI)V
我收到以下错误:
我有这段代码在发布之前我已经尝试了几件事,我确定这是它没有连接到数据库的源错误。
我 运行 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
当我尝试连接到 sqlite 数据库时出现上述错误
Failed to load native library:sqlite-3.31.1-0d2f436c-54b0-48ed-8a6b-044f659f50d6-sqlitejdbc.dll. osinfo: Windows/x86_64
java.lang.UnsatisfiedLinkError: C:\Users\home\AppData\Local\Temp\sqlite-3.31.1-0d2f436c-54b0-48ed-8a6b-044f659f50d6-sqlitejdbc.dll: Access is denied
我的基本代码是:
public class 数据库 {
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 Class。
此 Class 允许您传递配置选项。我添加到数据库连接的设置 class:
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) 也在内存中。
使用 -Dorg.sqlite.tmpdir
指定您自己的 tmp
路径,例如:
java -jar -Dorg.sqlite.tmpdir=./tmp {your-jar-file}.jar
我收到以下错误: 我有这段代码在发布之前我已经尝试了几件事,我确定这是它没有连接到数据库的源错误。 我 运行 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
当我尝试连接到 sqlite 数据库时出现上述错误
Failed to load native library:sqlite-3.31.1-0d2f436c-54b0-48ed-8a6b-044f659f50d6-sqlitejdbc.dll. osinfo: Windows/x86_64
java.lang.UnsatisfiedLinkError: C:\Users\home\AppData\Local\Temp\sqlite-3.31.1-0d2f436c-54b0-48ed-8a6b-044f659f50d6-sqlitejdbc.dll: Access is denied
我的基本代码是:
public class 数据库 {
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 Class。
此 Class 允许您传递配置选项。我添加到数据库连接的设置 class:
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) 也在内存中。
使用 -Dorg.sqlite.tmpdir
指定您自己的 tmp
路径,例如:
java -jar -Dorg.sqlite.tmpdir=./tmp {your-jar-file}.jar