Android下数据库的增删改查(两种方式)

  • Post author:
  • Post category:其他


第一种方式:(手动写SQL语句方式)

1、创建一个帮助类的对象,调用getReadableDatabase或getWritableDatabase方法,返回一个SqliteDatebase对象

2、使用SqliteDatebase对象调用execSql()做增删改操作,调用rawQuery方法做查询操作。

特点:

增删改没有返回值,不能够判断sql语句是否执行成功。sql语句手动写,容易写错。

public class InfoDao {

MySqliteOpenHelper mySqliteOpenHelper;

public InfoDao(Context context) {

//创建一个帮助类对象

mySqliteOpenHelper = new MySqliteOpenHelper(context);

}

public void add(InfoBean bean){

// 执行sql语句需要SQLiteDatabase对象

//调用getReadableDatabase方法,来初始化数据库的创建

SQLiteDatabase database = mySqliteOpenHelper.getWritableDatabase();

//sql:sql语句 bindArgs:sql语句中占位符的值

database.execSQL(“insert into info(name,phone) values(?,?);”,new Object[]{bean.name,bean.phone});

//关闭数据库对象

database.close();

}

public void del(String name){

// 执行sql语句需要SQLiteDatabase对象

//调用getReadableDatabase方法,来初始化数据库的创建

SQLiteDatabase database = mySqliteOpenHelper.getWritableDatabase();

//sql:sql语句 bindArgs:sql语句中占位符的值

database.execSQL(“delete from info where name=?;”,new Object[]{name});

//关闭数据库对象

database.close();

}

public void update(InfoBean bean){

// 执行sql语句需要SQLiteDatabase对象

//调用getReadableDatabase方法,来初始化数据库的创建

SQLiteDatabase database = mySqliteOpenHelper.getWritableDatabase();

//sql:sql语句 bindArgs:sql语句中占位符的值

database.execSQL(“update info set phone=? where name=?;”,new Object[]{bean.name,bean.phone});

//关闭数据库对象

database.close();

}

public void query(String name){

// 执行sql语句需要SQLiteDatabase对象

//调用getReadableDatabase方法,来初始化数据库的创建

SQLiteDatabase database = mySqliteOpenHelper.getWritableDatabase();

//sql:sql语句 selectionArgs:查询条件占位符的值,返回一个cursor值

Cursor cursor = database.rawQuery(“select _id,name,phone from info where name=?”, new String[]{name});

//解析Cursor中的数据

if (cursor!=null && cursor.getCount()>0){//判断cursor中是否有数据

//循环遍历结果集,获取每一行的内容

while (cursor.moveToNext()){//条件,游标能否定位到下一行

//获取数据

int id = cursor.getInt(cursor.getColumnIndex(“_id”));

String name1 = cursor.getString(cursor.getColumnIndex(“name”));

String phone = cursor.getString(cursor.getColumnIndex(“phone”));

Log.e(“——–”,”_id:”+id+”;name:”+name1+”;phone:”+phone);

}

cursor.close();//关闭结果集

}

//关闭数据库对象

database.close();

}

}

第二种方式:(Android提供的另一种方式)

1、创建一个帮助类,调用 getReadableDatabase方法,返回一个 SqliteDatebase对象;

2、使用 SqliteDatebase对象调用insert,delete,update,query方法做增删改查。

特点:

增删改有了返回值,可以判断sql语句是否执行成功,但是查询不够灵活,不可以做多表查询。所以一般增删改用第二种方式,查询用第一种方式。

public class InfoDao {

MySqliteOpenHelper mySqliteOpenHelper;

public InfoDao(Context context) {

//创建一个帮助类对象

mySqliteOpenHelper = new MySqliteOpenHelper(context);

}

public boolean add(InfoBean bean){

// 执行sql语句需要SQLiteDatabase对象

//调用getReadableDatabase方法,来初始化数据库的创建

SQLiteDatabase database = mySqliteOpenHelper.getWritableDatabase();

ContentValues contentValues = new ContentValues();

contentValues.put(“name”,bean.name);

contentValues.put(“phone”,bean.phone);

//table:表名; nullColumnHack:可以为空,表示添加一个空行; values:存放添加一行数据的值

//返回值代表新添加的这一行的id,-1代表添加失败

long insert = database.insert(“info”, null, contentValues);

//关闭数据库对象

database.close();

if (insert!=-1){

return true;

}else {

return false;

}

}

public int del(String name){

// 执行sql语句需要SQLiteDatabase对象

//调用getReadableDatabase方法,来初始化数据库的创建

SQLiteDatabase database = mySqliteOpenHelper.getWritableDatabase();

//table :表名, whereClause: 删除条件, whereArgs:条件的占位符的参数 ; 返回值:成功删除多少行

int delete = database.delete(“info”, “name=?”, new String[]{name});

//关闭数据库对象

database.close();

return delete;

}

public int update(InfoBean bean){

// 执行sql语句需要SQLiteDatabase对象

//调用getReadableDatabase方法,来初始化数据库的创建

SQLiteDatabase database = mySqliteOpenHelper.getWritableDatabase();

ContentValues contentValues = new ContentValues();

contentValues.put(“phone”,bean.phone);

//table:表名, values:更新的值, whereClause:更新的条件, whereArgs:更新条件的占位符的值,返回值:成功修改多少行

int update = database.update(“info”, contentValues, “name=?”, new String[]{bean.name});

//关闭数据库对象

database.close();

return update;

}

public void query(String name){

// 执行sql语句需要SQLiteDatabase对象

//调用getReadableDatabase方法,来初始化数据库的创建

SQLiteDatabase database = mySqliteOpenHelper.getWritableDatabase();

//table:表名, columns:查询的列名,如果null代表查询所有列; selection:查询条件, selectionArgs:条件占位符的参数值,

//groupBy:按什么字段分组, having:分组的条件, orderBy:按什么字段排序

Cursor cursor = database.query(“info”, null, “name=?”, new String[]{name}, null, null, null);

//解析Cursor中的数据

if (cursor!=null && cursor.getCount()>0){//判断cursor中是否有数据

//循环遍历结果集,获取每一行的内容

while (cursor.moveToNext()){//条件,游标能否定位到下一行

//获取数据

int id = cursor.getInt(cursor.getColumnIndex(“_id”));

String name1 = cursor.getString(cursor.getColumnIndex(“name”));

String phone = cursor.getString(cursor.getColumnIndex(“phone”));

Log.e(“——–”,”_id:”+id+”;name:”+name1+”;phone:”+phone);

}

cursor.close();//关闭结果集

}

//关闭数据库对象

database.close();

}

}

数据库的事务

1、事务:执行多条sql语句,要么同时执行成功,要么同时执行失败,不可以有的成功,有的失败。(银行转账)

//点击按钮执行方法

public void transtation(View view){

//1.创建一个帮助类的对象

BankOpenHelper bankOpenHelper=new BankOpenHelper(mContext);

//2.调用数据库帮助类对象的getReadableDatabase创建数据库,初始化表数据,获取SqliteDatabase对象去做转账(sql语句)

SQLiteDatabase db = bankOpenHelper.getReadableDatabase();

//3.转账,将李四的钱减200,将张三的钱加200

db.beginTransaction();//开启一个数据库事务

try{

db.execSQL(“update info set money= money-200 where name=?”,new String[]{“李四”});

// int i = 100/0;//模拟异常

db.execSQL(“update info set money= money+200 where name=?”,new String[]{“张三”});

db.setTransactionSuccessful();//标记事务中的sql语句全部执行成功

}finally {

db.endTransaction();//判断事务的标记是否成功,如果不成功,回滚错误之前执行的sql语句

}

}



版权声明:本文为HunterArley原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。