Java和SQLite

我被一个文件数据库提供的整洁吸引住了。 什么驱动程序/连接器库是在那里连接和SQLite与Java使用。

我发现了一个包装库, http://www.ch-werner.de/javasqlite ,但还有其他更多的着名项目可用吗?

维基列出了更多的包装:

  • Java包装(围绕SWIG接口): http : //tk-software.home.comcast.net/
  • 一个很好的教程,用于SQLite的JDBC驱动程序。 (至less起作用!) http://www.ci.uchicago.edu/wiki/bin/view/VDS/VDSDevelopment/UsingSQLite
  • 跨平台的JDBC驱动程序,它在Windows,Linux,OS X上使用embedded式本机SQLite库,并在其他操作系统上使用纯Java实现: https : //github.com/xerial/sqlite-jdbc (以前称为zentus )
  • 另一个Java – SWIG包装。 它只适用于Win32。 http://rodolfo_3.tripod.com/index.html
  • sqlite-java-shell:使用NestedVM构build的sqlite3命令行shell的100%纯Java端口。 (这不是一个JDBC驱动程序)。
  • 用于Mysaifu JVM的SQLite JDBC驱动程序:用于Mysaifu JVM和SQLite JNI Library(Windows)(x86)和Linux(i386 / PowerPC)的SQLite JDBC驱动程序。

我在用SQLite和Javasearch信息时发现了你的问题。 只是想我会添加我的答案,我也发布在我的博客 。

我一直在Java编码一段时间。 我也知道关于SQLite,但从来没有使用过…嗯,我已经通过其他应用程序使用它,但从来没有在我编码的应用程序。 所以本周我需要一个项目,这是非常简单的使用!

我find了SQLite的Java JDBC驱动程序。 只需将JAR文件添加到类path并导入java.sql。*

他的testing应用程序将创build一个数据库文件,发送一些SQL命令来创build一个表,将一些数据存储在表中,并将其读回并显示在控制台上。 它将在项目的根目录中创buildtest.db文件。 你可以用java -cp .:sqlitejdbc-v056.jar Test运行这个例子java -cp .:sqlitejdbc-v056.jar Test

 package com.rungeek.sqlite; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class Test { public static void main(String[] args) throws Exception { Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db"); Statement stat = conn.createStatement(); stat.executeUpdate("drop table if exists people;"); stat.executeUpdate("create table people (name, occupation);"); PreparedStatement prep = conn.prepareStatement( "insert into people values (?, ?);"); prep.setString(1, "Gandhi"); prep.setString(2, "politics"); prep.addBatch(); prep.setString(1, "Turing"); prep.setString(2, "computers"); prep.addBatch(); prep.setString(1, "Wittgenstein"); prep.setString(2, "smartypants"); prep.addBatch(); conn.setAutoCommit(false); prep.executeBatch(); conn.setAutoCommit(true); ResultSet rs = stat.executeQuery("select * from people;"); while (rs.next()) { System.out.println("name = " + rs.getString("name")); System.out.println("job = " + rs.getString("occupation")); } rs.close(); conn.close(); } } 

我明白你问了SQLite的具体问题,但也许HSQL数据库会更适合于Java。 它是用Java自己编写的,在JVM中运行,支持内存表等,所有这些特性使得它可以用于原型devise和unit testing。

有一个新的项目SQLJet是SQLite的纯Java实现。 它并不支持所有的SQLitefunction,但是对于一些使用SQLite数据库的Java项目来说,这可能是一个非常好的select。

大卫Crawshaw项目(sqlitejdbc-v056.jar)似乎过时,最后更新是2009年6月20日, 来源

我会推荐Crawshaw sqlite包装的Xerial叉子 。 我用Xerials的sqlite-jdbc-3.7.2.jar文件replacesqlitejdbc-v056.jar没有任何问题。

在伯尼的答案中使用相同的语法,更快,并与最新的SQLite库。

与Zentus的SQLite JDBC有什么不同?

最初的Zentus的SQLite JDBC驱动程序http://www.zentus.com/sqlitejdbc/本身是使用Java语言的SQLite数据库的优秀工具,而我们的SQLiteJDBC库也依赖于它的实现。; 然而,它的pure-java版本将SQLite的c / c ++代码完全转换为Java,与使用针对每个操作系统(win,mac,linux)编译的SQLite二进制文件的本地版本相比,速度要慢得多。

要使用本地版本的sqlite-jdbc,用户必须通过使用命令行参数来设置本地代码(dll,jnilib,so文件,它们是JNDI C程序)的path,例如-Djava.library.path = (dll,jnilib等的path)或-Dorg.sqlite.lib.path等。这个过程很容易出错,并且很难告诉每个用户设置这些variables。 我们的SQLiteJDBC库完全消除了这些不便。

另一个区别是,我们保持这个SQLiteJDBC库最新的SQLite引擎的最新版本,因为我们是这个库最热门的用户之一。 例如,SQLite JDBC是UTGB(东京大学基因组浏览器)工具包的核心组件,这是我们创build个性化基因组浏览器的实用工具。

编辑 :像往常一样,当你更新的东西,会有一些在你的代码模糊的地方(发生在我身上)的问题。 testingtestingtesting=)

伯尼的post非常有帮助。 不能投票(没有足够的声望:(),但它帮了很多,只是重申!

http://www.zentus.com/sqlitejdbc/

在这里你可以find最新的SQLite JDBC jar。 只需将jar添加到classpath中即可完成! :)你可以运行伯尼的示例代码来testing是否一切正常。

http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html http://www.sqlite.org/lang.html

在这里你可以findSQLite SQL语法的一些帮助。 欢呼到SQLite 🙂

在编译和运行代码时,应该设置类path选项的值。 就像下面这样:

 javac -classpath .;sqlitejdbc-v056.jar Text.java java -classpath .;sqlitejdbc-v056.jar Text 

请注意“。” 和sparate“;”(win,linux是“:”)

sqlitejdbc代码可以使用git从https://github.com/crawshaw/sqlitejdbc下载。;

 # git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc ... # cd sqlitejdbc # make 

注意:Makefile需要curl binary来下载sqlite库/ deps。

示例代码导致了Tomcat中的内存泄漏(在取消部署webapp之后,类加载器仍然保留在内存中),这最终将导致outofmemory内存。 解决这个问题的方法是使用sqlite-jdbc-3.7.8.jar ; 这是一个快照,所以它不会出现在Maven中。

错字: java -cp .:sqlitejdbc-v056.jar Test

应该是: java -cp .:sqlitejdbc-v056.jar; Test java -cp .:sqlitejdbc-v056.jar; Test

注意“.jar”后面的分号,希望对人有帮助,可能会造成很多麻烦