Android-SQLite3 超基础入门

背景

       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. }  
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);
	}

}
 

 

 

 

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. }  
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();
	}
}
 
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐