背景
SQLite 是一个非常流行的嵌入式数据库,它提供了一个清爽的 SQL 接口,相当小的内存占用和高速的响应,更 Happy 的是他还是免费的,大家都可以尽情的使用,很多牛叉的公司(诸如 Adobe,Apple,Google,Sun,Symbian ),开源项目( Mozilla,PHP,Python )都在产品中装配 SQLite.
Android 中, SQLite 是被集成于 Android runtime ,每个 Android 应用程序都可以欢快的使用 SQLite 数据库,如果你熟悉 JDBC ,那么这个过程就更安逸了。
SQLite3 特征
和传统关系数据库比较
有的:
Sql 语句: SELECT INSERT UPDATE
CREATE DROP
数据类型:
不区分大小写
TEXT 文本
NUMERIC 数值
INTEGER 整型
REAL 小数
NONE 无类型
没有的:
FOREIGN KEY 外键约束
RIGHT OUTER JOIN 和 FULL OUTER JOIN
ALTER TABLE
开始动手
动手之前,确认你的机器中已经配置好如下环境:
Android 开发环境(怎么配置问 Google ,有很多)
本文档适用环境 Android1.0
1, 建库
方式一:命令行方式(适合调试用)
可以使用 adb shell 进入设备后台,命令行方式手动创建,步骤如下:
Eclipse 中启动模拟器之后, cmd 下输入进入设备 Linux 控制台
D:\>adb shell
之后进入应用 data 目录
# cd /data/data
ls 列表目录,查看文件,找到你的项目目录并进入
查看有无 databases 目录,如果没有,则创建一个
# mkdir databases
cd databases 进入并创建数据库
# sqlite3 friends.db
sqlite3 friends.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite>
ctrl+d 退出 sqlite 提示符 ls 列表目录会看到有一个文件被创建 friends.db
他就是 SQLite 的库文件
# ls
ls
friends.db
方式二:编码方式(使用更多)
android.content.Context 中提供了函数 , 注: Activity 是 Context 的子类
openOrCreateDatabase () 来创建我们的数据库
db = context .openOrCreateDatabase(
String DATABASE_NAME , int Context. MODE_PRIVATE , null );
String DATABASE_NAME 数据库的名字
Int MODE 操作模式 Context.MODE_PRIVATE 等
CursorFactory 指针工厂 ,本例中传入 null ,暂不用
2, 建表
命令行方式
# sqlite3
sqlite> create table widgets (id integer primary key autoincrement,name text);
3, 插入数据
命令行 增加,查询数据
sqlite> insert into widgets values(null,'tom');
insert into widgets values(null,'tom');
sqlite> select * from widgets;
select * from widgets;
1|tom
sqlite>
API 方式
-
package org.imti;
-
-
import android.app.Activity;
-
import android.database.Cursor;
-
import android.os.Bundle;
-
import android.view.View;
-
import android.view.View.OnClickListener;
-
import android.widget.Button;
-
import android.widget.EditText;
-
import android.widget.TextView;
-
-
/**
-
* SQLite Demo
-
*
-
* 供Activity私有访问的数据库 没有使用ContentProvider 方式 增加 查询数据
-
*
-
* @author daguangspecial@gmail.com
-
*
-
*/
-
public class DbDemo extends Activity {
-
EditText inputTxt;
-
Button btnAdd;
-
Button btnViewAll;
-
TextView viewAll;
-
-
DBHelper db;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
// TODO Auto-generated method stub
-
super.onCreate(savedInstanceState);
-
this.setContentView(R.layout.dbdemo);
-
// 初始化UI
-
btnAdd = (Button) findViewById(R.id.btnAdd);
-
btnViewAll = (Button) findViewById(R.id.btnViewAll);
-
viewAll = (TextView) findViewById(R.id.viewAll);
-
inputTxt = (EditText) findViewById(R.id.txtInput);
-
// 初始化DB
-
db = new DBHelper(this);
-
// 初始化监听
-
OnClickListener listener = new OnClickListener() {
-
-
public void onClick(View v) {
-
if (v.getId() == R.id.btnAdd) {
-
// 增加
-
db.save(inputTxt.getText().toString());
-
db.close();
-
} else if (v.getId() == R.id.btnViewAll) {
-
// 浏览所有数据
-
Cursor cur = db.loadAll();
-
StringBuffer sf = new StringBuffer();
-
cur.moveToFirst();
-
while (!cur.isAfterLast()) {
-
sf.append(cur.getInt(0)).append(" : ").append(
-
cur.getString(1)).append("\n");
-
cur.moveToNext();
-
}
-
db.close();
-
viewAll.setText(sf.toString());
-
}
-
}
-
};
-
btnAdd.setOnClickListener(listener);
-
btnViewAll.setOnClickListener(listener);
-
}
-
-
}
-
package org.imti;
-
-
import android.content.Context;
-
import android.database.Cursor;
-
import android.database.sqlite.SQLiteDatabase;
-
import android.util.Log;
-
-
/**
-
* 数据库操作工具类
-
*
-
* @author daguangspecial@gmail.com
-
*
-
*/
-
public class DBHelper {
-
private static final String TAG = "DBDemo_DBHelper";// 调试标签
-
-
private static final String DATABASE_NAME = "dbdemo.db";// 数据库名
-
SQLiteDatabase db;
-
Context context;//应用环境上下文 Activity 是其子类
-
-
DBHelper(Context _context) {
-
context = _context;
-
//开启数据库
-
-
db = context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE,null);
-
CreateTable();
-
Log.v(TAG, "db path=" + db.getPath());
-
}
-
-
/**
-
* 建表
-
* 列名 区分大小写?
-
* 都有什么数据类型?
-
* SQLite 3
-
* TEXT 文本
-
NUMERIC 数值
-
INTEGER 整型
-
REAL 小数
-
NONE 无类型
-
* 查询可否发送select ?
-
*/
-
public void CreateTable() {
-
try {
-
db.execSQL("CREATE TABLE t_user (" +
-
"_ID INTEGER PRIMARY KEY autoincrement,"
-
+ "NAME TEXT"
-
+ ");");
-
Log.v(TAG, "Create Table t_user ok");
-
} catch (Exception e) {
-
Log.v(TAG, "Create Table t_user err,table exists.");
-
}
-
}
-
/**
-
* 增加数据
-
* @param id
-
* @param uname
-
* @return
-
*/
-
public boolean save(String uname){
-
String sql="";
-
try{
-
sql="insert into t_user values(null,'"+uname+"')";
-
db.execSQL(sql);
-
Log.v(TAG,"insert Table t_user ok");
-
return true;
-
-
}catch(Exception e){
-
Log.v(TAG,"insert Table t_user err ,sql: "+sql);
-
return false;
-
}
-
}
-
/**
-
* 查询所有记录
-
*
-
* @return Cursor 指向结果记录的指针,类似于JDBC 的 ResultSet
-
*/
-
public Cursor loadAll(){
-
-
Cursor cur=db.query("t_user", new String[]{"_ID","NAME"}, null,null, null, null, null);
-
-
return cur;
-
}
-
public void close(){
-
db.close();
-
}
-
}