Sqlite3笔记

Sqlite2特性:
1.轻量级
2.独立性
3.隔离性
4.跨平台
5.多语言接口
6.安全性


SQLite的主要操作包括:创建数据库、打开数据库、创建表、添加、删除、修改、查询数据等
1、创建和打开数据库
使用openOrCreateDatebase来实现,如果数据库存在,则打开数据库、如果不存在,则创建一个新的数据库
Eg:mSQLiteDatabase =  this.openOrCreate("SQLiteDatabaseName");
2、创建表
创建表是通过execSQL方法来执行一条SQL语句。
Eg:String CREATE_TABLE = "create table tableName(_id INTEGER PRIMARY KEY,num INTEGER,data TEXT)";
mSQLiteDatabase.execSQL(CREATE_TABLE);
3、添加数据
使用insert方法进行操作,但是首先需要将参数打包成一个ContentValues,ContentValues是一个Map,其Key键是字段名称,Value值是字段的值。
Eg:
ContentValues cv = new ContentValues();
cv.put("num",1);
cv.put("data","测试数据");
mSQLiteDatabase.insert(TABLE_NAME,null,cv)
同样也可以使用SQL语句执行
String INSERT_SQL="insert into tableName (_id,num,data) values(1,1,'测试数据')";
mSQLiteDatabase.execSQL(INSERT_SQL);
4.修改表中的数据
使用update()方法
Eg:修改值为0的数据
ContentValues cv = new ContentValues();
cv.put(num,3);
cv.put(data,"修改测试数据");
mSQLiteDatabase.update("tableName",cv,"num" + "=" + Integer.toString(0),null);
同样可以通过execSQL方法执行。

5.删除数据
使用delete()方法
Eg:删除_id为1的字段
mSQLiteDatabase.delete("tableName","where _id = 0 ",null);
同时也可以使用execSQL()方法达到效果
String DELETE_SQL = "delete from tableName where _id = 0";
mSQLiteDatabase.execSQL(DELETE_SQL);
6.关闭数据库
mSQLiteDatabase.close();
7.删除指定的表
mSQLiteDatabase.execSQL("drop table tableName");
8.删除数据库
this.deleteDatabase("databaseName");
9.查询表中的数据
查询表中的数据是通过Cursor类来实现的。当我们使用mSQLiteDatabase.query()方法时,会得到一个Cursor对象,此对象指向的就是每一条数据。其常见方法如下
方法名 说明
move 以当前位置为参考,将cursor移动到指定的位置,成功返回true,失败返回false
moveToPosition 将Cursor移动到指定位置,成功返回true,失败返回false
moveToNext 将Cursor向前移动一个位置,成功返回true,失败返回false
moveToLast 将Cursor向后移动一个位置,成功返回true,失败返回false
moveToFirst 将Cursor移动到第一行,成功返回true,失败返回false
isBeforeFirst 返回Cursor是否指向第一项数据之前
isAfterLast 返回Cursor是否指向最后一项数据之后
isClosed 返回Cursor是否关闭
isFirst 返回Cursor是否指向第一项数据
isLast 返回Cursor是否指向最后一项数据
isNull 返回执行位置的值是否为空
getCount 返回总的数据项数
getInt 返回当前行中指定索引的数据


Eg:
Cursor cursor = mSQLiteDatabase.rawQuery("select * from tableName",null);
if(Cursor != null){
if(cursor.moveToFirst()){
do{
//获取num列的索引值
int numColumn = cursor.getColumnIndex("num");
//获取num值
int num = cursor.getInt(numColumn);
}
}
}


SQLiteOpenHelper的应用
在实际开发中,我们一般会封装一个继承自SQLiteOpenHelper类的数据库操作类。SQLiteOpenHelper的构造方法中分别传入Context、数据库名称、CursorFactory(一般传入为null,否则为默认数据库)、数据库版本号。在SQLiteOpenHelper中,首先会执行onCreate方法,但是真正创建数据库是在调用getWritableDatabase或者getReadableDatabase方法时才真正去创建数据库,并且返回一个SQLiteDatabase对象。


数据共享(Content Provider)
其作用是使各个应用之间实现数据共享。Content Provider是一个特殊的存储数据的类型,它提供了一套标准的接口用于获取、操作数据。
1.ContentResolver
所有的Content Provider都会实现一些共同的接口。其包括数据的查询、添加、更改和删除。可以通过getContentRosolver()方法获取一个ContentResolver对象,然后就可以用ContentResolver提供的方法来操作Content Provider了。
ContentResolver cr = getContentResolver();
一般情况下,Content Provider只存在一个实例,这个实例可以与在不同的进程或者程序中的多个ContentResolver对象进行通信。Content Provider把它的数据作为数据库模型上的单一数据表提供出来。每一行是一条数据,每一列是一个特定的类型的值。
2.URI
每个Content Provider都会对外提供一个公共的URI,如果应用程序有数据需要共享时,就需要这个URI,然后其他应用程序就可以通过Content Provider传入这个URI来对数据进行操作。URI由三部分组成:"content://"、数据的路径、标识ID(可选)
Eg:content://contents/people/5(联系人信息中ID为5的联系人记录)
3.查询数据
要查询Content Provider的内容,可以使用ContentResolver.query()方法或Activity.managedQuery()方法,他们都返回一个Cursor对象,不同的是使用managedQuery包含了Cursor的生命周期,当Activity被暂停之后,如果要使用Cursor就通过Activity.startManagingCursor()方法来重新启动。
Eg:
1.Cursor cur = managedQueryCursor(person,null,null,null);
2. String projection = new String[]{People._id , People._count,People.NAME,People.NUMBER};
Uri contacts = People.CONTENT_URI;
Cursor managedCursor = managedQuery(contents,projection/** 返回指定的列 */,null(返回所有行的数据),null(可选参数),People.NAME+"ASC"(按照名字的升序排列));
读取查询的数据由Cursor对象的方法来操作,Cursor对象用于在结果集合中向前或者向后列举数据,Cursor对象只能用于读取数据。增加、修改和删除数据必须使用ContentResovler对象。
Eg:
private void getColumnData(){
if(cursor.moveToFirst()){
String name;
String phoneNum;
int nameColumn = cursor.getColumnIndex(People.NAME);
int phoneNumColumn = cursor.getColumnIndex(People.NUMBER);
do{
name = cursor.getString(nameColumn);
phoneNum = cursor.getString(phoneNumColumn);
}
}
}
4.修改数据
可以使用ContentResolver.update()方法来更新数据。
Eg:
private void uodateRecord(int id,int num){
Uri uri = ContentUris.withAppendedId(People.CONTENT_URI,id);
ContentValue cv = new ContentValue();
value.put(People.NUMBER,num);
getContentResolver.update(uri,cv,null,null);
}
5.添加数据
可以使用ContentResolver.insert()方法来增加一条数据。
Eg:ContentValue cv = newContentValue();
   cv.put(People.NAME,"NAME");
   cv.put(People.STARRED,1);
   Uri uri = getContentResolver().insert(People.CONTENT_URI,cv);
6.删除数据
调用ContentResolver.delete()方法即可
发布了41 篇原创文章 · 获赞 2 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章