使用DataSource通过(Xerial)sqlite-jdbc驱动程序

时间:2016-12-19 20:09:45

标签: java sqlite jdbc datasource

Java Tutorial表示有两种方法可以通过JDBC连接数据库: DriverManager 类(旧的,不推荐)和 DataSource 类。

我不知道如何使用DriverManager:

Connection con = DriverManager.getConnection("jdbc:sqlite:mytest.db");
...

但是我找不到如何通过JDBC将DataSource用于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驱动程序管理器 - JDBC DriverManager类定义对象   它可以将Java应用程序连接到JDBC驱动程序。 DriverManager的   传统上一直是JDBC架构的支柱。它是   非常小而简单。

     

使用标准扩展包javax.naming和javax.sql   使用Java命名和目录注册的DataSource对象   Interface™(JNDI)命名服务,用于与数据建立连接   资源。您可以使用任一连接机制,但使用   建议尽可能使用DataSource对象。

1 个答案:

答案 0 :(得分:4)

  

我最好的猜测是我将使用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);
        }
    }

}