2009-11-13 24 views
20

Sé que en Android existe el paquete android.database.sqlite que proporciona clases útiles para administrar la base de datos interna de Android.Compatible con Android JDBC

La pregunta es -. Puedo utilizar el paquete java.sql estándar para manipular la base de datos de Android sin usar nada de android.database.sqlite * Trato de abrir la conexión utilizando el controlador JDBC SQLite pero cuando he añadido a la biblioteca como referencia e al proyecto eclipse se bloquea con "java heap out of memory ... could not convert to dalvik VM".

Respuesta

17

No se puede importar fácilmente un JAR implementando java.* clases. Y, JDBC tendría que ser portado a Android, ya que probablemente se basa en las clases en JavaSE que Android no tiene. Además, necesitaría escribir su propio controlador JDBC para SQLite de todos modos, ajustando la API que ya proporciona Android, ya que sospecho que el controlador JDBC existente usa JNI. Y, cuando se haya hecho todo eso, tendrá una aplicación que agrega mucha hinchazón, por lo que es menos probable que las personas descarguen y conserven su aplicación.

En resumen, no seguiría esta ruta.

+0

Esto es un poco engañoso en su forma actual: el marco JDBC mismo está presente en Android y se puede usar (simplemente conectado a HSQLDB de esa manera). Un controlador Java JDBC puro (como es el caso de HSQLDB) funcionaría con Android al igual que cualquier otro JAR (excepto para el uso de API no compatibles con Android, que no es específicamente un problema de JDBC). El problema es que la mayoría de los controladores JDBC, incluido SQLite, se basan en un núcleo de código nativo, que tendría que ser portado. – user149408

11

Hay un controlador (no documentado) JDBC para la base de datos SQLite de Android. Prueba esto: (de 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); 
    } 
+0

http://code.google.com/p/sqldroid/ – slf

5

el controlador JDBC es indocumentado y sin apoyo. por favor no use este código

evite java.sql y use android.database.sqlite en su lugar.

2

Existe un controlador de este tipo ahora: SQLDroid.

+3

Desafortunadamente no se ha mantenido y carece de muchas funciones, como obtener claves generadas después de la inserción :( – Flawyte

Cuestiones relacionadas