Android-SQLite3 超基础入门

来源:互联网 发布:ubuntu安装主题包 编辑:程序博客网 时间:2024/05/17 14:27

背景

       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 方式

      

 

Java代码 
  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. }  
 

 

 

 

Java代码 
  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,nullnullnullnull);  
  80.           
  81.         return cur;  
  82.     }  
  83.       public void close(){  
  84.         db.close();  
  85.     }  
  86. }  
 

 

附截图

原创粉丝点击