編輯:關於android開發
老師筆記
# 3 Android下另外一種增刪改查方式
1.創建一個幫助類的對象,調用getReadableDatabase方法,返回一個SqliteDatebase對象
2.使用SqliteDatebase對象調用insert,update,delete ,query方法做增刪改查。
******特點:增刪改有了返回值,可以判斷sql語句是否執行成功,但是查詢不夠靈活,不能做多表查詢。所以在公司一般人增刪改喜歡用第二種方式,查詢用第一種方式。
private MySqliteOpenHelper mySqliteOpenHelper;
public InfoDao(Context context){
//創建一個幫助類對象
mySqliteOpenHelper = new MySqliteOpenHelper(context);
}
public boolean add(InfoBean bean){
//執行sql語句需要sqliteDatabase對象
//調用getReadableDatabase方法,來初始化數據庫的創建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
ContentValues values = new ContentValues();//是用map封裝的對象,用來存放值
values.put("name", bean.name);
values.put("phone", bean.phone);
//table: 表名 , nullColumnHack:可以為空,標示添加一個空行, values:數據一行的值 , 返回值:代表添加這個新行的Id ,-1代表添加失敗
long result = db.insert("info", null, values);//底層是在拼裝sql語句
//關閉數據庫對象
db.close();
if(result != -1){//-1代表添加失敗
return true;
}else{
return false;
}
}
public int del(String name){
//執行sql語句需要sqliteDatabase對象
//調用getReadableDatabase方法,來初始化數據庫的創建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//table :表名, whereClause: 刪除條件, whereArgs:條件的占位符的參數 ; 返回值:成功刪除多少行
int result = db.delete("info", "name = ?", new String[]{name});
//關閉數據庫對象
db.close();
return result;
}
public int update(InfoBean bean){
//執行sql語句需要sqliteDatabase對象
//調用getReadableDatabase方法,來初始化數據庫的創建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
ContentValues values = new ContentValues();//是用map封裝的對象,用來存放值
values.put("phone", bean.phone);
//table:表名, values:更新的值, whereClause:更新的條件, whereArgs:更新條件的占位符的值,返回值:成功修改多少行
int result = db.update("info", values, "name = ?", new String[]{bean.name});
//關閉數據庫對象
db.close();
return result;
}
public void query(String name){
//執行sql語句需要sqliteDatabase對象
//調用getReadableDatabase方法,來初始化數據庫的創建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//table:表名, columns:查詢的列名,如果null代表查詢所有列; selection:查詢條件, selectionArgs:條件占位符的參數值,
//groupBy:按什麼字段分組, having:分組的條件, orderBy:按什麼字段排序
Cursor cursor = db.query("info", new String[]{"_id","name","phone"}, "name = ?", new String[]{name}, null, null, "_id desc");
//解析Cursor中的數據
if(cursor != null && cursor.getCount() >0){//判斷cursor中是否存在數據
//循環遍歷結果集,獲取每一行的內容
while(cursor.moveToNext()){//條件,游標能否定位到下一行
//獲取數據
int id = cursor.getInt(0);
String name_str = cursor.getString(1);
String phone = cursor.getString(2);
System.out.println("_id:"+id+";name:"+name_str+";phone:"+phone);
}
cursor.close();//關閉結果集
}
//關閉數據庫對象
db.close();
}
主
package com.itheima.crud; import android.app.Activity; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; import com.itheima.crud2.R; import com.itheima.crud.bean.InfoBean; import com.itheima.crud.dao.InfoDao; public class MainActivity extends Activity implements OnClickListener { private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; //創建一個幫助類對象 MySqliteOpenHelper mySqliteOpenHelper = new MySqliteOpenHelper(mContext); //調用getReadableDatabase方法,來初始化數據庫的創建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //找到相應控件 findViewById(R.id.bt_add).setOnClickListener(this); findViewById(R.id.bt_del).setOnClickListener(this); findViewById(R.id.bt_update).setOnClickListener(this); findViewById(R.id.bt_query).setOnClickListener(this); } @Override public void onClick(View v) { InfoDao infoDao = new InfoDao(mContext);//創建一個dao對象做增刪改查 switch (v.getId()) { case R.id.bt_add: InfoBean bean = new InfoBean(); bean.name = "張三"; bean.phone ="110"; boolean result = infoDao.add(bean); if(result){ Toast.makeText(mContext, "添加成功", 0).show(); }else{ Toast.makeText(mContext, "添加失敗", 0).show(); } break; case R.id.bt_del: int del = infoDao.del("張三"); Toast.makeText(mContext, "成功刪除"+del+"行", 0).show(); break; case R.id.bt_update: InfoBean bean2 = new InfoBean(); bean2.name = "張三"; bean2.phone ="119"; int update = infoDao.update(bean2); Toast.makeText(mContext, "成功修改"+update+"行", 0).show(); break; case R.id.bt_query: infoDao.query("張三"); break; default: break; } } }
同一個包下的class 創建數據庫
package com.itheima.crud; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MySqliteOpenHelper extends SQLiteOpenHelper { public MySqliteOpenHelper(Context context) { //context :上下文 , name:數據庫文件的名稱 factory:用來創建cursor對象,默認為null //version:數據庫的版本號,從1開始,如果發生改變,onUpgrade方法將會調用,4.0之後只能升不能將 super(context, "info.db", null,1); } //oncreate方法是數據庫第一次創建的時候會被調用; 特別適合做表結構的初始化,需要執行sql語句;SQLiteDatabase db可以用來執行sql語句 @Override public void onCreate(SQLiteDatabase db) { //通過SQLiteDatabase執行一個創建表的sql語句 db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(11))"); } //onUpgrade數據庫版本號發生改變時才會執行; 特別適合做表結構的修改 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //添加一個phone字段 // db.execSQL("alter table info add phone varchar(11)"); } }
增刪改查 包名的封裝
package com.itheima.crud.dao; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.itheima.crud.MySqliteOpenHelper; import com.itheima.crud.bean.InfoBean; public class InfoDao { private MySqliteOpenHelper mySqliteOpenHelper; public InfoDao(Context context){ //創建一個幫助類對象 mySqliteOpenHelper = new MySqliteOpenHelper(context); } public boolean add(InfoBean bean){ //執行sql語句需要sqliteDatabase對象 //調用getReadableDatabase方法,來初始化數據庫的創建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); ContentValues values = new ContentValues();//是用map封裝的對象,用來存放值 values.put("name", bean.name); values.put("phone", bean.phone); //table: 表名 , nullColumnHack:可以為空,標示添加一個空行, values:數據一行的值 , 返回值:代表添加這個新行的Id ,-1代表添加失敗 long result = db.insert("info", null, values);//底層是在拼裝sql語句 //關閉數據庫對象 db.close(); if(result != -1){//-1代表添加失敗 return true; }else{ return false; } } public int del(String name){ //執行sql語句需要sqliteDatabase對象 //調用getReadableDatabase方法,來初始化數據庫的創建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //table :表名, whereClause: 刪除條件, whereArgs:條件的占位符的參數 ; 返回值:成功刪除多少行 int result = db.delete("info", "name = ?", new String[]{name}); //關閉數據庫對象 db.close(); return result; } public int update(InfoBean bean){ //執行sql語句需要sqliteDatabase對象 //調用getReadableDatabase方法,來初始化數據庫的創建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); ContentValues values = new ContentValues();//是用map封裝的對象,用來存放值 values.put("phone", bean.phone); //table:表名, values:更新的值, whereClause:更新的條件, whereArgs:更新條件的占位符的值,返回值:成功修改多少行 int result = db.update("info", values, "name = ?", new String[]{bean.name}); //關閉數據庫對象 db.close(); return result; } public void query(String name){ //執行sql語句需要sqliteDatabase對象 //調用getReadableDatabase方法,來初始化數據庫的創建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //table:表名, columns:查詢的列名,如果null代表查詢所有列; selection:查詢條件, selectionArgs:條件占位符的參數值, //groupBy:按什麼字段分組, having:分組的條件, orderBy:按什麼字段排序 Cursor cursor = db.query("info", new String[]{"_id","name","phone"}, "name = ?", new String[]{name}, null, null, "_id desc"); //解析Cursor中的數據 if(cursor != null && cursor.getCount() >0){//判斷cursor中是否存在數據 //循環遍歷結果集,獲取每一行的內容 while(cursor.moveToNext()){//條件,游標能否定位到下一行 //獲取數據 int id = cursor.getInt(0); String name_str = cursor.getString(1); String phone = cursor.getString(2); System.out.println("_id:"+id+";name:"+name_str+";phone:"+phone); } cursor.close();//關閉結果集 } //關閉數據庫對象 db.close(); } }
數據的封裝,也用一個包
package com.itheima.crud.bean; public class InfoBean { public String name; public String phone; }
android源代碼在線搜索 在沒有google的時代,當在開發中遇到問題時,程序員唯一的方式就是去讀源代碼,雖然現在可以通過搜索引擎解決大部分開發問題,但是要想理解其內
14條Android Studio常用的的配置 14條Android Studio常用的的配置 1,修改idea.properties文件 找到\bin\idea.pro
Fragment一般是宿主Activity UI的一部分或一種行為,作為Act
自定義ZXing二維碼掃描界面並解決取景框拉伸等問題,zxing拉伸先看效果 掃描內容是下面這張,二維碼是用zxing庫生成的 由於改了好