android sqlite 多个数据库,android SQLite数据库总结

本文详细介绍了Android中SQLite数据库的使用,包括SQLiteOpenHelper的重写方法onCreate和onUpgrade,以及如何通过SQLiteDatabase进行数据的增删改查操作。通过示例展示了如何创建表、添加初始数据、执行SQL语句、事务处理等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQLite

SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用。

sql语法就不介绍了,直接看在android中的使用

SQLiteOpenHelper——封装好的数据库操作辅助类,需重写

重写方法

onCreate:初始化数据库,创建表,添加初始数据

onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等

常用方法

getReadableDatabase()    获取SQLiteDatabase对象,操作数据库

getWritableDatabase()        获取SQLiteDatabase对象,操作数据库

区别:在磁盘空间满或不可写时,1方法将获得只读的数据库对象,而2方法会报错,在正常情况下,获取到的都是可读写的数据库对象。

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {

private static final String name="my";//数据库名

private static final int version=1;//版本号

//重写构造方法的时候选择参数少的一项

public DBHelper(Context context) {

//1:上下文 2:数据库名称 3:游标创建工厂 4:数据库版本 版本只能是整数 1 2 3..

super(context, name, null, version);

}

//数据库的初始化 SQLiteDatabase数据库操作对象

//一般只在第一次运行和版本更新的时候调用

@Override

public void onCreate(SQLiteDatabase db) {

//创建数据库 主键默认自增

db.execSQL("create table student(" +

"_id integer not null primary key autoincrement," +

"name varchar(20)," +

"phone varchar(11)," +

"gender varchar(2))");

//添加一条测试数据

db.execSQL("insert into student values(null,?,?,?)"

,new Object[]{"小黑","12345678901","男"});

}

/**

* 在版本升级的时候调用

* 修改version 为2 表示版本升级 就会调用这个方法

* @param db 数据库操作对象

* @param oldVersion 旧版本号

* @param newVersion 新版本号

*/

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

在android数据库的创建是需要创建对象才能创建的

在activity类中创建出一个数据库类对象

创建好数据对象就可以操作数据了 通过SQLiteDatabase获取   两种获取方法的区别上面已经提到过了

//创建数据

DBHelper helper =new DBHelper(this);

//调用数据操作对象

SQLiteDatabase dbWrite=helper.getWritableDatabase();

SQLiteDatabase dbRead=helper.getReadableDatabase();

SQLiteDatabase给我们提供了很多操作数据的方法

删除:(int) delete(String table,String whereClause,String[] whereArgs)

table: 表名

whereClause:where条件  列名 占位符  id=?

whereArgs:参数值数组

添加:(long) insert(String table,String nullColumnHack,ContentValues values)

nullColumnHack:为空列

ContentValues values:通过键值对存储添加的数据  key为列 value为值

insert方法 底层是通过拼接字符串的方式 如果ContentValues是空的 拼接成的sql语句无法执行会报错 所以给一个可以为空的列当ContentValues为空时也可以执行 有兴趣的可以看一下源码

更新:(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)

参数意思同上

查询:(Cursor) query(boolean distinct,String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

返回值是一个游标   这个query参数较多 简单的查询就还是写一条sql语句简单点

boolean distinct 去重复

String table 表名

String[] columns要查询的列

String selection查询条件

String[] selectionArgs查询参数值

String groupBy分组

String having分组条件

String orderBy排序

String limit分页查询限制

关闭数据库:(void) close()

执行一条sql语句:(void) execSQL(String sql) 增删改查

查询查询sql:(Cursor) rawQuery(String sql, String[] selectionArgs)

事务

try {

db.beginTransaction();//开启事务

// db.update();

// db.insert();

db.setTransactionSuccessful(); //没有设置事物成功 finally就会回滚

} catch (Exception e) {

e.printStackTrace();

}finally {

db.endTransaction();

}

贴代码咯  执行sql语句 和封装好的方法

查询

private void query() {

StringBuffer sb=new StringBuffer("select * from student where 1=1");

//参数集合

List params=new ArrayList<>();

if(!TextUtils.isEmpty(id)){

sb.append(" and _id=?");

params.add(id);

}

if(!TextUtils.isEmpty(phone)){

sb.append(" and phone=?");

params.add(phone);

}

if(!TextUtils.isEmpty(name)){

sb.append(" and name=?");

params.add(name);

}

if(!TextUtils.isEmpty(gender)){

sb.append(" and gender=?");

params.add(gender);

}

SQLiteDatabase db=helper.getReadableDatabase();

String [] projection=new String [params.size()];

params.toArray(projection);

//返回值 游标

Cursor cursor=db.rawQuery(sb.toString(),projection);

//判断游标是否为空,是否有一个值

while(cursor!=null&&cursor.moveToNext()){

// getColumnIndex获取列的下标 cursor.getXXXX()获取指定列的值

String name=cursor.getString(cursor.getColumnIndex("name"));

Integer id=cursor.getInt(cursor.getColumnIndex("_id"));

}

}

用不到的参数就让它为空吧   遍历数据就while循环就好咯

Cursor c = db.query("student",null,null,null,null,null,null);//查询并获得游标

更新

private void update() {

StringBuffer sb=new StringBuffer("update student set ");

List params=new ArrayList();

if(!TextUtils.isEmpty(phone)){

sb.append("phone=?,");

params.add(phone);

}

if(!TextUtils.isEmpty(name)){

sb.append("name=?,");

params.add(name);

}

if(!TextUtils.isEmpty(gender)){

sb.append("gender=?,");

params.add(gender);

}

if (params.size()!=0){

//更新操作拼接字符串末尾有一个","需要去除

//删除最后一位的“,”

sb.setLength(sb.length()-1);

sb.append(" where 1=1");

//通过id指定 更新那行数据

if(!TextUtils.isEmpty(id)){

sb.append(" and _id=?");

params.add(id);

}else{

Toast.makeText(this,"请填写id",Toast.LENGTH_SHORT).show();

return;

}

SQLiteDatabase db=helper.getWritableDatabase();

Object [] o=new Object[params.size()];

params.toArray(o);//将数据存放到指定的数组中

db.execSQL(sb.toString(),o);

}

}

ContentValues cv = new ContentValues();//实例化ContentValues

cv.put("name","123");//添加要更改的字段及内容

String whereClause = "phone=?";//修改条件

String[] whereArgs = {"12312313213"};//修改条件的参数

db.update("student",cv,whereClause,whereArgs);//执行修改

删除

private void delete() {

getAllText();

//拼接sql语句

StringBuffer sb=new StringBuffer("delete from student where 1=1");

//保存参数的list

List params=new ArrayList();

//判断条件 动态拼接

if(!TextUtils.isEmpty(id)){

sb.append(" and _id=?");

params.add(id);

}

if(!TextUtils.isEmpty(phone)){

sb.append(" and phone=?");

params.add(phone);

}

if(!TextUtils.isEmpty(name)){

sb.append(" and name=?");

params.add(name);

}

if(!TextUtils.isEmpty(gender)){

sb.append(" and gender=?");

params.add(gender);

}

SQLiteDatabase db=helper.getWritableDatabase();

if (params.size()!=0){

Object [] o=new Object[params.size()];

params.toArray(o);//将数据存放到指定的数组中

//执行删除

db.execSQL(sb.toString(),o);

}else{

db.execSQL(sb.toString());

}

Toast.makeText(this,"删除完成",Toast.LENGTH_SHORT).show();

}

String whereClause = "name=?";//删除的条件

String[] whereArgs = {"123"};//删除的条件参数

db.delete("student",whereClause,whereArgs);//执行删除

增加

private void insert() {//保存数据到object数组

Object [] o=new Object[]{name,phone,gender};

//获取数据库操作对象

SQLiteDatabase db=helper.getWritableDatabase();

//sql:sql语句 bingArgs:参数数组

db.execSQL("insert into student values(null,?,?,?)",o);

//关闭连接

db.close();

Toast.makeText(this,"增加成功",Toast.LENGTH_SHORT).show();

}

ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据

cv.put("name","123");

db.insert("student",null,cv);//执行插入操作

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值