編輯:關於Android編程
最近項目又用到了 數據庫的操作,剛好把以前的拿來總結一下,也順便幫助別人能夠快速使用,代碼片段全部都貼出來,
// 第一次使用軟件自動 創建數據庫 繼承工具類 SQLiteOpenHelper // 調用 SQLiteOpenHelper.getwritableDatabase(); 就執行創建方法 public class DBhelper extends SQLiteOpenHelper{ public DBhelper(Context context) { super(context, "lilei", //數據庫的名字 null , //游標 null 為使用系統默認的 游標工廠產出游標對象 1 //數據庫文件版本號 不能為0 。 ); } @Override //數據庫第一次被創建的時候調用 public void onCreate(SQLiteDatabase db) { //SQLiteDatabase封裝了對數據庫所有的操作 db.execSQL("create table if not exists info" + "(id integer primary key autoincrement , name varchar(20))"); //如果要創建多張表就繼續 //db.execSQL("create table info1 (id integer primary key autoincrement, name vachar(50),money int)"); } @Override //當上面的 版本號 變更時 調用這個函數 額外添加 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists info"); //db.execSQL("alter table ll add age varchar(20) null"); } }
然後就是對數據庫操作的類了。
public class SQLHandle { private DBhelper dbh; public SQLHandle(Context c){ this.dbh=new DBhelper(c); } //設置事物 提交 public void shiwu(){ SQLiteDatabase db= dbh.getWritableDatabase(); try{ db.beginTransaction(); ///////////////////////////////// //////////////////////////////// db.setTransactionSuccessful(); }finally{ db.endTransaction(); // 回滾 } } // public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit); // 各個參數的意義說明: // table:表名稱 // columns:列名稱數組 // selection:條件字句,相當於where // selectionArgs:條件字句,參數數組 // groupBy:分組列 // having:分組條件 // orderBy:排序列 // limit:分頁查詢限制 // Cursor:返回值,相當於結果集ResultSet // getCount() 獲得總的數據項數 // isFirst() 判斷是否第一條記錄 // isLast() 判斷是否最後一條記錄 // moveToFirst() 移動到第一條記錄 // moveToLast() 移動到最後一條記錄 // move(int offset) 移動到指定記錄 // moveToNext() 移動到下一條記錄 // moveToPrevious() 移動到上一條記錄 // getColumnIndexOrThrow(String columnName) 根據列名稱獲得列索引 // getInt(int columnIndex) 獲得指定列索引的int類型值 // getString(int columnIndex) 獲得指定列縮影的String類型值 /** 查詢 **/ public void find(String id){ //SQLiteDatabase db= dbh.getReadableDatabase(); // getWritableDatabase() 首先調用 writeable 方法 // 比如存儲空間磁盤滿了 不成功的情況下 只能讀 SQLiteDatabase db= dbh.getWritableDatabase(); //1.返回cursor對象 -----ResultSet Cursor cu=db.rawQuery("select * from where id=?", new String[]{id}); if(cu.moveToFirst()){ cu.getInt(cu.getColumnIndex("id")); cu.getString(cu.getColumnIndex("name")); cu.getString(cu.getColumnIndex("age")); } //2. Cursor cu1=db.query("ll", //表名 new String[]{"id","name","age"}, //要獲取的字段值 null 為查詢所有字段 "id=?", // where new String[]{"1212"}, // where 條件 = null, //groupBy null, //having null); //orderBy if(cu1.moveToFirst()){ cu1.getInt(cu1.getColumnIndex("id")); cu1.getString(cu1.getColumnIndex("name")); cu1.getString(cu1.getColumnIndex("age")); } //用完記得關閉 cu.close(); db.close(); } /*** 插入 ***/ public void insert(String name, String age){ SQLiteDatabase sqld=dbh.getWritableDatabase(); // 緩存特點 sqld1 和 sqld 指向的是同1個實例 //SQLiteDatabase sqld1=dbh.getWritableDatabase(); sqld.execSQL("insert into ll (name,age,sex) values (?,?,?)", new Object[]{name,age}); //2 ContentValues value=new ContentValues(); value.put("id", 10); value.put("name", "455"); value.put("age", 20); sqld.insert("ll", null, value); sqld.insert("ll", "id", null);// 第2參數 空值字段 //有特殊處理 主鍵 null值 自動增長 sqld.close(); } /*** 更新 ***/ public void update(String id,String name,String age){ SQLiteDatabase sqld=dbh.getWritableDatabase(); //1 sqld.execSQL("update ll set name=?,age=? where id=? ", new Object[]{id,name,age}); //2 // 調用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法。 // 參數是表名稱,參數是更行列ContentValues類型的鍵值對(Map),參數是更新條件(where字句),參數是更新條件數組。 ContentValues value=new ContentValues(); value.put("id", 10); value.put("name", "455"); value.put("age", 20); sqld.update("ll", value, "id=?", new String[]{"201"}); //用完記得關閉 sqld.close(); } /** 刪除 **/ public void delete(String id){ SQLiteDatabase sqld=dbh.getWritableDatabase(); //1 sqld.execSQL("delete from ll where id=?", new Object[]{id}); //2. // 調用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法, // 參數一是表名稱,參數二是刪除條件,參數三是刪除條件值數組; sqld.delete("ll", "id=?", new String[]{"dsds"}); //用完記得關閉 sqld.close(); } /** 刪除指定數據庫 **/ private void drop(SQLiteDatabase db){ ///////////////// //////////////// //刪除表的SQL語句 String sql ="DROP TABLE stu_table"; //執行SQL db.execSQL(sql); } //分頁 public ListgetScollDate(int offset,int maxResult){ SQLiteDatabase db= dbh.getWritableDatabase(); //1 Cursor cu=db.rawQuery("select * from ll order by " + "id asc " + "limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); Vector vs=new Vector(); //得到多條結果集 while(cu.moveToNext()){ Vector v=new Vector(); int id=cu.getInt(cu.getColumnIndex("id")); String name=cu.getString(cu.getColumnIndex("name")); String age=cu.getString(cu.getColumnIndex("age")); v.add(id); v.add(name); v.add(age); vs.add(v); //2. db.query("ll", //table null, //colument null, null, null, null, //having "id asc", //orderBy offset+","+maxResult); } //關閉數據庫 cu.close(); db.close(); return vs; } //記錄總數 public long getCount(){ SQLiteDatabase db= dbh.getWritableDatabase(); Cursor cu=db.rawQuery("select count(*) from ll",null); //最後也會有1條數據 寫0 cu.moveToFirst(); long l=cu.getLong(0); // ------------- 2 Cursor c1=db.query("ll", new String[]{"count(*)"}, null, null, null, null, null); ///////////////// return l; } }
當然,個人還是覺得用 sql 比較方便,因為大家肯定都是多多少少接觸過數據庫的
既然本節是學習如何使用多線程下載,那我們先要明白什麼是多線程下載,在搞明白什麼是多線程下載之前,需要先知道什麼是單線程下載。上圖就是說明了單線程下載的原來,因此單線程下載
Glide 是一個android平台上的快速和高效的開源的多媒體資源管理庫, 提供 多媒體文件的壓縮,內存和磁盤緩存, 資源池的接口。Glide 支持獲取,解壓展示視頻,
寫在前面:本篇可能是手把手自定義view系列最後一篇了,實際上我也是一周前才開始真正接觸自定義view,通過這一周的練習,基本上已經熟練自定義view,能夠應對一般的vi
Android ADB 用法adb 全稱是 Android Debug Bridge, 就是起到調試橋的作用。 用來操作android設備的閱讀目錄 adb