#。# Sqlite ——我以前想用Sqlite 的时候看了几眼嫌太繁琐 然后滚去用的第三方的云数据库(好了 现在我又滚回来看Sqlite了)
嗯 先看下什么是Sqlite(以下来自百度)
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
嗯 简单的说 Sqlite 是一个 嵌入式 轻量级的数据库
QwQ Sqlite使用后会存储到哪里呢?
QwQ 私有目录下的databases 中
了解下以后 我们看下如何使用Sqlite
SqliteOpenHelper (记住这个类)
创建数据库的步骤
1.创建一个类 继承 SqliteOpenHelper,需要添加构造方法,实现两个方法 oncreate,onupgrade
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
看下构造方法中 的参数
Context:上下文对象 这个一般不用多说了吧
name:数据库文件的名称
factory:用来创建cursor对象 默认值为null
version:数据库的版本号 从1开始
简单说下onCreate 方法(这个方法是在数据库第一次被创建的时候调用的,适合做表结构的初始化)
SQLiteDatabase db:可以用来执行sql语句
onUpgrade方法(当数据库版本号发生改变的时候会被执行,(版本号发生改变在android4.0以后只能由低版本升级到高版本不能反过来)一般用来做表结构的修改)
SQLiteDatabase db:可以用来执行sql语句
oldVersion: 老的版本号
newVersion:新的版本号
我们把public void onCreate(SQLiteDatabase db)这个方法单拿出来 看看里面到底需要写什么东西
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20))");
}
是不是很简单呢·? 这里 execSQL 方法是用来执行sql语句的 但是 execSQL 没有返回值 没有返回值 没有返回值QwQsql语句 就是创建一个表 有两列一个是_id int 型(什么 你问我这句话里没有int`` 在Sqlite中 是没有int 但是有integer 这两个+。+ 差不多吧)自动增长 并设置为主键 和一个varchar 类型的name
好了 现在我们创建好了一个表 表里有2列 一个是_id 一个是name
嗯 还没有创建好(我忘了一个很重要的事情)
还没有调用(现在只是写了一个类 这个类可以创建一个数据库)其实也不难
Context mContext = this;
//创建一个帮助类
DBHelper dbHelper = new DBHelper(mContext);
// 通过getReadableDatabase 方法来初始化数据库的创建
SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();
好了 现在创建好了一个表
数据库还有增删改查 对不对~创建好了数据库 反正不是去瞪眼看的
创建InfoDao 类 来写 增删改查
public class InfoDao {
private final DBHelper dbHelper;
public InfoDao(Context mContext) {
dbHelper = new DBHelper(mContext);
}
//增
public void add(InfoBean bean) {
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = dbHelper.getReadableDatabase();
//sql:sql语句, bindArgs:sql语句中占位符的值
db.execSQL("insert into info(name,phone) values(?,?);", new Object[]{bean.name, bean.phone});
//关闭数据库对象
db.close();
}
//删
public void del(String name) {
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = dbHelper.getReadableDatabase();
//sql:sql语句, bindArgs:sql语句中占位符的值
db.execSQL("delete from info where name=?;", new Object[]{name});
//关闭数据库对象
db.close();
}
//改
public void update(InfoBean bean) {
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = dbHelper.getReadableDatabase();
//sql:sql语句, bindArgs:sql语句中占位符的值
db.execSQL("update info set phone=? where name=?;", new Object[]{bean.phone, bean.name});
//关闭数据库对象
db.close();
}
//查
public void query(String name) {
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = dbHelper.getReadableDatabase();
//sql:sql语句, selectionArgs:查询条件占位符的值,返回一个cursor对象
Cursor cursor = db.rawQuery("select _id, name,phone from info where name = ?", new String[]{name});
//解析Cursor中的数据
if (cursor != null && cursor.getCount() > 0) {//判断cursor中是否存在数据
//循环遍历结果集,获取每一行的内容
while (cursor.moveToNext()) {//条件,游标能否定位到下一行
//获取数据
int id = cursor.getInt(0);
String name_str = cursor.getString(1);
String phone = cursor.getString(2);
System.out.println("_id:" + id + ";name:" + name_str + ";phone:" + phone);
}
cursor.close();//关闭结果集
}
//关闭数据库对象
db.close();
}
}
使用SqliteDatebase对象调用execSql()做增删改,调用rawQuery方法做查询。
因为execSql()方法没有返回值 所以最多只能进行增删改 但不能执行查询