package com.tannm.doan.taskmanager.database; import android.database.Cursor; public class DataTable { // fields private DataRow dataRow = null; // methods public DataTable(DataRow dataRow) { this.dataRow = dataRow; } public Database getUserDb() { return dataRow.getUserDb(); } public String getTableName() { return dataRow.getTableName(); } public DataRow getDataRow() { return dataRow; } public boolean createTable() { if (getUserDb().tableExists(getTableName())) { return true; } else { return getUserDb() .execSQL( getSqlTableDefinition(getTableName(), dataRow .getTableDef())); } } public String getSqlTableDefinition(String sTableName, DataField[] vecTableDef) { String def = "CREATE TABLE " + sTableName + " ("; for (int i = 0; i < vecTableDef.length; i++) { def += vecTableDef[i].getColumnDefinition(); if (i < (vecTableDef.length - 1)) def += ", "; } def += ")"; return def; } public long insertValues() { long lRowId = getUserDb().getSQLiteDb().insert(getTableName(), null, dataRow.getContentValues()); return lRowId; } public long updateValues(long lRowId) { String sWhere = String.format("_ID = %d", lRowId); long lRowsUpdated = getUserDb().getSQLiteDb().update(getTableName(), dataRow.getContentValues(), sWhere, null); return lRowsUpdated; } public long deleteDataRow(long lRowId) { String sWhere = String.format("_ID = %d", lRowId); long lRowsUpdated = getUserDb().getSQLiteDb().delete(getTableName(), sWhere, null); return lRowsUpdated; } public Cursor locateDataRow(long lRowId) { final String s = "select * from %s where _ID = %d"; String sql = String.format(s, getTableName(), lRowId); Cursor cr = getUserDb().getSQLiteDb().rawQuery(sql, null); // if cursor valid, set first data row as current if ((cr != null) && (cr.getCount() > 0)) cr.moveToFirst(); return cr; } public Cursor locateAlarmDataRow(int iType, long lRefID) { final String s = "select * from %s where Type = %d and RefID = %d"; String sql = String.format(s, getTableName(), iType, lRefID); Cursor cr = getUserDb().getSQLiteDb().rawQuery(sql, null); // if cursor valid, set first data row as current if ((cr != null) && (cr.getCount() > 0)) cr.moveToFirst(); return cr; } public Database.Result updateData(boolean bInsertMode, long lEditRowId) { Database.Result result = Database.Result.errUnknown; if (getUserDb().isOpened()) { try { dataRow.setValuesForDataRow(); } catch (Exception e) { return Database.Result.errCantSetValuesForDataRow; } // select update mode if (bInsertMode) { // insert new data row long lRowId = insertValues(); if (lRowId > 0) { result = Database.Result.Success; } else { result = Database.Result.errCantInsertNewData; } } else { // update existing data row long lRowsUpdated = updateValues(lEditRowId); if (lRowsUpdated == 1) { result = Database.Result.Success; } else { result = Database.Result.errCantUpdateData; } } } else { result = Database.Result.errNoDbAccess; } return result; } public Database.Result deleteData(long iRowId) { Database.Result result = Database.Result.errUnknown; if (getUserDb().isOpened()) { if (getUserDb().tableExists(getTableName())) { long lRowsDeleted = deleteDataRow(iRowId); if (lRowsDeleted == 1) { result = Database.Result.Success; } else { result = Database.Result.errCantDeleteData; } } else { result = Database.Result.errTableNotExists; } } else { result = Database.Result.errNoDbAccess; } return result; } public Database.Result getRowDataForEdit(long lRowId) { Database.Result result = Database.Result.errUnknown; // get requested data row Cursor cr = locateDataRow(lRowId); if (cr == null) { result = Database.Result.errCantGetData; } else { if (cr.getCount() > 0) { if (dataRow.getValuesFromCursor(cr)) { try { dataRow.getValuesFromDataRow(); } catch (Exception e) { return Database.Result.errCantGetValuesFromDataRow; } result = Database.Result.Success; } else { result = Database.Result.errCantGetDataFromTable; } cr.close(); } else { result = Database.Result.errCantFindData; } } return result; } }
Trên đây là toàn bộ kinh nghiệm làm việc với Database mà tôi học được trong quá trình làm việc thực tế. Mong giúp đỡ những người mới làm việc với SQLite trên Android. Chúc các bạn thành công
No comments:
Post a Comment