简体   繁体   English

使用DataSource连接到带有(Xerial)sqlite-jdbc驱动程序的SQLite

[英]Using DataSource to connect to SQLite with (Xerial) sqlite-jdbc driver

Java Tutorial says there are 2 ways to connect to database thru JDBC: with DriverManager class (old, not recommended) and with DataSource class. Java Tutorial说有两种方法可以通过JDBC连接数据库:使用DriverManager类(旧的,不推荐使用)和使用DataSource类。

I undestand how to do it with DriverManager: 我不知道如何使用DriverManager做到这一点:

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

But I cannot find how to use DataSource for SQLite thru JDBC. 但我找不到如何通过JDBC使用DataSource for SQLite。 Does SQLite (or JDBC driver providers for it, I don't know how to call it correctly) support using DataSource at all? SQLite(或JDBC驱动程序提供程序,我不知道如何正确调用它)支持使用DataSource吗?

I am using xerial/sqlite-jdbc driver to use SQLite from java ( https://github.com/xerial/sqlite-jdbc ) 我使用xerial / sqlite-jdbc驱动程序从java中使用SQLite( https://github.com/xerial/sqlite-jdbc

My best guess is that I shall use org.sqlite.SQLiteDataSource class (it comes in sqlite-jdbc-3.15.1.jar for Xerial sqlite-jdbc driver), but how? 我最好的猜测是我将使用org.sqlite.SQLiteDataSource类(它来自sqlite-jdbc-3.15.1.jar用于Xerial sqlite-jdbc驱动程序),但是怎么样? And is it so? 是这样吗? I also guess, that how to do it shall be in Xerial driver docs, but they give only example of how to connect using DriverManager. 我也猜测,如何做到这一点应该是在Xerial驱动程序文档中,但它们只给出了如何使用DriverManager进行连接的示例。

So I am asking kind help of guru to confirm that this Xerial driver/jar doesn't support DataSource syntax, or to give example how to do it, or to suggest alternative driver with DataSource support (for SQLite from Java), or advice otherwise... 所以我要求大师的帮助确认这个 Xerial驱动程序/ jar不支持DataSource语法,或者举例说明如何做,或者建议使用DataSource支持替代驱动程序(对于Java中的SQLite),或者建议否则...

Java Tutorial Java教程

JDBC Driver Manager — The JDBC DriverManager class defines objects which can connect Java applications to a JDBC driver. JDBC驱动程序管理器 - JDBC DriverManager类定义可以将Java应用程序连接到JDBC驱动程序的对象。 DriverManager has traditionally been the backbone of the JDBC architecture. DriverManager传统上一直是JDBC架构的支柱。 It is quite small and simple. 它非常小而且简单。

The Standard Extension packages javax.naming and javax.sql let you use a DataSource object registered with a Java Naming and Directory Interface™ (JNDI) naming service to establish a connection with a data source. 标准扩展包javax.naming和javax.sql允许您使用在Java命名和目录接口(JNDI)命名服务中注册的DataSource对象来建立与数据源的连接。 You can use either connecting mechanism, but using a DataSource object is recommended whenever possible. 您可以使用任一连接机制,但建议尽可能使用DataSource对象。

My best guess is that I shall use org.sqlite.SQLiteDataSource class (it comes in sqlite-jdbc-3.15.1.jar for Xerial sqlite-jdbc driver), 我最好的猜测是我将使用org.sqlite.SQLiteDataSource类(它来自sqlite-jdbc-3.15.1.jar用于Xerial sqlite-jdbc驱动程序),

Yes, that seems likely. 是的,这似乎很可能。

but how? 但怎么样?

I just tried the following and it worked for me: 我只是尝试了以下内容,它对我有用:

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);
        }
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM