将java连接到sqlite的问题

时间:2014-03-14 00:19:39

标签: java database sqlite

我已经阅读了关于此主题发布的许多主题,但没有一个能够解决我的问题。我使用mac,我正在尝试将java项目连接到sqlite,我遇到了一些问题。我已经成功连接到mysql到java。要连接mysql,我必须将mysql.jar文件添加到我的system / library / java / extensions文件夹中。一旦我这样做,它就顺风顺水。我没有幸运的是sqlite。我去了xerial并尝试使用他们的sqlite jdbc,但这样做会在我运行时产生大量其他错误。

是否有一个简单的方法和一个简单的jar我可以用来连接java到sqlite?像我上面描述的mysql的过程?

如果没有,任何人都可以给我一些帮助。

感谢您的帮助!

这是我使用的代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SQLiteJDBC
{
  public static void main(String[] args) throws ClassNotFoundException
  {
// load the sqlite-JDBC driver using the current class loader
Class.forName("org.sqlite.JDBC");

Connection connection = null;
try
{
  // create a database connection
  connection = DriverManager.getConnection("jdbc:sqlite:sample.db");
  Statement statement = connection.createStatement();
  statement.setQueryTimeout(30);  // set timeout to 30 sec.

  statement.executeUpdate("drop table if exists person");
  statement.executeUpdate("create table person (id integer, name string)");
  statement.executeUpdate("insert into person values(1, 'leo')");
  statement.executeUpdate("insert into person values(2, 'yui')");
  ResultSet rs = statement.executeQuery("select * from person");
  while(rs.next())
  {
    // read the result set
    System.out.println("name = " + rs.getString("name"));
    System.out.println("id = " + rs.getInt("id"));
  }
}
catch(SQLException e)
{
  // if the error message is "out of memory", 
  // it probably means no database file is found
  System.err.println(e.getMessage());
}
finally
{
  try
  {
    if(connection != null)
      connection.close();
  }
  catch(SQLException e)
  {
    // connection close failed.
    System.err.println(e);
      }
    }
  }
}

这些是我在使用xerial jar时收到的错误:

  

线程“main”中的异常java.lang.NoClassDefFoundError:org / sqlite / NativeDB     at java.lang.ClassLoader $ NativeLibrary.load(Native Method)     at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939)     at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864)     在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1825)     在java.lang.Runtime.load0(Runtime.java:792)     在java.lang.System.load(System.java:1059)     在org.sqlite.SQLiteJDBCLoader.loadNativeLibrary(SQLiteJDBCLoader.java:200)     在org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:148)     在org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:249)     在org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:65)     在org.sqlite.core.NativeDB.load(NativeDB.java:53)     在org.sqlite.core.CoreConnection.open(CoreConnection.java:136)     在org.sqlite.core.CoreConnection。(CoreConnection.java:66)     在org.sqlite.jdbc3.JDBC3Connection。(JDBC3Connection.java:21)     在org.sqlite.jdbc4.JDBC4Connection。(JDBC4Connection.java:23)     在org.sqlite.SQLiteConnection。(SQLiteConnection.java:44)     at org.sqlite.JDBC.createConnection(JDBC.java:113)     在org.sqlite.JDBC.connect(JDBC.java:87)     在java.sql.DriverManager.getConnection(DriverManager.java:579)     在java.sql.DriverManager.getConnection(DriverManager.java:243)     在SQLiteJDBC.main(SQLiteJDBC.java:18)   引起:java.lang.ClassNotFoundException:org.sqlite.NativeDB     在java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)     在java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)     at java.security.AccessController.doPrivileged(Native Method)     在java.net.URLClassLoader.findClass(URLClassLoader.java:354)     at java.lang.ClassLoader.loadClass(ClassLoader.java:423)     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)     ......还有21个

这些是我在没有xerial jar的情况下收到的错误:

  

线程“main”中的异常java.lang.ClassNotFoundException:org.sqlite.JDBC     在java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)     在java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)     at java.security.AccessController.doPrivileged(Native Method)     在java.net.URLClassLoader.findClass(URLClassLoader.java:354)     at java.lang.ClassLoader.loadClass(ClassLoader.java:423)     at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)     at java.lang.Class.forName0(Native Method)     at java.lang.Class.forName(Class.java:186)     在SQLiteJDBC.main(SQLiteJDBC.java:12)

1 个答案:

答案 0 :(得分:2)

也许你已经找到了答案,但以防万一。我有同样的问题,也有我的mac,我在this other question找到了解决方案。总之,该jar不适合mac,但您可以使用同一站点的sqlite-jdbc-3.7.2.jar。我希望我能提供帮助。