2009-10-06 18 views
39

Używam jednego prostego kodu, aby uzyskać dostęp do bazy danych SQLite z aplikacji Java. Mój kod jestJak połączyć SQLite z Javą?

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
public class ConnectSQLite 
{ 
    public static void main(String[] args) 
    { 
    Connection connection = null; 
    ResultSet resultSet = null; 
    Statement statement = null; 

    try 
    { 
     Class.forName("org.sqlite.JDBC"); 
     connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db"); 
     statement = connection.createStatement(); 
     resultSet = statement 
       .executeQuery("SELECT EMPNAME FROM EMPLOYEEDETAILS"); 
     while (resultSet.next()) 
     { 
      System.out.println("EMPLOYEE NAME:" 
        + resultSet.getString("EMPNAME")); 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     try 
     { 
      resultSet.close(); 
      statement.close(); 
      connection.close(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
} 

Ale ten kod daje jeden wyjątek jak

java.lang.ClassNotFoundException: org.sqlite.JDBC 

Jak mogę slove to, proszę mi pomóc.

+5

Chyba nie umieszczasz jar SQLite w ścieżce klas – vpram86

Odpowiedz

53

Potrzebny jest sterownik SQLite JDBC w ścieżce klas.

Taro L. Saito (xerial) rozwidla projekt Zentus i teraz zachowuje go pod nazwą sqlite-jdbc. Zawiera natywne sterowniki dla głównych platform, więc nie musisz ich konfigurować osobno.

+0

Używam tego sterownika i działa dobrze. Ale dlaczego nie jest kompaktowanie bazy danych podczas tworzenia. Z FireFox sqlite plugin Baza danych zagęszczony z 11,5 MB do 11,3 MB. jak to zrobić z Javą. –

+0

@Dyapa Musisz okresowo uruchamiać 'VACUUM'; ponieważ JDBC faktycznie nie interpretuje SQL (z uzasadnionych powodów) wystarczy go przesłać. Lub użyj pragma na połączenie, aby uruchomić w trybie automatycznego próżni. –

+0

@DonalFellows możesz wyjaśnić, jak uruchomić VACUUM przez Javę. –

8

Jeśli używasz NetBeans Pobierz sqlitejdbc driver prawym przyciskiem myszy folder biblioteki z okna projektu i wybierz Add Library następnie kliknij przycisk Utwórz wprowadzić nazwę Biblioteka (SQLite) i wciśnij OK

Masz aby dodać sterownik sqlitejdbc do ścieżki klasy, kliknij przycisk Dodaj Jar/Folder .. i wybierz plik sqlitejdbc, który wcześniej pobrałeś. Hit OK i jesteś gotowy do pracy!

+0

Z powodu tego problemu bardzo się zmagałem. Jestem początkującym użytkownikiem języka Java i używam Netbeans. To była frustracja. Wreszcie Twoja odpowiedź uratowała mi dzień. – Indigo

5

Używam Eclipse, a ja skopiowałem twój kod i otrzymałem ten sam błąd. Następnie otworzyłem właściwości projektu -> Ścieżka budowania Java -> Biblioteki -> Dodaj zewnętrzne pliki JAR ... c: \ jrun4 \ lib \ sqlitejdbc-v056.jar Działa jak wdzięk. Może być konieczne ponowne uruchomienie serwera WWW, jeśli właśnie skopiowano plik .jar.

1
connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db"); 

Zamiast tego szuka

connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb"); 
0
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import javax.swing.JOptionPane; 


public class Connectdatabase { 

     Connection con = null; 

     public static Connection ConnecrDb(){ 

      try{ 
       //String dir = System.getProperty("user.dir"); 
       Class.forName("org.sqlite.JDBC"); 
       Connection con = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db"); 
       return con; 
      } 
      catch(ClassNotFoundException | SQLException e){ 
       JOptionPane.showMessageDialog(null,"Problem with connection of database"); 
       return null; 
      } 
     } 

    } 
3
import java.sql.ResultSet; 
    import java.sql.SQLException; 
    import javax.swing.JOptionPane; 
    import org.sqlite.SQLiteDataSource; 
    import org.sqlite.SQLiteJDBCLoader; 

    public class Test { 

     public static final boolean Connected() { 
      boolean initialize = SQLiteJDBCLoader.initialize(); 

      SQLiteDataSource dataSource = new SQLiteDataSource(); 
      dataSource.setUrl("jdbc:sqlite:/home/users.sqlite"); 
      int i=0; 
      try { 
       ResultSet executeQuery = dataSource.getConnection() 
         .createStatement().executeQuery("select * from \"Table\""); 
       while (executeQuery.next()) { 
i++; 
        System.out.println("out: "+executeQuery.getMetaData().getColumnLabel(i)); 

       } 



      } catch (SQLException ex) { 
       JOptionPane.showMessageDialog(null, ex); 
      } 

      return initialize; 

     } 
+0

Używałem 'dataSource.setDatabaseName (...)' i to nie działało. Teraz widzę, że potrzebowałem użyć 'dataSource.setUrl (...)'. Dzięki. :-) – kmort

7

Jeśli używasz Netbeans przy użyciu Maven, aby dodać bibliotekę jest łatwiejsze. Próbowałem używać powyższych rozwiązań, ale nie działało.

<dependencies> 
    <dependency> 
     <groupId>org.xerial</groupId> 
     <artifactId>sqlite-jdbc</artifactId> 
     <version>3.7.2</version> 
    </dependency> 
</dependencies> 

Dodałem Maven zależność i java.lang.ClassNotFoundException: org.sqlite.JDBC błędu nie ma.

1

Musisz pobrać i dodać sterownik SQLite JDBC do swojej ścieżki klas.
można pobrać stąd https://bitbucket.org/xerial/sqlite-jdbc/downloads

Jeśli używasz Gradle, trzeba tylko dodać zależność SQLite:

dependencies { 
    compile 'org.xerial:sqlite-jdbc:3.8.11.2' 
} 

Następna rzeczą, którą musisz zrobić, to zainicjować sterownik:

try { 
    Class.forName("org.sqlite.JDBC"); 
} catch (ClassNotFoundException eString) { 
    System.err.println("Could not init JDBC driver - driver not found"); 
}