Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面是SQLiteDatabase的常用方法。
SQLiteDatabase的常用方法
方法名称 方法表示含义
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory) 打开或创建数据库
insert(String table,String nullColumnHack,ContentValues values) 插入一条记录
delete(String table,String whereClause,String[] whereArgs) 删除一条记录
query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy) 查询一条记录
update(String table,ContentValues values,String whereClause,String[] whereArgs) 修改记录
execSQL(String sql) 执行一条SQL语句
close() 关闭数据库
1、打开或者创建数据库在Android 中使用SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库。它会自动去检测是否存在这个数据库,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundException。
下面是创建名为“stu.db”数据库的代码:
openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)
参数1 数据库创建的路径参数2 一般设置为null就可以了
db=SQLiteDatabase.openOrCreateDatabase(“/data/data/com.lingdududu.db/databases/stu.db”,null);
2、创建表创建一张表的步骤很简单:
编写创建表的SQL语句
调用SQLiteDatabase的execSQL()方法来执行SQL语句下面的代码创建了一张用户表,属性列为:id(主键并且自动增加)、sname(学生姓名)、snumber(学号)
private void createTable(SQLiteDatabase db){
//创建表SQL语句
String stu_table=”create table usertable(_id integer primary key autoincrement,sname text,snumber text)”;
//执行SQL语句
db.execSQL(stu_table);
}
3、插入数据
插入数据有两种方法:
①SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法,
参数1 表名称,
参数2 空列的默认值
参数3 ContentValues类型的一个封装了列名称和列值的Map;
②编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行
第一种方法的代码:private void insert(SQLiteDatabase db){
//实例化常量值
ContentValues cValue = new ContentValues();
//添加用户名
cValue.put(“sname”,”xiaoming”);
//添加密码
cValue.put(“snumber”,”01005”);
//调用insert()方法插入数据
db.insert(“stu_table”,null,cValue);
}
第二种方法的代码:private void insert(SQLiteDatabase db){
//插入数据SQL语句
String stu_sql=”insert into stu_table(sname,snumber) values(‘xiaoming’,’01005’)”;
//执行SQL语句
db.execSQL(sql);
}
4、删除数据删除数据也有两种方法:
①调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法
参数1 表名称
参数2 删除条件
参数3 删除条件值数组②编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。
第一种方法的代码:
private void delete(SQLiteDatabase db) {
//删除条件
String whereClause = “id=?”;
//删除条件参数
String[] whereArgs = {String.valueOf(2)};
//执行删除
db.delete(“stu_table”,whereClause,whereArgs);
}
第二种方法的代码:private void delete(SQLiteDatabase db) {
//删除SQL语句
String sql = “delete from stu_table where _id = 6”;
//执行SQL语句
db.execSQL(sql);
}
5、修改数据修改数据有两种方法:
①调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法
参数1 表名称
参数2 跟行列ContentValues类型的键值对Key-Value
参数3 更新条件(where字句)
参数4 更新条件数组②编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。
第一种方法的代码:
private void update(SQLiteDatabase db) {
//实例化内容值 ContentValues values = new ContentValues();
//在values中添加内容
values.put(“snumber”,”101003”);
//修改条件
String whereClause = “id=?”;
//修改添加参数
String[] whereArgs={String.valuesOf(1)};
//修改
db.update(“usertable”,values,whereClause,whereArgs);
}
第二种方法的代码:private void update(SQLiteDatabase db){
//修改SQL语句
String sql = “update stu_table set snumber = 654321 where id = 1”;
//执行SQL
db.execSQL(sql);
}
6、查询数据在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:
public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
各个参数的意义说明:
参数table:表名称
参数columns:列名称数组
参数selection:条件字句,相当于where
参数selectionArgs:条件字句,参数数组
参数groupBy:分组列
参数having:分组条件
参数orderBy:排序列
参数limit:分页查询限制
参数Cursor:返回值,相当于结果集ResultSet
Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
Cursor游标常用方法
方法名称 方法描述
getCount() 获得总的数据项数
isFirst() 判断是否第一条记录
isLast() 判断是否最后一条记录
moveToFirst() 移动到第一条记录
moveToLast() 移动到最后一条记录
move(int offset) 移动到指定记录
moveToNext() 移动到下一条记录
moveToPrevious() 移动到上一条记录
getColumnIndexOrThrow(String columnName) 根据列名称获得列索引
getInt(int columnIndex) 获得指定列索引的int类型值
getString(int columnIndex) 获得指定列缩影的String类型值下面就是用Cursor来查询数据库中的数据,具体代码如下:
private void query(SQLiteDatabase db) {
//查询获得游标
Cursor cursor = db.query (“usertable”,null,null,null,null,null,null);//判断游标是否为空
if(cursor.moveToFirst() {
//遍历游标
for(int i=0;i 以上是Android SQLiteDatabase使用详细教程的内容,更多 SQLiteDatabase Android 使用 教程 详细 的内容,请您使用右上方搜索功能获取相关信息。
Android SQLiteDatabase使用详细教程
-
设置EditText不自动聚焦
如果界面中有EditText的时候,用户打开界面的话EditText就会自动聚焦。如果想取消这种一打开界面EditText就聚焦效果,可在EditText的上级父容器中加入如下代码:
-
php 字符串中的\n换行符无效、不能换行的解决方法
这篇文章主要介绍了php 字符串中的换行符无效、不能换行的解决方法,实际上是PHP的双引号和单引号的使用问题,需要的朋友可以参考下
-
gulp npm安装gulp-sass报错: checking for Python executable "python2" in the PATH
今天安装gulp-sass的时候报错: checking for Python executable "python2" in the PATH, 尝试了很多方法,最后用cnpm来安装就安装成功了
-
小程序文档整理之 -- 快速上手
小程序文件结构很简单,一个主体app以及各个页面
-
laravel-nestedset:多级无限分类正确姿势
Nested Set Model 是一种实现有序树的高明的方法,它快速且不需要递归查询,例如不管树有多少层,你可以仅使用一条查询来获取某个节点下的所有的后代,缺点是它的插入、移动、删除需要执行复杂的sql语句,但是这些都在这个插件内处理了!
-
vue中修改了数据但视图无法更新的情况
由于 JavaScript 的限制,Vue 不能检测以下变动的数组
-
如何去掉toolbar导航栏中向右的箭头
今天又需求要去掉,toolbar中的返回键
-
Android实现沉浸式状态栏的那些坑
最近项目需要实现沉浸式的状态栏,其实我在之前就了解过Android的沉浸式,发现有些棘手就放弃了,但是此次是公司的项目需要的,就花了几天把这个问题搞定了,在此记录一下,并mark几个坑。 首先,沉浸式是Android 4.4及以上才有的,在后续的5.0及6.0上面都增加了一些相关支持,于是问题就不太好办了。先看我实现的效果:
-
Android 解决沉浸式状态栏下,输入法弹出,布局不会自动调整的BUG
在开发中,如果输入框在布局的底部。在弹出输入发时,为了使输入法不遮挡输入框通常有两种做法: 1.将布局压缩(Activity的android:windowSoftInputMode属性设置为”adjustResize”)。 2.移动布局,将布局顶到输入框之上(Activity的android:windowSoftInputMode属性设置为”adjustPan”)
-
Android layout实现输入法弹出后,布局整体上移
那如果要实现沉浸式状态栏又要保持布局不会被输入法遮挡,怎么办呢? 只要在根布局加上android:fitsSystemWindows=”true”即可,效果如下(为方便看效果我把背景改成了黄色):