Android-SQLite3 超基础入门

本文介绍了SQLite数据库在Android平台上的使用方法,包括数据库的创建、表结构的设计、数据的增删改查等基本操作,并通过一个示例项目详细展示了如何在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

       Enter

所有的数据库,SQLite以及其它,都被保存在设备如下目录里:

/data/data/package_name/databases".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 方式

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

 

转载至:http://hi.baidu.com/sunxiangwei/blog/item/90026b06030e2171020881d4.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值