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

第一种方式:(手动写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语句
}
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android 中,对数据库进行增删改查可以使用 SQLiteDatabase 这个类中的多个方法。以下是两种常见的方式及其对应的方法: 1. 使用 SQL 语句 可以使用 SQL 语句来进行增删改查操作,具体可以使用 SQLiteDatabase 的 execSQL() 方法。例如: ``` SQLiteDatabase db = dbHelper.getWritableDatabase(); // 插入数据 String sqlInsert = "INSERT INTO user(name, age) VALUES('Tom', 18);"; db.execSQL(sqlInsert); // 删除数据 String sqlDelete = "DELETE FROM user WHERE name='Tom';"; db.execSQL(sqlDelete); // 更新数据 String sqlUpdate = "UPDATE user SET age=20 WHERE name='Tom';"; db.execSQL(sqlUpdate); // 查询数据 String sqlQuery = "SELECT * FROM user WHERE age>=18;"; Cursor cursor = db.rawQuery(sqlQuery, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); // 处理查询结果 } cursor.close(); ``` 在这个示例中,我们首先通过 dbHelper.getWritableDatabase() 方法获取到一个 SQLiteDatabase 对象,然后使用 execSQL() 方法执行 SQL 语句。插入、删除和更新的 SQL 语句可以直接使用 execSQL() 方法执行,查询的 SQL 语句需要使用 rawQuery() 方法执行,并将查询结果存储在 Cursor 中。 2. 使用 ContentValues 除了使用 SQL 语句,还可以使用 ContentValues 来进行增删改查操作。具体可以使用 SQLiteDatabase 的 insert()、delete()、update() 和 query() 方法。例如: ``` SQLiteDatabase db = dbHelper.getWritableDatabase(); // 插入数据 ContentValues values = new ContentValues(); values.put("name", "Tom"); values.put("age", 18); db.insert("user", null, values); // 删除数据 String whereClause = "name=?"; String[] whereArgs = new String[] {"Tom"}; db.delete("user", whereClause, whereArgs); // 更新数据 ContentValues values = new ContentValues(); values.put("age", 20); String whereClause = "name=?"; String[] whereArgs = new String[] {"Tom"}; db.update("user", values, whereClause, whereArgs); // 查询数据 String[] columns = new String[] {"name", "age"}; String selection = "age>=?"; String[] selectionArgs = new String[] {"18"}; Cursor cursor = db.query("user", columns, selection, selectionArgs, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); // 处理查询结果 } cursor.close(); ``` 在这个示例中,我们使用 ContentValues 对象来存储插入、更新的数据,然后使用 insert()、delete() 和 update() 方法执行增删改操作,使用 query() 方法执行查询操作。需要注意的是,插入数据时需要将 ContentValues 对象作为第三个参数传递给 insert() 方法;更新数据时需要使用 whereClause 和 whereArgs 参数来指定更新条件;查询数据时需要使用 columns、selection 和 selectionArgs 参数来指定查询的列、查询条件和查询条件的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员丶星霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值