package czd.lib.data; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import czd.lib.application.ApplicationUtil; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; public class SQLiteUtil { public static final String SQLite_MASTER_TABLE = "sqlite_master"; private static SQLiteUtil mInstance = new SQLiteUtil(); /** * */ private SQLiteUtil() { } /** * @return instance of SQLiteUtil */ public static SQLiteUtil getInstance() { return SQLiteUtil.mInstance; } /** * open or create a database with the given dbName: * /data/data/packagename/databases/databasefilename * /sdcard/databasefilename * * @param dbName * * @return SQLiteDatabase */ private SQLiteDatabase openDB(String dbName) { if (!dbName.contains("/")) { dbName = ApplicationUtil.application_context.getDatabasePath(dbName).getAbsolutePath(); } File file = new File(dbName); if (file.exists()) { return SQLiteDatabase.openDatabase(dbName, null, SQLiteDatabase.OPEN_READWRITE); } else { File datafiledir = new File(file.getParent()); if (!datafiledir.exists()) { datafiledir.mkdirs(); } return SQLiteDatabase.openOrCreateDatabase(dbName, null); } } /** * close database * * @param db */ private void closeDB(SQLiteDatabase db) { db.close(); } /** * delete database * * @param dbName * * @return boolean */ public boolean deleteDB(String dbName) { File file = new File(dbName); return !file.exists() || file.delete(); } /** * execute sql command * * @param dbName * @param sql */ public void execQuery(String dbName, String sql) { SQLiteDatabase db = openDB(dbName); db.execSQL(sql); closeDB(db); } /** * execute sql command and return Cursor * * @param dbName * @param tableName * @param condStr * * @return Cursor */ public Cursor openQuery(String dbName, String sql) { SQLiteDatabase db = openDB(dbName); Cursor cursor = db.rawQuery(sql, null); cursor.moveToFirst(); closeDB(db); return cursor; } public Cursor openQuery(String dbName, String tableName, String condStr) { SQLiteDatabase db = openDB(dbName); Cursor cursor = db.query(tableName, null, condStr, null, null, null, null); cursor.moveToFirst(); closeDB(db); return cursor; } public int getRowsCount(Cursor cursor) { return cursor.getCount(); } public int getColumnsCount(Cursor cursor) { return cursor.getColumnCount(); } public String getColumnNameBy(Cursor cursor, int index) { return cursor.getColumnName(index); } public boolean isBOF(Cursor cursor) { return cursor.isBeforeFirst(); } public boolean isEOF(Cursor cursor) { return cursor.isAfterLast(); } public boolean moveNext(Cursor cursor) { return cursor.moveToNext(); } public String getField(Cursor cursor, int index) { return cursor.getString(index); } public void closeQuery(Cursor cursor) { cursor.close(); } public boolean isTableExists(String dbName, String tableName) { Cursor cursor = openQuery(dbName, SQLiteUtil.SQLite_MASTER_TABLE, "(tbl_name='" + tableName + "')"); int recordCount = cursor.getCount(); cursor.close(); return (recordCount > 0); } public boolean isDatabaseExists(String dbName) { return new File(dbName).exists(); } public static void copyDb(Context context, String dbName, int resourceId) { try { String databaseFilename = context.getDatabasePath(dbName).getPath(); if (!(new File(databaseFilename)).exists()) { InputStream is = context.getResources().openRawResource(resourceId); FileOutputStream fos = new FileOutputStream(databaseFilename); byte[] buffer = new byte[8192]; int count = 0; while ((count = is.read(buffer)) > 0) { fos.write(buffer, 0, count); } fos.close(); is.close(); } } catch (Exception e) { e.printStackTrace(); } } }