使用 DataSource 通过 (Xerial) sqlite-jdbc 驱动程序连接到 SQLite
Posted
技术标签:
【中文标题】使用 DataSource 通过 (Xerial) sqlite-jdbc 驱动程序连接到 SQLite【英文标题】:Using DataSource to connect to SQLite with (Xerial) sqlite-jdbc driver 【发布时间】:2017-05-04 22:56:41 【问题描述】:Java Tutorial 说有两种方法可以通过 JDBC 连接到数据库:使用 DriverManager 类(旧的,不推荐)和使用 DataSource 类。
我不知道如何使用 DriverManager:
Connection con = DriverManager.getConnection("jdbc:sqlite:mytest.db");
...
但我找不到如何通过 JDBC 使用 DataSource for SQLite。 SQLite(或它的 JDBC 驱动程序提供程序,我不知道如何正确调用它)是否支持使用 DataSource?
我正在使用 xerial/sqlite-jdbc 驱动程序来使用 java 中的 SQLite (https://github.com/xerial/sqlite-jdbc)
我最好的猜测是我将使用 org.sqlite.SQLiteDataSource 类(它在 sqlite-jdbc-3.15.1.jar 中用于 Xerial sqlite-jdbc 驱动程序),但是如何使用呢?是这样吗?我也猜想,如何做到这一点应该在 Xerial 驱动程序文档中,但他们只给出了如何使用 DriverManager 进行连接的示例。
所以我请求大师的帮助以确认 this Xerial 驱动程序/jar 不支持 DataSource 语法,或者举例说明如何做到这一点,或者建议支持 DataSource 的替代驱动程序(对于来自 Java 的 SQLite),或其他建议......
Java Tutorial
JDBC DriverManager — JDBC DriverManager 类定义对象 它可以将 Java 应用程序连接到 JDBC 驱动程序。驱动管理器 传统上一直是 JDBC 架构的支柱。它是 很小很简单。
标准扩展包 javax.naming 和 javax.sql 让您可以使用 使用 Java 命名和目录注册的 DataSource 对象 Interface™ (JNDI) 命名服务,用于建立与数据的连接 资源。您可以使用任一连接机制,但使用 尽可能推荐使用 DataSource 对象。
【问题讨论】:
【参考方案1】:我最好的猜测是我将使用 org.sqlite.SQLiteDataSource 类(它在 sqlite-jdbc-3.15.1.jar 中用于 Xerial sqlite-jdbc 驱动程序),
是的,这似乎很有可能。
但是怎么做呢?
我刚刚尝试了以下方法,它对我有用:
package com.example.sqlite.sqlite_test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.sqlite.SQLiteDataSource;
public class SqliteTestMain
public static void main(String[] args)
SQLiteDataSource ds = new SQLiteDataSource();
ds.setUrl("jdbc:sqlite::memory:");
try (Connection conn = ds.getConnection())
System.out.println("Connected.");
String sql =
"SELECT COUNT(*) AS n FROM \"sqlite_master\"";
try (
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery(sql))
rs.next();
System.out.printf(
"The \"sqlite_master\" table contains %d row(s).%n",
rs.getInt(1));
catch (SQLException e)
e.printStackTrace(System.err);
【讨论】:
我需要ds.setUrl("jdbc:sqlite:/path/to/table.sqlite");
才能使其与我的数据库一起使用。
@dauer - 你是说ds.setDatabaseName("/path/to/table.sqlite");
不适合你吗?
是的,setDatabaseName(...) 命令对我不起作用,我只是用完整路径和相对路径再次尝试:我总是收到错误 (pastebin.com/uDYXRmHG)。
请注意,我将代码更改为从先前存储在文件中的表中读取。如果我从 sqlite_master 读取它总是有效的。 (我猜使用 setDatabaseName 只是在内存数据库中创建一个新的数据库,而不是访问文件。)
@dauer - 啊哈。我明白你的意思了。感谢您的指正。我已经更新了答案。以上是关于使用 DataSource 通过 (Xerial) sqlite-jdbc 驱动程序连接到 SQLite的主要内容,如果未能解决你的问题,请参考以下文章
CachedRowSet 和 SQLite JDBC 驱动程序
LINUX下载编译sqlite-jdbc(支持mips64el/loongarch64的jar包下载)
配置hibernate 4通过tomcat 7中的JNDI Datasource连接数据库