2016-12-19 2 views
3

Java Tutorial sagt, es gibt zwei Möglichkeiten, um Datenbank durch JDBC eine Verbindung zu SQLite: mit Driver Klasse (alte, nicht empfohlen) und mit Datasource Klasse.Datasource verbinden mit (Xerial) SQLite-JDBC-Treiber

ich undestand, wie es mit Driver zu tun:

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

Aber ich kann nicht finden, wie Datasource für SQLite durch JDBC. Kann SQLite (oder JDBC-Treiber dafür, ich weiß nicht, wie ich es richtig nenne) mit DataSource überhaupt arbeiten?

ich xerial/sqlite-jdbc Fahrer bin mit SQLite verwenden, um von Java (https://bitbucket.org/xerial/sqlite-jdbc)

Meine beste Vermutung ist, dass ich org.sqlite.SQLiteDataSource Klasse verwenden soll (es kommt in SQLite-jdbc-3.15.1.jar für Xerial SQLite-JDBC-Treiber), aber wie? Und ist es so? Ich denke auch, dass es in Xerial-Treiberdokumenten zu finden ist, aber sie geben nur ein Beispiel dafür, wie man sich mit DriverManager verbindet.

So freundliche Hilfe von Guru Ich frage, dass this Xerial Fahrer/jar nicht unterstützt Datasource-Syntax, um zu bestätigen, oder ein Beispiel zu geben, wie es zu tun, oder alternative Treiber mit Datasource Unterstützung vorzuschlagen (für SQLite von Java) oder Ratschläge sonst ...

Java Tutorial

JDBC-Treiber-Manager - Der JDBC-Klasse Driver definiert Objekte , die Java-Anwendungen auf einen JDBC-Treiber eine Verbindung herstellen können. DriverManager war traditionell das Rückgrat der JDBC-Architektur. Es ist ziemlich klein und einfach.

Die Standard-Erweiterungspakete javax.naming und javax.sql können Sie verwenden ein Objekt Datasource registriert mit einem Java Naming and Directory Interface ™ (JNDI) Naming Service eine Verbindung mit einem Daten Quelle zu etablieren. Sie können beide Verbindungsmechanismen verwenden, es wird jedoch empfohlen, wenn möglich, ein DataSource-Objekt zu verwenden.

Antwort

2

Meine beste Vermutung ist, dass ich org.sqlite.SQLiteDataSource Klasse verwenden soll (es kommt in SQLite-jdbc-3.15.1.jar für Xerial SQLite-JDBC-Treiber),

Ja das scheint wahrscheinlich.

aber wie?

Ich habe gerade versucht, die folgende und es für mich gearbeitet:

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

} 
+1

Ich brauchte 'ds.setUrl ("jdbc: sqlite: /path/to/table.sqlite");' zu machen arbeite mit meiner Datenbank. – dauer

+0

@dauer - Sagen Sie, dass 'ds.setDatabaseName ("/path/to/table.sqlite ");' nicht für Sie funktioniert hat? –

+1

Ja, der Befehl setDatabaseName (...) funktioniert nicht für mich, ich habe es gerade noch einmal mit dem vollständigen Pfad und dem relativen Pfad versucht: Ich bekomme immer einen Fehler (https://pastebin.com/uDYXRmHG). – dauer