2009-10-06 65 views
39

Estoy usando un código simple para acceder a la base de datos SQLite desde la aplicación Java. Mi código es¿Cómo conectar SQLite con Java?

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

Pero este código da una excepción como

java.lang.ClassNotFoundException: org.sqlite.JDBC 

¿Cómo puedo slove esto, por favor, ayúdame.

+5

Supongo que no está poniendo el jar SQLite en classpath – vpram86

Respuesta

53

Necesita tener un controlador SQLite JDBC en su classpath.

Taro L. Saito (xerial) bifurcó el proyecto Zentus y ahora lo mantiene con el nombre sqlite-jdbc. Agrupa los controladores nativos para las principales plataformas, por lo que no necesita configurarlos por separado.

+0

estoy usando este controlador, y funciona bien. Pero por qué no está compactando la base de datos durante la creación. Con FireFox sqlite plugin Database compactada de 11.5MB a 11.3MB. cómo hacer eso con java. –

+0

@Dyapa Necesita ejecutar periódicamente 'VACUUM'; ya que JDBC no interpreta el SQL (por muy buenas razones) simplemente envíelo. O use un pragma por conexión para ejecutar en modo de vacío automático. –

+0

@DonalFellows puede explicar cómo ejecutar VACUUM a través de java. –

8

Si está utilizando NetBeans Descargar la sqlitejdbc driver haga clic derecho en la carpeta Bibliotecas de la ventana del proyecto y seleccione Add Library, continuación, haga clic en el botón Crear introduzca el nombre de Biblioteca (SQLite) y pulse Aceptar

Tienes para agregar el controlador sqlitejdbc a la ruta de la clase, haga clic en el botón Añadir jar/carpeta ... y seleccione el archivo sqlitejdbc que descargó anteriormente Pulse Aceptar y ¡listo!

+0

Luché mucho debido a este problema. Soy un novato de Java y uso de Netbeans. Ha sido una frustración. Finalmente, tu respuesta me salvó el día. – Indigo

5

Estoy usando Eclipse y copié tu código y obtuve el mismo error. Luego abrí las propiedades del proyecto-> Java Build Path-> Libraries-> Add External JAR ... c: \ jrun4 \ lib \ sqlitejdbc-v056.jar Funcionó como un amuleto. Es posible que deba reiniciar su servidor web si acaba de copiar el archivo .jar.

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

En lugar de esto puso

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

Estaba usando 'dataSource.setDatabaseName (...)' y no funcionaba. Ahora veo que necesito usar 'dataSource.setUrl (...)'. Gracias. :-) – kmort

7

Si está usando Netbeans usando Maven para agregar la biblioteca es más fácil. He intentado usar las soluciones anteriores, pero no funcionó.

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

he añadido Maven dependencia y java.lang.ClassNotFoundException: org.sqlite.JDBC error ido.

1

Debe descargar y agregar el controlador SQLite JDBC a su classpath.
Puede descargar desde aquí https://bitbucket.org/xerial/sqlite-jdbc/downloads

Si utiliza Gradle, sólo tendrá que añadir la dependencia SQLite:

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

Lo siguiente que tienes que hacer es inicializar el conductor:

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