Using jdbc to access sqlite in Android

来源:互联网 发布:天猫双十一数据直播 编辑:程序博客网 时间:2024/06/04 19:44

Why

Android已经提供了SQLiteOpenHelper实现sqlite数据库CRUD等基本操作,但是在某些情况下,可能通过jdbc让java直接访问sqlite数据库更合理。例如:1、复杂逻辑存在的情况下,我们更倾向于自己编写SQL语句并执行;2、希望创建内存数据库并允许频繁、并发访问的情况……
Android自有SQLite内存数据库操作局限性有哪些?TODO

通过jdbc连接sqlite

不同环境下的用法对比

在Windows/Linux环境中,使用Java编程时,可通过sqlite-jdbc 访问并使用sqlite;而在Android环境中,则可通过SQLDroid直接访问sqlite数据库。
两者的区别,仅仅在于加载驱动类名和连接字符串的不同。

Comparison sqlite-jdbc SQLDroid Driver Name org.sqlite.JDBC org.sqldroid.SQLDroidDriver JDBC连接字符串 jdbc:sqlite:dbfname jdbc:sqldroid:dbfname 内存数据库连接 jdbc:sqlite::memory: jdbc:sqldroid::memory:

数据库SQL基本操作方式相同。

示例

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Sample{  public static void main(String[] args) throws ClassNotFoundException  {    // load the sqlite-JDBC driver using the current class loader    Class.forName("org.sqlite.JDBC");    Connection conn = null;    Statement stmt = null;    ResultSet rs = null;    try {      // create a database connection      conn = DriverManager.getConnection("jdbc:sqlite:sample.db");      stmt = conn.createStatement();      stmt.setQueryTimeout(30);  // set timeout to 30 sec.      stmt.executeUpdate("drop table if exists person");      stmt.executeUpdate("create table person (id integer, name string)");      stmt.executeUpdate("insert into person values(1, 'leo')");      stmt.executeUpdate("insert into person values(2, 'yui')");      rs = stmt.executeQuery("select * from person");      while(rs.next()){        // read the result set        System.out.println("name = " + rs.getString("name"));        System.out.println("id = " + rs.getInt("id"));      }    }    catch(SQLException e){      // if the error message is "out of memory",       // it probably means no database file is found      System.err.println(e.getMessage());    }finally{      // close rs      // close stmt      // close conn    }  }}

哪种方式更快?

对比Android自有SQLite操作类与SQLDroid操作数据库,两种方式在查询上的表现?TODO

reference

SQLDroid Project in github
Xerial sqlite-jdbc

0 0