Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Android Support JDBC

Tags:

I know that on Android there is android.database.sqlite package that provides helpful classes to manage the internal android database.

The question is - can I use the standard java.sql package to manipulate Android's database without using anything from android.database.sqlite.* I try to open connection using SQLite JDBC driver but when i added the library as e reference to the project eclipse crashes with "java heap out of memory ... couldn't convert to dalvik VM".

like image 556
Mojo Risin Avatar asked Nov 13 '09 10:11

Mojo Risin


4 Answers

You cannot import a JAR implementing java.* classes easily. And, JDBC would need to be ported to Android, since it probably relies upon classes in JavaSE that Android lacks. And, you would need to write your own JDBC driver for SQLite anyway, wrapping the API Android already supplies, since I suspect the existing JDBC driver uses JNI. And, when all of that is done, you will have an application that adds a lot of bloat, making it less likely people will download and retain your application.

In short, I wouldn't go this route.

like image 147
CommonsWare Avatar answered Oct 19 '22 18:10

CommonsWare


There is an (undocumented?) JDBC driver for Android's SQLite database. Try this: (from 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);     }  
like image 45
kristianlm Avatar answered Oct 19 '22 17:10

kristianlm


the JDBC driver is undocumented and unsupported. please do not use this code.

avoid java.sql and use android.database.sqlite instead.

like image 42
Elliott Hughes Avatar answered Oct 19 '22 16:10

Elliott Hughes


There is such a driver now: SQLDroid.

like image 29
Alexey Romanov Avatar answered Oct 19 '22 17:10

Alexey Romanov