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<String> 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);//执行插入操作
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# android
# SQLite
# Android编程之SQLite数据库操作方法详解
# Android SQLite事务处理结合Listview列表显示功能示例
# Android开发笔记SQLite优化记住密码功能
# Android利用listview控件操作SQLite数据库实例
# Android批量插入数据到SQLite数据库的方法
# Android SQLite数据库基本操作方法
# Android使用SQLite数据库的示例
# Android SQLite数据库版本升级的管理实现
# 为空
# 重写
# 就会
# 报错
# 装好
# 有一个
# 返回值
# 组中
# 都是
# 是一个
# 是一种
# 过了
# 就不
# 就好
# 两种
# 遍历
# 给我们
# 都很
# 有兴趣
# 较多
相关文章:
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何规划企业建站流程的关键步骤?
广平建站公司哪家专业可靠?如何选择?
长沙做网站要多少钱,长沙国安网络怎么样?
名字制作网站免费,所有小说网站的名字?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
营销式网站制作方案,销售哪个网站招聘效果最好?
建站之星安装后界面空白如何解决?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
郑州企业网站制作公司,郑州招聘网站有哪些?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
网站制作模板下载什么软件,ppt模板免费下载网站?
建站之家VIP精选网站模板与SEO优化教程整合指南
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Thinkphp 中 distinct 的用法解析
如何在VPS电脑上快速搭建网站?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何配置FTP站点权限与安全设置?
香港服务器部署网站为何提示未备案?
建站之星2.7模板快速切换与批量管理功能操作指南
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
建站之星官网登录失败?如何快速解决?
如何快速生成高效建站系统源代码?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
大同网页,大同瑞慈医院官网?
建站之星×万网:智能建站系统+自助建站平台一键生成
制作网站怎么制作,*游戏网站怎么搭建?
Swift中swift中的switch 语句
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
建设网站制作价格,怎样建立自己的公司网站?
,巨量百应是干嘛的?
高端云建站费用究竟需要多少预算?
如何快速搭建支持数据库操作的智能建站平台?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
建站org新手必看:2024最新搭建流程与模板选择技巧
如何选择香港主机高效搭建外贸独立站?
微信h5制作网站有哪些,免费微信H5页面制作工具?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
家庭服务器如何搭建个人网站?
XML的“混合内容”是什么 怎么用DTD或XSD定义
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何在香港服务器上快速搭建免备案网站?
如何通过山东自助建站平台快速注册域名?
如何在云服务器上快速搭建个人网站?
TestNG的testng.xml配置文件怎么写
*请认真填写需求信息,我们会在24小时内与您取得联系。