package kr.kdev.dg1s.biowiki.util; import android.database.Cursor; import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDoneException; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteStatement; import java.util.ArrayList; import java.util.List; /** * Created by nbradbury on 6/22/13. */ public class SqlUtils { private SqlUtils() { throw new AssertionError(); } /* * SQlite doesn't have a boolean datatype, so booleans are stored as 0=false, 1=true */ public static long boolToSql(boolean value) { return (value ? 1 : 0); } public static boolean sqlToBool(int value) { return (value != 0); } public static void closeStatement(SQLiteStatement stmt) { if (stmt != null) stmt.close(); } public static void closeCursor(Cursor c) { if (c != null && !c.isClosed()) c.close(); } /* * wrapper for DatabaseUtils.longForQuery() which returns 0 if query returns no rows */ public static long longForQuery(SQLiteDatabase db, String query, String[] selectionArgs) { try { return DatabaseUtils.longForQuery(db, query, selectionArgs); } catch (SQLiteDoneException e) { return 0; } } public static int intForQuery(SQLiteDatabase db, String query, String[] selectionArgs) { long value = longForQuery(db, query, selectionArgs); return (int) value; } public static boolean boolForQuery(SQLiteDatabase db, String query, String[] selectionArgs) { long value = longForQuery(db, query, selectionArgs); return sqlToBool((int) value); } /* * wrapper for DatabaseUtils.stringForQuery(), returns "" if query returns no rows */ public static String stringForQuery(SQLiteDatabase db, String query, String[] selectionArgs) { try { return DatabaseUtils.stringForQuery(db, query, selectionArgs); } catch (SQLiteDoneException e) { return ""; } } /* * returns the number of rows in the passed table */ public static long getRowCount(SQLiteDatabase db, String tableName) { return DatabaseUtils.queryNumEntries(db, tableName); } /* * drop all tables from the passed SQLiteDatabase */ public static boolean dropAllTables(SQLiteDatabase db) throws SQLiteException { if (db == null) return false; if (db.isReadOnly()) { throw new SQLiteException("can't drop tables from a read-only database"); } List<String> tableNames = new ArrayList<String>(); Cursor cursor = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); if (cursor.moveToFirst()) { do { String tableName = cursor.getString(0); if (!tableName.equals("android_metadata") && !tableName.equals("sqlite_sequence")) tableNames.add(tableName); } while (cursor.moveToNext()); } db.beginTransaction(); try { for (String tableName : tableNames) { db.execSQL("DROP TABLE IF EXISTS " + tableName); } db.setTransactionSuccessful(); return true; } finally { db.endTransaction(); } } }