編輯:關於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 List getScollDate(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 比較方便,因為大家肯定都是多多少少接觸過數據庫的
Android 網絡學習之使用多線程下載,支持斷點續傳
既然本節是學習如何使用多線程下載,那我們先要明白什麼是多線程下載,在搞明白什麼是多線程下載之前,需要先知道什麼是單線程下載。上圖就是說明了單線程下載的原來,因此單線程下載
Android的多媒體管理庫Glide的基本使用示例
Glide 是一個android平台上的快速和高效的開源的多媒體資源管理庫, 提供 多媒體文件的壓縮,內存和磁盤緩存, 資源池的接口。Glide 支持獲取,解壓展示視頻,
手把手帶你做一個超炫酷loading成功動畫view Android自定義view
寫在前面:本篇可能是手把手自定義view系列最後一篇了,實際上我也是一周前才開始真正接觸自定義view,通過這一周的練習,基本上已經熟練自定義view,能夠應對一般的vi
Android ADB詳細介紹及用法
Android ADB 用法adb 全稱是 Android Debug Bridge, 就是起到調試橋的作用。 用來操作android設備的閱讀目錄 adb