SQLite数据库的使⽤之使⽤内置函数
光会使⽤SQL语句来操作数据库是完全不够的,虽然看起来⾮常的极客范,但是你想想,万⼀少打⼀个空格,那你的程序就直接GG了,所以接下来学习的使⽤SQLitedatabase类的内置函数就⾮常关键了。
数据库创建的
数据库的创建和之前还是⼀样的,这个没法⽤内置函数来创建。
SQLiteDatabase db = openOrCreateDatabase("stu.db", MODE_PRIVATE, null);
"name text not null," +
"sex text not null," +
"age integer not null)");
使⽤ContentValues操作数据
在查看内置函数的⽂档时,你会发现每个函数的参数都有⼀个ContentValues,这是什么呢?
This class is used to store a set of values that the ContentResolver can process.
ContentValues的⽂档⾥这么写到,意思是只有⽤这个类来储存⼀组值时,ContentResolver才能处理。⽬前我把它看作⼀个Hashmap,以键值对的形式存储,可以直接new出对象。
ContentValues values = new ContentValues();//暂时理解为⼀个hashmap
values.put("name","张三");
values.put("sex","男");
values.put("age",18);
插⼊数据库
插⼊数据库直接⽤long rowId=db.insert(TABLENAME, null, values); 第⼀个参数不⽤说,第⼆个参数不⽤管,第三个参数就是我们刚刚创建的ContentValues。它会返回⼀个long型的id。
注意的是values使⽤过后如果还想继续插⼊,必须要values.clear()
那么我们再多插⼊⼏个数据
values.clear();//记得清空
values.put("name","李四");
values.put("sex","男");
values.put("age",29);
db.insert(TABLENAME, null, values);
values.clear();//记得清空
values.put("name","李⽆");
values.put("sex","男");
values.put("age",39);
db.insert(TABLENAME, null, values);
values.clear();//记得清空
values.put("name","李撒旦");
values.put("sex","男");
values.put("age",39);
db.insert(TABLENAME, null, values);
values.clear();//记得清空
values.put("name","李打撒");
values.put("sex","男");
values.put("age",99);
db.insert(TABLENAME, null, values);
values.clear();
这样我们的数据库就有5条数据了
更新与删除
那么想在如果我想把所有id>3的数据的性别全部改为⼥怎么办呢?
使⽤内置函数的update⽅法,并且我们刚刚说到使⽤内置函数操作数据库必定绕不开ContentValues。
values.put("sex","⼥");
db.update(TABLENAME, values, "_id>?", new String[]{"3"});
在values中放置我们想要修改的键值,传⼊update函数,第三个参数⽤“?”表⽰占位,具体的值在第四个参数上填上,第四个参数必须是字符串数组。
那么接下来我想要删除名字⾥有”打”的数据,毫⽆疑问调⽤delete函数
db.delete(TABLENAME, "name like ?", new String[]{"%打%"});
⽤法与更新差不多
查操作
查操作稍微繁琐⼀点,调⽤query函数返回Cursor对象
Cursor cursor=db.query(TABLENAME, null, "_id > ?", new String[]{"0"},null,null,"name");//最后⼀个排序
// 调⽤SQLiteDatabase对象的query⽅法进⾏查询,返回⼀个Cursor对象:由数据库查询返回的结果集对象
// 第⼀个参数String:表名
// 第⼆个参数String[]:要查询的列名
// 第三个参数String:查询条件
// 第四个参数String[]:查询条件的参数
// 第五个参数String:对查询的结果进⾏分组
// 第六个参数String:对分组的结果进⾏限制
// 第七个参数String:对查询的结果进⾏排序
参数看起来很多吧!其实我们就⽤到其中的⼏个参数⽽已,第三个第四个参数组成查条件,这⾥我
们查所有的数据,最后⼀个参数
为“orderBy”即排序⽅法,我们按名字排序。
返回⼀个cursor对象我们这⾥还是先检查是否为空
if (cursor != null) {
String[] columns = ColumnNames();
while (veToNext()) {
for (String name : columns
) {
Log.d("info", name+"为");
Log.d("info", " 查询到"+ColumnIndex(name)));
}
}
cursor.close();
}
接着我们⽤⼀个字符串数组把所有列的名字全部保存起来,使⽤ColumnNames(); 即可得到所有列的名字,接下来就移动游标,游标指定了⾏,使⽤getColumnIndex 来确定该列的数据。
最后要记得关闭我们的游标和数据库。
SQLiteOpenHelper的使⽤
SQLiteOpenHelper是⼀个帮助类,是⼀个抽象类,因此必须要⾃⼰新建⼀个类去继承他,需要重写⾥⾯的⽅法
@Override //⾸次建库是使⽤,可以把建库建表操作放在⾥⾯
public void onCreate(SQLiteDatabase db) {
"name text not null," +
抽象类的使用"sex text not null," +
"age integer not null)");
}
@Override//当数据库的版本发⽣变化的时候会⾃动执⾏
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
新建好这个类后,我们就可以在其他类中使⽤了,先new ⼀个helper对象,传⼊当前上下⽂以及数据库名,接着调⽤getWritableDatabase⽅法就会返回⼀个数据库,那么接下来的操作就和以前⼀样了。
DBOpenHelper helper = new DBOpenHelper(MainActivity.this, "stu.db");
SQLiteDatabase db = WritableDatabase();//read 只读
Cursor cursor = db.rawQuery("select * from studb",null);
if (cursor != null) {
String[] cols = ColumnNames();
while (veToNext()) {
for (String name:cols
) {
Log.d("info", ColumnIndex(name)));
}
}
cursor.close();
}
db.close();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论