SQLite(Android)

SQLite(Android)_第1张图片

文章目录

    • 介绍
    • Android 创建数据库
      • SQLiteOpenHelper
      • Cursor
      • 相关代码例子
        • 创建数据库
        • 数据库升级
        • 数据库降级
        • 增加数据
        • 查询数据
        • 删除数据
        • 更新数据
      • adb命令操作sqlite3
      • 常用的sql语句
    • 数据库事务介绍

题外话:生命的意义是什么?

SQLite详细解说

介绍

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

  • 特点
    体质小;无需安装;跨平台;单一

  • 欠缺
    多线程操作差
    对sql的支持不全面

Android 创建数据库

SQLiteOpenHelper

先了解下这个类
SQLite(Android)_第2张图片
相关API
在这里插入图片描述
SQLite(Android)_第3张图片
SQLite(Android)_第4张图片
因此,使用getReadableDatabase();相对可靠点。

Cursor

随机读写访问
SQLite(Android)_第5张图片
相关api
SQLite(Android)_第6张图片
SQLite(Android)_第7张图片
SQLite(Android)_第8张图片

相关代码例子

创建数据库

创建一个类继承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();

效果可以用终端查看
SQLite(Android)_第9张图片

数据库升级

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没有返回值,只能通过查询判断是否操作成功
SQLite(Android)_第10张图片
方法2:google封装API
SQLite(Android)_第11张图片
参数说明:
如果返回-1 代表失败。nullColumnHack 参数默认可以使用null,也可以使用字段名替代。
SQLite(Android)_第12张图片

查询数据

方法1:sql语句
SQLite(Android)_第13张图片
方法2:google封装API
SQLite(Android)_第14张图片
参数说明:
在这里插入图片描述
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关键字后面的部分。

详细举例子:
SQLite(Android)_第15张图片
查询客户总的订单数在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没有返回值,只能通过查询判断是否操作成功
SQLite(Android)_第16张图片
方法2:google封装API
SQLite(Android)_第17张图片
参数说明:
SQLite(Android)_第18张图片

更新数据

方法1:sql语句
注意,以下API没有返回值,只能通过查询判断是否操作成功
SQLite(Android)_第19张图片
方法2:google封装API
在这里插入图片描述
参数说明:
第一个参数:表名
第二个参数:ContenValues 用来封装set 后面传入修改的值
第三个参数:Where条件语句 具体的值用代替
第四个参数:wherer条件中?对应的值
SQLite(Android)_第20张图片

adb命令操作sqlite3

先熟悉命令:

.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                    退出命令行接口

操作步骤:

  1. 进入到控制台中,输入adb shell,进入到命令模式的环境中
  2. 输入:cd /data/data/
  3. 选择你所在的数据库文件,比如我的com.example.myapplication/databases, 输入命令:cd com.example.myapplication/databases
  4. 可以使用ls -l 命令查看当前目录中的文件
  5. 输入: cd databases 进入到数据库文件中
  6. ls -l 显示你数据库中你建立的数据库
  7. sqlite3 info.db 进入到你选择的数据库中
  8. .tables :查看你建的表
  9. 如果想查看这些表的结构:通过.schema来查看
  10. select * from table_name;s 可以查看整个表的信息
  11. 使用其他的SQL语句可以进一步对表进行操作,注意SQL语句必须用分号(;)结尾

常用的sql语句

表的创建
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();事务结束,首先检查是否设置事务成功的标记,成功–提交所有修改。失败–回滚修改前的记录
SQLite(Android)_第21张图片
结束!

你可能感兴趣的:(Android,数据库,SQLite)