編輯:關於Android編程
數據庫工具類,優雅的管理android中的sqlite
package csdn.shimiso.eim.db; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * SQLite數據庫模板工具類 * * 該類提供了數據庫操作常用的增刪改查,以及各種復雜條件匹配,分頁,排序等操作 * * @see SQLiteDatabase */ public class SQLiteTemplate { /** * Default Primary key */ protected String mPrimaryKey = "_id"; /** * DBManager */ private DBManager dBManager; /** * 是否為一個事務 */ private boolean isTransaction = false; /** * 數據庫連接 */ private SQLiteDatabase dataBase = null; private SQLiteTemplate() { } private SQLiteTemplate(DBManager dBManager, boolean isTransaction) { this.dBManager = dBManager; this.isTransaction = isTransaction; } /** * isTransaction 是否屬於一個事務 注:一旦isTransaction設為true * 所有的SQLiteTemplate方法都不會自動關閉資源,需在事務成功後手動關閉 * * @return */ public static SQLiteTemplate getInstance(DBManager dBManager, boolean isTransaction) { return new SQLiteTemplate(dBManager, isTransaction); } /** * 執行一條sql語句 * * @param name * @param tel */ public void execSQL(String sql) { try { dataBase = dBManager.openDatabase(); dataBase.execSQL(sql); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } } /** * 執行一條sql語句 * * @param name * @param tel */ public void execSQL(String sql, Object[] bindArgs) { try { dataBase = dBManager.openDatabase(); dataBase.execSQL(sql, bindArgs); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } } /** * 向數據庫表中插入一條數據 * * @param table * 表名 * @param content * 字段值 */ public long insert(String table, ContentValues content) { try { dataBase = dBManager.openDatabase(); // insert方法第一參數:數據庫表名,第二個參數如果CONTENT為空時則向表中插入一個NULL,第三個參數為插入的內容 return dataBase.insert(table, null, content); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } return 0; } /** * 批量刪除指定主鍵數據 * * @param ids */ public void deleteByIds(String table, Object... primaryKeys) { try { if (primaryKeys.length > 0) { StringBuilder sb = new StringBuilder(); for (@SuppressWarnings("unused") Object id : primaryKeys) { sb.append("?").append(","); } sb.deleteCharAt(sb.length() - 1); dataBase = dBManager.openDatabase(); dataBase.execSQL("delete from " + table + " where " + mPrimaryKey + " in(" + sb + ")", (Object[]) primaryKeys); } } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } } /** * 根據某一個字段和值刪除一行數據, 如 name="jack" * * @param table * @param field * @param value * @return 返回值大於0表示刪除成功 */ public int deleteByField(String table, String field, String value) { try { dataBase = dBManager.openDatabase(); return dataBase.delete(table, field + "=?", new String[] { value }); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } return 0; } /** * 根據條件刪除數據 * * @param table * 表名 * @param whereClause * 查詢語句 參數采用? * @param whereArgs * 參數值 * @return 返回值大於0表示刪除成功 */ public int deleteByCondition(String table, String whereClause, String[] whereArgs) { try { dataBase = dBManager.openDatabase(); return dataBase.delete(table, whereClause, whereArgs); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } return 0; } /** * 根據主鍵刪除一行數據 * * @param table * @param id * @return 返回值大於0表示刪除成功 */ public int deleteById(String table, String id) { try { dataBase = dBManager.openDatabase(); return deleteByField(table, mPrimaryKey, id); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } return 0; } /** * 根據主鍵更新一行數據 * * @param table * @param id * @param values * @return 返回值大於0表示更新成功 */ public int updateById(String table, String id, ContentValues values) { try { dataBase = dBManager.openDatabase(); return dataBase.update(table, values, mPrimaryKey + "=?", new String[] { id }); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } return 0; } /** * 更新數據 * * @param table * @param values * @param whereClause * @param whereArgs * @return 返回值大於0表示更新成功 */ public int update(String table, ContentValues values, String whereClause, String[] whereArgs) { try { dataBase = dBManager.openDatabase(); return dataBase.update(table, values, whereClause, whereArgs); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } return 0; } /** * 根據主鍵查看某條數據是否存在 * * @param table * @param id * @return */ public Boolean isExistsById(String table, String id) { try { dataBase = dBManager.openDatabase(); return isExistsByField(table, mPrimaryKey, id); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } return null; } /** * 根據某字段/值查看某條數據是否存在 * * @param status * @return */ public Boolean isExistsByField(String table, String field, String value) { StringBuilder sql = new StringBuilder(); sql.append("SELECT COUNT(*) FROM ").append(table).append(" WHERE ") .append(field).append(" =?"); try { dataBase = dBManager.openDatabase(); return isExistsBySQL(sql.toString(), new String[] { value }); } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(null); } } return null; } /** * 使用SQL語句查看某條數據是否存在 * * @param sql * @param selectionArgs * @return */ public Boolean isExistsBySQL(String sql, String[] selectionArgs) { Cursor cursor = null; try { dataBase = dBManager.openDatabase(); cursor = dataBase.rawQuery(sql, selectionArgs); if (cursor.moveToFirst()) { return (cursor.getInt(0) > 0); } else { return false; } } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(cursor); } } return null; } /** * 查詢一條數據 * * @param rowMapper * @param sql * @param args * @return */ publicT queryForObject(RowMapper rowMapper, String sql, String[] args) { Cursor cursor = null; T object = null; try { dataBase = dBManager.openDatabase(); cursor = dataBase.rawQuery(sql, args); if (cursor.moveToFirst()) { object = rowMapper.mapRow(cursor, cursor.getCount()); } } finally { if (!isTransaction) { closeDatabase(cursor); } } return object; } /** * 查詢 * * @param rowMapper * @param sql * @param startResult * 開始索引 注:第一條記錄索引為0 * @param maxResult * 步長 * @return */ public List queryForList(RowMapper rowMapper, String sql, String[] selectionArgs) { Cursor cursor = null; List list = null; try { dataBase = dBManager.openDatabase(); cursor = dataBase.rawQuery(sql, selectionArgs); list = new ArrayList (); while (cursor.moveToNext()) { list.add(rowMapper.mapRow(cursor, cursor.getPosition())); } } finally { if (!isTransaction) { closeDatabase(cursor); } } return list; } /** * 分頁查詢 * * @param rowMapper * @param sql * @param startResult * 開始索引 注:第一條記錄索引為0 * @param maxResult * 步長 * @return */ public List queryForList(RowMapper rowMapper, String sql, int startResult, int maxResult) { Cursor cursor = null; List list = null; try { dataBase = dBManager.openDatabase(); cursor = dataBase.rawQuery(sql + " limit ?,?", new String[] { String.valueOf(startResult), String.valueOf(maxResult) }); list = new ArrayList (); while (cursor.moveToNext()) { list.add(rowMapper.mapRow(cursor, cursor.getPosition())); } } finally { if (!isTransaction) { closeDatabase(cursor); } } return list; } /** * 獲取記錄數 * * @return */ public Integer getCount(String sql, String[] args) { Cursor cursor = null; try { dataBase = dBManager.openDatabase(); cursor = dataBase.rawQuery("select count(*) from (" + sql + ")", args); if (cursor.moveToNext()) { return cursor.getInt(0); } } catch (Exception e) { e.printStackTrace(); } finally { if (!isTransaction) { closeDatabase(cursor); } } return 0; } /** * 分頁查詢 * * @param rowMapper * @param table * 檢索的表 * @param columns * 由需要返回列的列名所組成的字符串數組,傳入null會返回所有的列。 * @param selection * 查詢條件子句,相當於select語句where關鍵字後面的部分,在條件子句允許使用占位符"?" * @param selectionArgs * 對應於selection語句中占位符的值,值在數組中的位置與占位符在語句中的位置必須一致,否則就會有異常 * @param groupBy * 對結果集進行分組的group by語句(不包括GROUP BY關鍵字)。傳入null將不對結果集進行分組 * @param having * 對查詢後的結果集進行過濾,傳入null則不過濾 * @param orderBy * 對結果集進行排序的order by語句(不包括ORDER BY關鍵字)。傳入null將對結果集使用默認的排序 * @param limit * 指定偏移量和獲取的記錄數,相當於select語句limit關鍵字後面的部分,如果為null則返回所有行 * @return */ public List queryForList(RowMapper rowMapper, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { List list = null; Cursor cursor = null; try { dataBase = dBManager.openDatabase(); cursor = dataBase.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit); list = new ArrayList (); while (cursor.moveToNext()) { list.add(rowMapper.mapRow(cursor, cursor.getPosition())); } } finally { if (!isTransaction) { closeDatabase(cursor); } } return list; } /** * Get Primary Key * * @return */ public String getPrimaryKey() { return mPrimaryKey; } /** * Set Primary Key * * @param primaryKey */ public void setPrimaryKey(String primaryKey) { this.mPrimaryKey = primaryKey; } /** * * @author shimiso * * @param */ public interface RowMapper { /** * * @param cursor * 游標 * @param index * 下標索引 * @return */ public T mapRow(Cursor cursor, int index); } /** * 關閉數據庫 */ public void closeDatabase(Cursor cursor) { if (null != dataBase) { dataBase.close(); } if (null != cursor) { cursor.close(); } } }
本文為大家分享了Android bitmap使用細節,供大家參考,具體內容如下1、計算機表示圖形的幾種方式1)BMP :幾乎不進行壓縮 占用空間比較大 2)JPG : 在
需要了解的先來張圖說明一下它們的關系你還要知道ViewGroup之間是可以嵌套的.View的繪制流程不知道大家有沒有這種疑惑, 為什麼我們在寫布局文件的時候, 一定要寫l
簡介: 一般我們在自定義ViewGroup 的時候會通常都會用到onInterceptTouchEvent ,onTouchEvent 這些方法去進行距離的判斷然後利用s
先來一張效果圖 一.ActionBar的設計首先是main.xml,先定義這些菜單,界面稍後在調整<menu xmlns:android=http://schema