当前位置:  开发笔记 > 编程语言 > 正文

Java和SQLite

如何解决《Java和SQLite》经验,为你挑选了6个好方法。

我被单个文件数据库提供的整洁所吸引.什么驱动程序/连接器库可以连接并使用SQLite和Java.

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



1> Bernie Perez..:

我在使用SQLite和Java 搜索信息时发现了您的问题.只是想我会添加我的答案,我也发布在我的博客上.

我已经用Java编写了一段时间了.我也知道SQLite但从未使用它......我已经通过其他应用程序使用它,但从未在我编写的应用程序中使用它.所以本周我需要一个项目,它的使用非常简单!

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

他的测试应用程序将创建一个数据库文件,发送一些SQL命令来创建一个表,在表中存储一些数据,然后将其读回并显示在控制台上.它将在项目的根目录中创建test.db文件.你可以运行这个例子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();
    }
  }


另请注意,Crawshaw项目似乎处于中断状态,但在此处进行了分叉和更新:http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC
我不断惊讶于较旧的帖子如何非常有用 - 就像这个.+1
zentus.com好像坏了,在这里找到了镜子; ftp://priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/about.htm
谢谢@DanielMagnusson,你是一个救生员.关于这个话题,任何人仍在寻找sqliteJDBC驱动程序可以去ftp://priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/sqlitejdbc-v056.jar,因为about.htm链接的链接不正确.
maven依赖:http://mvnrepository.com/artifact/org.xerial/sqlite-jdbc

2> Peter Hoffma..:

在维基列出了一些更多的包装:

Java包装器(围绕SWIG接口):http://tk-software.home.comcast.net/

为SQLite使用JDBC驱动程序的好教程.(它至少起作用!)http://www.ci.uchicago.edu/wiki/bin/view/VDS/VDSDevelopment/UsingSQLite

跨平台JDBC驱动程序,它在Windows,Linux,OS X上使用嵌入式本机SQLite库,并回退到其他操作系统上的纯Java实现:https://github.com/xerial/sqlite-jdbc(以前的zentus)

另一个Java - SWIG包装器.它只适用于Win32.http://rodolfo_3.tripod.com/index.html

sqlite-java-shell:使用NestedVM构建的sqlite3命令行shell的100%纯Java端口.(这不是JDBC驱动程序).

用于Mysaifu JVM的SQLite JDBC驱动程序:用于Mysaifu JVM的SQLite JDBC驱动程序和用于Windows(x86)和Linux(i386/PowerPC)的SQLite JNI库.


http://www.zentus.com/sqlitejdbc - > 404
@Martijn http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC是zentus驱动程序的一个分支,支持BLOB(在他们的网站上有一个短暂的啧啧).
我对此列表的补充是sqlite4java - http://code.google.com/p/sqlite4java - 它是一个包装器(没有JDBC); 预编译用于Windows,Mac,Linux.它使用简单,它强制执行一些合同,以帮助开发人员避免滥用SQLite.
sqlite4java看起来很有趣,但它们也对各种包装器进行了很好的比较:http://code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers

3> javashlook..:

我理解你特意询问了SQLite,但是HSQL数据库可能更适合Java.它是用Java编写的,在JVM中运行,支持内存表等.所有这些功能使它非常适用于原型设计和单元测试.


是的HSQL是一个非常好的选择,我已经在几个客户端应用程序中广泛使用它以获得良好的效果.但是在这个例子中,我的确想要使用SQLite.

4> Daniel Magn..:

David Crawshaw项目(sqlitejdbc-v056.jar)似乎已过期,最后更新时间为2009年6月20日, 来源此处

我会推荐Crawshaw sqlite包装器的Xerials fork.我用Xerials sqlite-jdbc-3.7.2.jar文件替换了sqlitejdbc-v056.jar没有任何问题.

使用与Bernie的答案相同的语法,并且速度更快,并且使用最新的sqlite库.

与Zentus的SQLite JDBC有什么不同?

最初的Zentus的SQLite JDBC驱动程序 http://www.zentus.com/sqlitejdbc/本身是使用Java语言的SQLite数据库的绝佳工具,我们的SQLiteJDBC库也依赖于它的实现.但是,它的纯java版本完全将SQLite的c/c ++代码转换为Java,与其本机版本相比要慢得多,后者使用为每个操作系统编译的SQLite二进制文件(win,mac,linux).

要使用sqlite-jdbc的本机版本,用户必须使用命令行参数设置本机代码(dll,jnilib,so文件,即JNDI C程序)的路径,例如-Djava.library.path = (dll,jnilib等的路径),或-Dorg.sqlite.lib.path等.这个过程容易出错,并且告诉每个用户设置这些变量很麻烦.我们的SQLiteJDBC库完全消除了这些不便之处.

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

编辑:像往常一样,当你更新某些东西时,你的代码中会出现一些不明显的问题(发生在我身上).测试测试=)



5> 小智..:

有一个新项目SQLJet是SQLite的纯Java实现.它还不支持所有SQLite功能,但对于一些使用SQLite数据库的Java项目来说可能是一个非常好的选择.


它看起来很有希望,但似乎它还没有提供SQL查询功能,对我来说是一种交易破坏.

6> 小智..:

伯尼的帖子非常有帮助.无法投票(没有足够的声誉:().但它帮了很多.重申一下!

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

在这里,您可以找到最新的SQLite JDBC jar.只需将jar添加到classpath中即可完成!:)您可以运行Bernie的示例代码来测试一切是否正常.

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

在这里,您可以找到有关SQLite的SQL语法的一些帮助.欢呼来到SQLite :)

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有