使い方
インスタンス生成
open
sql
close
instance
SqlDbConnection conn = new SqlDbConnection(context);
open
conn.openReadOnly();
conn.openWritable();
conn.execSQL(sql);
Cursor c = conn.selectSQL(sql);
SqlDbConnection.java
package com.efolab._lib;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
@since 2012/12/7
@version
@author
public class SqlDbConnction {
private SQLiteDatabase db;
private static final int DEFAULT_VERSION = 0;
@SuppressWarnings("unused")
private static final int NEW_VERSION = 1;
private static int newVersion = DEFAULT_VERSION;
private static final int DB_MODE_PRIVATE = Context.MODE_PRIVATE;
private static final String DBNAME = "testdb";
public static final String TABLENAME = "T_test";
private static Cursor cursor = null;
private static String PATH;
public SqlDbConnction(Context context) {
String path1 = "/data/data/", path2 = "/databases/";
String packageName = context.getPackageName();
PATH = path1 + packageName + path2;
db = context.openOrCreateDatabase(DBNAME, DB_MODE_PRIVATE, null);
Log.v("DB","バージョン確認:getVersion()="+db.getVersion());
if (db.needUpgrade(newVersion)) {
Log.v("DB", "テーブル定義の更新必要");
createUpdateTable();
db.setVersion(newVersion);
} else {
Log.v("DB", "テーブル更新不要");
if (isTableExists(TABLENAME) == false) {
Log.v("DB", TABLENAME + "のテーブルがない");
createDefaultTable();
} else {
Log.v("DB", TABLENAME + "のテーブルはある");
}
}
Log.v("DB", "oldVersion=" + db.getVersion());
db.close();
}
public boolean openReadOnly() {
try {
XXX
db = SQLiteDatabase.openDatabase(PATH + DBNAME, null,
SQLiteDatabase.OPEN_READONLY);
} catch (Exception e) {
Log.e("open error", "" + e);
}
return true;
}
public boolean openWritable() {
try {
db = SQLiteDatabase.openDatabase(PATH + DBNAME, null,
SQLiteDatabase.OPEN_READWRITE);
} catch (Exception e) {
Log.e("open error", "" + e);
}
return true;
}
public Cursor selectSQL(String sql) {
if (db.isOpen() && sql != null) {
cursor = db.rawQuery(sql, null);
} else {
Log.e("SQLconnection", "select : dbがopenでない");
cursor = null;
}
return cursor;
}
public boolean execSQL(String sql) {
boolean ret = false;
try {
if (db.isOpen() && sql != null) {
db.execSQL(sql);
ret = true;
} else {
Log.e("SQLconnection", "select : dbがopenでない");
}
} catch (Exception e) {
Log.e("SQLconnection", "execSQL:" + e);
}
return ret;
}
public void close() {
if (cursor != null && cursor.isClosed() == false) {
cursor.close();
}
if (db.isOpen() == true) {
db.close();
}
}
private void createDefaultTable() {
String sql;
sql = "create table ";
sql += TABLENAME;
sql += " (";
sql += "id INTEGER primary key autoincrement";
sql += ", data INTEGER";
sql += ", update_date TIMESTAMP DEFAULT (DATETIME('now','localtime'))";
sql += ");";
db.execSQL(sql);
}
private void createUpdateTable() {
String dropSql;
dropSql = "drop table " + TABLENAME;
db.execSQL(dropSql);
createDefaultTable();
}
テーブルの存在確認
private boolean isTableExists(String name) {
boolean ret = false;
String kakunin_sql = "select count(*) from sqlite_master where type='table' and name= '"
+ name + "';";
Log.v("DbConnection", "kakunin_sql=" + kakunin_sql);
Cursor c = db.rawQuery(kakunin_sql, null);
c.moveToFirst();
Log.v("DbConnection", "テーブル存在確認結果:" + c.getInt(0));
if (c.getInt(0) == 1) {
ret = true;
}
c.close();
return ret;
}
}