SQLite详细解说
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。
特点
体质小;无需安装;跨平台;单一
欠缺
多线程操作差
对sql的支持不全面
先了解下这个类
相关API
因此,使用getReadableDatabase();相对可靠点。
创建一个类继承SQLiteOpenHelp,重写相关方法:
public class MyOpenHelper extends SQLiteOpenHelper {
public MyOpenHelper(Context context) {
//第一个参数上下文
//第二个参数 数据库的名字 如果传入null 就是在内存中创建一个数据库 内存中的数据库在应用退出之后 数据就会丢失
//第三个参数 游标工厂 如果使用系统默认的游标工厂就传入null
//第四个参数 数据库的版本号 用版本号来控制数据库的升级和降级 版本号从1开始
super(context, "test3.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//当数据库文件第一次创建的时候 会调用这个方法 在这个方法中 我们一般做 表结构的创建 和 数据的初始化操作
//_id sqlite中 id这一列的字段名 一般都习惯称为 _id
//sqlite数据库 数据都是字符串存
db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
System.out.println("onCreate调用");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//表结构的修改(增加字段)
db.execSQL("alter table info add age integer");
//添加新的表格
System.out.println("onupgrade oldVersion"+oldVersion+"newVersion"+newVersion);
}
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//super.onDowngrade(db, oldVersion, newVersion);
System.out.println("onDowngrade");
}
}
创建数据库所调用得方法
openHelper = new MyOpenHelper(this);
// getReadableDatabase 和 getWritableDatabase在大部分情况下作用是相同的:
// 创建(数据库文件不存在的时候)或者打开一个数据库 获得的都是可读可写的数据库
// 当磁盘满的时候 getReadableDatabase会返回一个只读的数据库
// getWritableDatabase会出错
SQLiteDatabase database = openHelper.getReadableDatabase();
// database = openHelper.getWritableDatabase();
onUpgrade();方法
问:什么时候回调用?
答:当版本号发生变化的时候
默认情况下 不可以降级数据库。那么如何降级?后面说到。
可以在这里增加一个列(字段),也可以创建新的表格
–修改表的结构 添加年龄字段
db.execSQL(“alter table info add age integer”);
方法中的 oldVersion newVersion 根据不同版本做不同逻辑
做法:重写onDowngrade(); 注释super.onDowngrade(db, oldVersion, newVersion);
然后在此修改逻辑。
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//super.onDowngrade(db, oldVersion, newVersion);
}
注意:其实可以通过升级的方式来降级需求
方法1:sql语句
注意,以下API没有返回值,只能通过查询判断是否操作成功
方法2:google封装API
参数说明:
如果返回-1 代表失败。nullColumnHack 参数默认可以使用null,也可以使用字段名替代。
方法1:sql语句
方法2:google封装API
参数说明:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。
详细举例子:
查询客户总的订单数在500元以上的,且County在中国的客户的名称和订单总数,且按照CustomerName来排序,默认ASC排序
String table = "Orders";
String[] columns = new String[] {"CustomerName", "SUM(OrderPrice)"};
String selection = "Country=?";
String[] selectionArgs = new String[]{"China"};
String groupBy = "CustomerName";
String having = "SUM(OrderPrice)>500";
String orderBy = "CustomerName";
Cursor c = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, null);
---------------------
作者:scorplopan
来源:CSDN
原文:https://blog.csdn.net/scorplopan/article/details/6303559
方法1:sql语句
注意,以下API没有返回值,只能通过查询判断是否操作成功
方法2:google封装API
参数说明:
方法1:sql语句
注意,以下API没有返回值,只能通过查询判断是否操作成功
方法2:google封装API
参数说明:
第一个参数:表名
第二个参数:ContenValues 用来封装set 后面传入修改的值
第三个参数:Where条件语句 具体的值用?
代替
第四个参数:wherer条件中?
对应的值
先熟悉命令:
.database 显示数据库信息;
.tables 显示表名称;(好像.table也可以)
.schema 命令可以查看创建数据表时的SQL命令;
.schema table_name 查看创建表table_name时的SQL的命令;
插入记录
insert into table_name values (field1, field2, field3...);
查询
select * from table_name;查看table_name表中所有记录;
select * from table_name where field1='xxxxx'; 查询符合指定条件的记录;
删除
drop table_name; 删除表;
drop index_name; 删除索引;
改变输出格式
.mode list|column|insert|line|tabs|tcl|csv
.separator "X" 更改分界符号为X
更改输出
.output file_name|stdout
输出到文件或者标准输出(默认终端)
.databases 列出数据库文件名
.tables ?PATTERN? 列出?PATTERN?匹配的表名
.import FILE TABLE 将文件中的数据导入的文件中
.dump ?TABLE? 生成形成数据库表的SQL脚本
.output FILENAME 将输出导入到指定的文件中
.output stdout 将输出打印到屏幕
.mode MODE ?TABLE? 设置数据输出模式(csv,html,tcl…
.nullvalue STRING 用指定的串代替输出的NULL串
.read FILENAME 执行指定文件中的SQL语句
.schema ?TABLE? 打印创建数据库表的SQL语句
.separator STRING 用指定的字符串代替字段分隔符
.show 打印所有SQLite环境变量的设置
.quit 退出命令行接口
操作步骤:
表的创建
db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
db.execSQL("alter table info add age integer");
增删改查sql语句
insert into info(name,phone) values('王五','13777777');
delete from info where name='王五';
update info set phone='139999999'where name='王五';
select name,phone from info;
一系列数据修改后,要么成功,要么失败。
保证操作数据库的数据正确性。
db.endTransaction();事务结束,首先检查是否设置事务成功的标记,成功–提交所有修改。失败–回滚修改前的记录
结束!