Android-SQLite3 超基础入门 .转

转自  http://tuesdayhoho.javaeye.com/blog/415471  或 http://www.gker.net/android/201003/t20100302_94800.html

背景

       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');

 

API 方式

  

代码
1 package org.imti;
2
3 import android.app.Activity;
4 import android.database.Cursor;
5 import android.os.Bundle;
6 import android.view.View;
7 import android.view.View.OnClickListener;
8 import android.widget.Button;
9 import android.widget.EditText;
10 import android.widget.TextView;
11
12 /**
13 * SQLite Demo
14 *
15 * 供Activity私有访问的数据库 没有使用ContentProvider 方式 增加 查询数据
16 *
17 * @author daguangspecial@gmail.com
18 *
19 */
20 public class DbDemo extends Activity {
21 EditText inputTxt;
22 Button btnAdd;
23 Button btnViewAll;
24 TextView viewAll;
25
26 DBHelper db;
27
28 @Override
29 protected void onCreate(Bundle savedInstanceState) {
30 // TODO Auto-generated method stub
31 super.onCreate(savedInstanceState);
32 this.setContentView(R.layout.dbdemo);
33 // 初始化UI
34 btnAdd = (Button) findViewById(R.id.btnAdd);
35 btnViewAll = (Button) findViewById(R.id.btnViewAll);
36 viewAll = (TextView) findViewById(R.id.viewAll);
37 inputTxt = (EditText) findViewById(R.id.txtInput);
38 // 初始化DB
39 db = new DBHelper(this);
40 // 初始化监听
41 OnClickListener listener = new OnClickListener() {
42
43 public void onClick(View v) {
44 if (v.getId() == R.id.btnAdd) {
45 // 增加
46 db.save(inputTxt.getText().toString());
47 db.close();
48 } else if (v.getId() == R.id.btnViewAll) {
49 // 浏览所有数据
50 Cursor cur = db.loadAll();
51 StringBuffer sf = new StringBuffer();
52 cur.moveToFirst();
53 while (!cur.isAfterLast()) {
54 sf.append(cur.getInt(0)).append(" : ").append(
55 cur.getString(1)).append("\n");
56 cur.moveToNext();
57 }
58 db.close();
59 viewAll.setText(sf.toString());
60 }
61 }
62 };
63 btnAdd.setOnClickListener(listener);
64 btnViewAll.setOnClickListener(listener);
65 }
66
67 }

 

 

 

代码
1 package org.imti;
2
3 import android.content.Context;
4 import android.database.Cursor;
5 import android.database.sqlite.SQLiteDatabase;
6 import android.util.Log;
7
8 /**
9 * 数据库操作工具类
10 *
11 * @author daguangspecial@gmail.com
12 *
13 */
14 public class DBHelper {
15 private static final String TAG = "DBDemo_DBHelper";// 调试标签
16
17 private static final String DATABASE_NAME = "dbdemo.db";// 数据库名
18 SQLiteDatabase db;
19 Context context;//应用环境上下文 Activity 是其子类
20
21 DBHelper(Context _context) {
22 context = _context;
23 //开启数据库
24
25 db = context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE,null);
26 CreateTable();
27 Log.v(TAG, "db path=" + db.getPath());
28 }
29
30 /**
31 * 建表
32 * 列名 区分大小写?
33 * 都有什么数据类型?
34 * SQLite 3
35 * TEXT 文本
36 NUMERIC 数值
37 INTEGER 整型
38 REAL 小数
39 NONE 无类型
40 * 查询可否发送select ?
41 */
42 public void CreateTable() {
43 try {
44 db.execSQL("CREATE TABLE t_user (" +
45 "_ID INTEGER PRIMARY KEY autoincrement,"
46 + "NAME TEXT"
47 + ");");
48 Log.v(TAG, "Create Table t_user ok");
49 } catch (Exception e) {
50 Log.v(TAG, "Create Table t_user err,table exists.");
51 }
52 }
53 /**
54 * 增加数据
55 * @param id
56 * @param uname
57 * @return
58 */
59 public boolean save(String uname){
60 String sql="";
61 try{
62 sql="insert into t_user values(null,'"+uname+"')";
63 db.execSQL(sql);
64 Log.v(TAG,"insert Table t_user ok");
65 return true;
66
67 }catch(Exception e){
68 Log.v(TAG,"insert Table t_user err ,sql: "+sql);
69 return false;
70 }
71 }
72 /**
73 * 查询所有记录
74 *
75 * @return Cursor 指向结果记录的指针,类似于JDBC 的 ResultSet
76 */
77 public Cursor loadAll(){
78
79 Cursor cur=db.query("t_user", new String[]{"_ID","NAME"}, null,null, null, null, null);
80
81 return cur;
82 }
83 public void close(){
84 db.close();
85 }
86 }

 

 

附截图

posted on 2010-06-30 18:29  boby house  阅读(199)  评论(0编辑  收藏  举报