学习自:Mars老师视频-SQLite使用方法...
提纲:
一:SQLite数据库介绍 (了解)
二:继承SQLiteOpenHelper的类的介绍
三:对SQLite增删改查用法的详解
四:添加事物
五:Cursor取值
六:adb工具的使用和介绍 (了解)
七:对SQLite的封装(主要功能:保证同一线程中,同一时间只允许操作一次数据库)
八:SQLite的一个应用-- 天气的显示,添加,及删除
一:SQLite数据库介绍 (了解)
在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。 另外, SQLite 在解析CREATETABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息,如下面语句会忽略 name字段的类型信息:
CREATE TABLE person (personid integer primary keyautoincrement, namevarchar(20))
二:继承SQLiteOpenHelper的类的介绍
DatabaseHelper类:- package android.sqlite;
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.database.sqlite.SQLiteDatabase.CursorFactory;
- /**
- * SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能
- * 1, getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
- * 2, 提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作
- */
- public class DatabaseHelper extends SQLiteOpenHelper {
- private static final int version = 1;
- private static final string name = "person.db";
-
- //在SQLiteOpenHelper的子类当中,必须有构造函数,作用:创建person.db
- public DatabaseHelper(Context context){
- //必须通过super调用父类当中的构造函数
- super(context, name, null, version);
- }
- //该函数是在第一次创建的时候执行,实际上是第一次得到SQLiteDatabase对象的时候才会调用这个方法
- //如果此数据库已经存在,则不会调用此方法
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("create table person (personId Integer primary key autoincrement,namevarchar(20),age Integer)");
- }
- //当version值发生变化时,系统会回调此方法
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- System.out.println("upgrade a database");
- }
- }
三:对SQLite增删改查用法的详解
增:
- DatabaseHelper dbHelper = new DatabaseHelper(XXXActivity.this);
- SQLiteDatabase db = dbHelper.getWritableDatabase();
- ContentValues values = new ContentValues();
- //向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
- values.put("id", 1);
- values.put("name","zhangsan");
- //参数解释:1.表名 2.null 2.ContentValues对象
- db.insert("user", null, values);
删:
- DatabaseHelper dbHelper = new DatabaseHelper(XXXActivity.this);
- SQLiteDatabase db = dbHelper.getWritableDatabase();
- db.delete("user", "id=?", new String[]{"1"});
改:
- DatabaseHelper dbHelper = new DatabaseHelper(XXXActivity.this);
- SQLiteDatabase db = dbHelper.getWritableDatabase();
- ContentValues values = new ContentValues();
- values.put("name", "lcc");
- db.update("user", values, "id=?", new String[] { "1" });
查:
- DatabaseHelper dbHelper = new DatabaseHelper(XXXActivity.this);
- SQLiteDatabase db = dbHelper.getReadableDatabase();
- Cursor cursor = sqliteDatabase.query("user", new String[] { "id",
- "name" }, "id=?", new String[] { "1" }, null, null, null);
- DatabaseHelper dbHelper = new DatabaseHelper(XXXActivity.this);
- SQLiteDatabase db = dbHelper.getReadableDatabase();
- db.execSQL("select * from person");
- db.execSQL("select * from person where id=?",new String[] { "1" });
- DatabaseHelper dbHelper = new DatabaseHelper(XXXActivity.this);
- SQLiteDatabase db = dbHelper.getReadableDatabase();
- Cursor cursor = db.rawQuery("select * from person where id=?", new String[] { "1" });
四:添加事物
事物一般是在几个查询条件需要同时成功或者同时失败的情况下使用
- DatabaseHelper dbHelper = new DatabaseHelper(XXXActivity.this);
- SQLiteDatabase db = dbHelper.getWritableDatabase();
- try{
- db.beginTransaction();
- db.delete("user", "id=?", new String[]{"1"});
- db.setTransactionSuccessful();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- db.endTransaction();
- }
五:Cursor取值
- DatabaseHelper dbHelper = new DatabaseHelper(XXXActivity.this);
- SQLiteDatabase db = dbHelper.getReadableDatabase();
- Cursor cursor = db.rawQuery("select * from person where id=?", new String[] { "1" });
- while (cursor.moveToNext()) {
- id = cursor.getString(cursor.getColumnIndex("id"));
- name = cursor.getString(cursor.getColumnIndex("name"));
- }
六:adb工具的介绍和使用 (了解)
介绍:
使用:
七:对SQLite的封装(主要功能:保证同一线程中,同一时间只允许操作一次数据库)
/**
* 文件名:BaseSqlHelper.java
* 版权:深圳市天音美讯信息技术有限公司
* 描述:
* 修改人:李正清
* 修改时间:2014-4-10
* 修改单号:
* 修改内容:
*/
package com.tymx.lndangzheng.dao;
import com.olive.tools.android.MyLog;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
* 数据库操作基类,增加了线程互斥处理
* 功能简述:
* 功能详细描述:
* @author 李正清
* @version [1.0,2014-4-10]
* @see
* @since
*/
public class BaseSqlHelper extends SQLiteOpenHelper{
public BaseSqlHelper(Context context, String name, 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) {
}
public void waitLock(SQLiteDatabase db){
while (db.isDbLockedByOtherThreads() || db.isDbLockedByCurrentThread()){
MyLog.d("BaseSqlHelper", "insert === db is locked by other or current threads!");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void doSql(String sql){
SQLiteDatabase database = getWritableDatabase();
waitLock(database);
database.execSQL(sql);
}
public synchronized void doSql(String sql,Object[] args){
SQLiteDatabase database = getWritableDatabase();
waitLock(database);
database.execSQL(sql,args);
}
public synchronized Cursor query(String table,String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase database = getReadableDatabase();
waitLock(database);
Cursor cursor = database.query(table, projection, selection,
selectionArgs, null, null, sortOrder);
return cursor;
}
public synchronized Cursor query(String table, String[] projection, String selection,
String[] selectionArgs, String sortOrder, String limit) {
SQLiteDatabase database = getReadableDatabase();
waitLock(database);
Cursor cursor = database.query(table, projection, selection,
selectionArgs, null, null, sortOrder, limit);
return cursor;
}
public synchronized Cursor query(String sql) {
SQLiteDatabase database = getReadableDatabase();
waitLock(database);
Cursor cursor = database.rawQuery(sql, null);
return cursor;
}
public synchronized int delete(String table,String selection, String[] selectionArgs) {
SQLiteDatabase database = getWritableDatabase();
waitLock(database);
int returnValue = database.delete(table, selection, selectionArgs);
return returnValue;
}
public synchronized int update(String table,ContentValues values, String selection,
String[] selectionArgs) {
SQLiteDatabase database = getWritableDatabase();
waitLock(database);
int returnValue = database.update(table, values, selection,
selectionArgs);
return returnValue;
}
public synchronized long insert(String table,ContentValues initialValues) {
SQLiteDatabase database = getWritableDatabase();
waitLock(database);
ContentValues values;
if (initialValues != null) {
values = new ContentValues(initialValues);
} else {
values = new ContentValues();
}
long rowId = database.insert(table,null, values);//
return rowId;
}
}
八:SQLite的一个应用-- 天气的显示,添加,及删除