android SqLite综述
背景
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(
StringDATABASE_NAME, int Context.MODE_PRIVATE,null);
StringDATABASE_NAME数据库的名字
IntMODE操作模式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方式
- packageorg.imti;
- importandroid.app.Activity;
- importandroid.database.Cursor;
- importandroid.os.Bundle;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- importandroid.widget.EditText;
- importandroid.widget.TextView;
- /**
- *SQLiteDemo
- *
- *供Activity私有访问的数据库没有使用ContentProvider方式增加查询数据
- *
- *@authordaguangspecial@gmail.com
- *
- */
- publicclassDbDemoextendsActivity{
- EditTextinputTxt;
- ButtonbtnAdd;
- ButtonbtnViewAll;
- TextViewviewAll;
- DBHelperdb;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- //TODOAuto-generatedmethodstub
- 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=newDBHelper(this);
- //初始化监听
- OnClickListenerlistener=newOnClickListener(){
- publicvoidonClick(Viewv){
- if(v.getId()==R.id.btnAdd){
- //增加
- db.save(inputTxt.getText().toString());
- db.close();
- }elseif(v.getId()==R.id.btnViewAll){
- //浏览所有数据
- Cursorcur=db.loadAll();
- StringBuffersf=newStringBuffer();
- 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);
- }
- }
- packageorg.imti;
- importandroid.content.Context;
- importandroid.database.Cursor;
- importandroid.database.sqlite.SQLiteDatabase;
- importandroid.util.Log;
- /**
- *数据库操作工具类
- *
- *@authordaguangspecial@gmail.com
- *
- */
- publicclassDBHelper{
- privatestaticfinalStringTAG="DBDemo_DBHelper";//调试标签
- privatestaticfinalStringDATABASE_NAME="dbdemo.db";//数据库名
- SQLiteDatabasedb;
- Contextcontext;//应用环境上下文Activity是其子类
- DBHelper(Context_context){
- context=_context;
- //开启数据库
- db=context.openOrCreateDatabase(DATABASE_NAME,Context.MODE_PRIVATE,null);
- CreateTable();
- Log.v(TAG,"dbpath="+db.getPath());
- }
- /**
- *建表
- *列名区分大小写?
- *都有什么数据类型?
- *SQLite3
- *TEXT文本
- NUMERIC数值
- INTEGER整型
- REAL小数
- NONE无类型
- *查询可否发送select?
- */
- publicvoidCreateTable(){
- try{
- db.execSQL("CREATETABLEt_user("+
- "_IDINTEGERPRIMARYKEYautoincrement,"
- +"NAMETEXT"
- +");");
- Log.v(TAG,"CreateTablet_userok");
- }catch(Exceptione){
- Log.v(TAG,"CreateTablet_usererr,tableexists.");
- }
- }
- /**
- *增加数据
- *@paramid
- *@paramuname
- *@return
- */
- publicbooleansave(Stringuname){
- Stringsql="";
- try{
- sql="insertintot_uservalues(null,'"+uname+"')";
- db.execSQL(sql);
- Log.v(TAG,"insertTablet_userok");
- returntrue;
- }catch(Exceptione){
- Log.v(TAG,"insertTablet_usererr,sql:"+sql);
- returnfalse;
- }
- }
- /**
- *查询所有记录
- *
- *@returnCursor指向结果记录的指针,类似于JDBC的ResultSet
- */
- publicCursorloadAll(){
- Cursorcur=db.query("t_user",newString[]{"_ID","NAME"},null,null,null,null,null);
- returncur;
- }
- publicvoidclose(){
- db.close();
- }
- }