我知道在Android上有android.database.sqlite包,它提供了有用的类来管理内部的android数据库。
问题是 - 我可以使用标准的java.sql包来操作Android的数据库,而无需使用android.database.sqlite中的任何内容。*我尝试使用SQLite JDBC驱动程序打开连接但是当我添加库作为e引用时项目eclipse崩溃,“java堆内存不足......无法转换为dalvik VM”。
答案 0 :(得分:17)
您无法轻松导入实施java.*
类的JAR。并且,JDBC需要移植到Android,因为它可能依赖于Android缺乏的JavaSE中的类。并且,无论如何,你需要为SQLite编写自己的JDBC驱动程序,包装Android已经提供的API,因为我怀疑现有的JDBC驱动程序使用JNI。而且,当所有这一切都完成后,您将拥有一个增加了大量膨胀的应用程序,使人们下载和保留您的应用程序的可能性降低。
简而言之,我不会走这条路。
答案 1 :(得分:11)
Android的SQLite数据库有一个(未记录的?)JDBC驱动程序。试试这个: (来自http://groups.google.com/group/android-developers/browse_thread/thread/cf3dea94d2f6243c)
try {
String db = "jdbc:sqlite:" + getFilesDir() + "/test.db";
Class.forName("SQLite.JDBCDriver");
Connection conn = DriverManager.getConnection(db);
Statement stat = conn.createStatement();
stat.executeUpdate("create table primes (number int);");
stat.executeUpdate("insert into primes values (2);");
stat.executeUpdate("insert into primes values (3);");
stat.executeUpdate("insert into primes values (5);");
stat.executeUpdate("insert into primes values (7);");
ResultSet rs = stat.executeQuery("select * from primes");
boolean b = rs.first();
while (b) {
Log.d("JDBC", "Prime=" + rs.getInt(1));
b = rs.next();
}
conn.close();
} catch (Exception e) {
Log.e("JDBC", "Error", e);
}
答案 2 :(得分:5)
JDBC驱动程序未记录且不受支持。请不要使用此代码。
避免使用java.sql并改为使用android.database.sqlite。
答案 3 :(得分:2)
现在有这样的驱动程序:SQLDroid。
答案 4 :(得分:0)
从第一天开始,Android就具有完整的JDBC支持,但没有附带任何驱动程序(至少是正式提供)。 JDBC驱动程序的普遍问题是,大多数驱动程序都依赖于本机代码,除非开发人员特别考虑使用Android,否则这会限制可移植性。
SQLite.JDBCDriver
,它支持jdbc:sqlite:/path/to/db
。但是,它似乎已被删除(至少从4.4.4开始)。在Android上使用JDBC时可能遇到的另一个问题是,某些Android机制(例如内容提供商)期望使用Cursor
使用的android.database.sqlite.*
实例,而JDBC具有{{1} } 为了这个目的。由于这两个在很大程度上在功能上是等效的,并且ResultSet
是一个接口,因此您可以编写实现Cursor
并将其方法转换为等效的Cursor
的适配器类。
答案 5 :(得分:0)
还有另一个 SQLite-jdbc 驱动程序。我按照 here 的描述让它在我的应用程序中运行。但是,并非所有应用程序二进制接口都支持它,但支持大多数设备。