android sqlite 操作資料庫
阿新 • • 發佈:2019-01-10
做了好幾次資料庫 , 總算自己摸索出來了一些經驗,所以寫了這篇文章。
這是我自己寫的,寫的不是很好,還望大牛指點一二。
本文主要為封裝好的資料庫常用增刪改查幾種常用資料庫資料操作方法,這是我的專案的原始碼,我也不想改了。應該都可以看懂,自己改一下吧。
1、DatabaseHelper.java 資料庫幫助類
/** * 資料庫幫助類 * Created by 廣靚 on 2017/2/5. */ public class DatabaseHelper extends SQLiteOpenHelper { private static String DATABASE_NAME="MyDatabase"; public static String TABLE_ip="Table_SeeClass"; public static String TABLE_late="Table_SeeLate"; private static int TABLE_VERSION=1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, TABLE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE "+TABLE_ip+" (ip text unsigned primary key, name text , class text, number text)"); db.execSQL("CREATE TABLE "+TABLE_late+" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ," + " name text , class text, time_year_day text,time_time text)"); System.out.println("資料庫建立成功"); } @Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
2、DatabaseManager.java 資料庫執行者
/** * Created by 廣靚 on 2017/2/5. */ public class DatabaseManager { //資料庫選擇的一些條件,便於使用 public static String[] TABLE_QUERY_COLUMNS_IP=new String[]{"ip","name","class","number"}; public static String[] TABLE_QUERY_COLUMNS_LATE=new String[]{"name","class","time_year_day","time_time"}; public static String TABLE_IP=DatabaseHelper.TABLE_ip; public static String TABLE_LATE=DatabaseHelper.TABLE_late; public static String WHERE_IP="ip=?"; public static String WHERE_NAME="name=?"; public static String WHERE_CLASS="class=?"; public static String WHERE_NUMBER="number=?"; public static String WHERE_TIME_DAY="time_year_day=?"; public static String WHERE_TIME_TIME="time_time=?"; public static String WHERE_TIMEDAY_NAME="time_year_day=? and name=?"; public static String WHERE_IP_CLASS="ip=? and class=?"; public static String ORDER_BY_TIME_DAY_ASC="time_year_day asc"; public static String ORDER_BY_TIME_DAY_DESC="time_year_day desc"; public static String ORDER_BY_TIME_DAY_TIME_ASC="time_time asc"; public static String ORDER_BY_TIME_DAY_TIME_DESC="time_time desc"; public static String ORDER_BY_TIME_ID_DESC="id desc"; public static String ORDER_BY_TIME_ID_ASC="id asc"; public static String ORDER_BY_CLASS_ASC="class asc"; private Context mContext; private DatabaseHelper databaseHelper; private SQLiteDatabase database; public DatabaseManager(Context context){ this.mContext=context; databaseHelper=new DatabaseHelper(context); database=databaseHelper.getWritableDatabase(); } /** * 去除map中的雜質資料,防止應用時出錯 * @param map 未處理的資料 * @return 去除後的資料 */ public ContentValues getContentValues(HashMap<String,Object> map){ ContentValues values=new ContentValues(); if (map.containsKey("ip")) if (!(map.get("ip").toString()).equals("")) values.put("ip",map.get("ip").toString()); if (map.containsKey("name")) if (!(map.get("name").toString()).equals("")) values.put("name",map.get("name").toString()); if (map.containsKey("class")) if (!(map.get("class").toString()).equals("")) values.put("class",map.get("class").toString()); if (map.containsKey("number")) if (!(map.get("number").toString()).equals("")) values.put("number",map.get("number").toString()); if (map.containsKey("id")) if (!(map.get("id").toString()).equals("")) values.put("id",map.get("id").toString()); if (map.containsKey("time_year_day")) if (!(map.get("time_year_day").toString()).equals("")) values.put("time_year_day",map.get("time_year_day").toString()); if (map.containsKey("time_time")) if (!(map.get("time_time").toString()).equals("")) values.put("time_time",map.get("time_time").toString()); return values; } /** * 插入資料 * @param map 資料資訊 * @return 失敗返回-1 */ public long insert(String table,HashMap<String,Object> map){ return database.insert(table,null,getContentValues(map)); } /** * 更新資料 * @param map 要更新的資料 * @param where_ip 查詢條件 * @return 更新資料的行數 */ public int updata(String table,HashMap<String,Object> map, String where_ip){ return database.update(table,getContentValues(map),"ip=?", new String[]{where_ip}); } /** * 根 根據條件查詢 * @param table 資料庫表名 * @param columns 要查詢的列名 (靜態變數) * @param where_what 選擇條件 (靜態變數) * @param where_args_what 選擇條件實參 * @param orderBy 排序字串 * @return 以傳入表名為鍵的 ArrayList<HashMap<String,Object>> */ public ArrayList<HashMap<String,Object>> query(String table,String[] columns,String where_what,String[] where_args_what,String orderBy){ Cursor cursor; cursor= database.query(table,columns,where_what,where_args_what,null,null,orderBy); return cursorToArrList(cursor); } /** * 根 根據條件查詢 * @param table 資料庫表名 * @param columns 要查詢的列名 (靜態變數) * @param where_what 選擇條件 (靜態變數) * @param where_args_what 選擇條件實參 * @return 以傳入表名為鍵的 ArrayList<HashMap<String,Object>> */ public ArrayList<HashMap<String,Object>> query(String table,String[] columns,String where_what,String[] where_args_what){ Cursor cursor; cursor= database.query(table,columns,where_what,where_args_what,null,null,null); return cursorToArrList(cursor); } /** * 根據條件進行查詢,並自動選擇預設主方法的columns * @param table 資料庫表名 * @param where_what 選擇條件 (靜態變數) * @param where_args_what 選擇條件實參 */ public ArrayList<HashMap<String,Object>> query(String table,String where_what,String[] where_args_what){ if (table.equals(TABLE_IP)) return query(TABLE_IP,TABLE_QUERY_COLUMNS_IP,where_what,where_args_what); else return query(TABLE_LATE,TABLE_QUERY_COLUMNS_LATE,where_what,where_args_what); } /** * 判斷是否存在給定資訊 * @param table 表名 * @param where_what 選擇條件 * @param where_args_what 選擇實參 * @return 有,返回true */ public boolean query_isHave(String table,String where_what,String where_args_what){ return query(table,where_what, new String[]{where_args_what}).size() > 0; } /** * 查詢全部資料 */ public ArrayList<HashMap<String,Object>> queryAll(String table){ return query(table,null,null,null); } /** * 將指標型別資料轉換為ArrayList型別 * @param cursor * @return */ public ArrayList<HashMap<String,Object>> cursorToArrList(Cursor cursor){ ArrayList<HashMap<String,Object>> list=new ArrayList<>(); HashMap<String,Object> map; while (cursor.moveToNext()){ map=new HashMap<>(); for (int i=0;i<cursor.getColumnCount();i++) { map.put(cursor.getColumnName(i),cursor.getString(cursor.getColumnIndexOrThrow(cursor.getColumnName(i)))); } list.add(map); } return list; } /** * 刪除資料 * @param where_what 根據所給條件刪除所在行 * @param where_args_what 條件實參 * @return 受影響的行 */ public int delete(String table,String where_what,String where_args_what){ return database.delete(table,where_what, new String[]{where_args_what}); } //以下為資料庫常用資料操作方法 /** * 篩選出 (多的arrlist - 少的arrlist) 後的資料 * * @param big_list 多的arrlist * @param small_list 少的arrlist * @return (多的arrlist - 少的arrlist) 後的資料 */ public ArrayList<HashMap<String, Object>> getRestArrListData( ArrayList<HashMap<String, Object>> big_list, ArrayList<HashMap<String, Object>> small_list) { ArrayList<HashMap<String, Object>> list = new ArrayList<>(); if (big_list.size() > small_list.size()) { boolean isHaveTheIP; for (int i = 0; i < big_list.size(); i++) { isHaveTheIP = false; for (int k = 0; k < small_list.size(); k++) { if (big_list.get(i).get("ip").equals(small_list.get(k).get("ip"))) { isHaveTheIP = true; //如果大資料中含有小資料則記錄true } } if (!isHaveTheIP) { list.add(big_list.get(i)); } } } return list; } /** * 將傳入資料進行去重 * 不改變傳入資料順序 * @param list 傳入資料 * @param RepeatingDataString 要去重複的HashMap的Key * @return 字串陣列清單 */ public ArrayList<String> getRepeatingData(ArrayList<HashMap<String,Object>> list, String RepeatingDataString){ ArrayList<String> getList=new ArrayList<>(); if (list.size()>1) { String temp = null; for (int i = 0; i < list.size() - 1; i++) { temp = list.get(i).get(RepeatingDataString).toString(); if (i == 0) getList.add(temp); if (!list.get(i + 1).get(RepeatingDataString).equals(temp)) { getList.add(list.get(i + 1).get(RepeatingDataString).toString()); } } }else if (list.size()==1){ getList.add(list.get(0).get(RepeatingDataString).toString()); } return getList; } }