5 votes

Utilisation de DataSource pour se connecter à SQLite avec le pilote (Xerial) sqlite-jdbc

Tutoriel Java indique qu'il existe deux façons de se connecter à une base de données par l'intermédiaire de JDBC : avec DriverManager (ancienne, non recommandée) et avec DataSource classe.

Je comprends comment le faire avec DriverManager :

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

Mais je ne trouve pas comment utiliser DataSource pour SQLite via JDBC. Est-ce que SQLite (ou les pilotes JDBC pour lui, je ne sais pas comment l'appeler correctement) supporte l'utilisation de DataSource ?

J'utilise xerial/sqlite-jdbc pour utiliser SQLite depuis Java ( https://github.com/xerial/sqlite-jdbc )

Je pense que je devrais utiliser la classe org.sqlite.SQLiteDataSource (elle est fournie dans sqlite-jdbc-3.15.1.jar pour le pilote sqlite-jdbc de Xerial), mais comment ? Et est-ce bien le cas ? Je pense aussi que la documentation du pilote Xerial devrait expliquer comment faire, mais elle ne donne qu'un exemple de connexion à l'aide du DriverManager.

Je demande donc l'aide d'un gourou pour confirmer que este Le pilote/jar Xerial ne supporte pas la syntaxe DataSource, ou donner un exemple de comment le faire, ou suggérer un pilote alternatif supportant DataSource (pour SQLite depuis Java), ou des conseils autrement...

Tutoriel Java

J qui peuvent connecter des applications Java à un pilote JDBC. DriverManager est traditionnellement l'épine dorsale de l'architecture JDBC. Il est Il est assez petit et simple.

Les paquets d'extension standard javax.naming et javax.sql vous permettent d'utiliser un objet DataSource enregistré auprès d'un service de dénomination Java Naming and Directory Java Naming and Directory Interface™ (JNDI) pour établir une connexion avec une source de données. données. Vous pouvez utiliser l'un ou l'autre mécanisme de connexion, mais l'utilisation d'un objet DataSource est recommandée dans la mesure du possible.

3voto

Gord Thompson Points 30178

Je pense que je devrais utiliser la classe org.sqlite.SQLiteDataSource (elle est fournie dans sqlite-jdbc-3.15.1.jar pour le pilote sqlite-jdbc de Xerial),

Oui, cela semble probable.

mais comment ?

Je viens d'essayer ce qui suit et cela a fonctionné pour moi :

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

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X