天天看点

Android-SQLite3 超基础入门

       sqlite 是一个非常流行的嵌入式数据库,它提供了一个清爽的 sql 接口,相当小的内存占用和高速的响应,更 happy 的是他还是免费的,大家都可以尽情的使用,很多牛叉的公司(诸如 adobe,apple,google,sun,symbian ),开源项目( mozilla,php,python )都在产品中装配 sqlite.

       android 中, sqlite 是被集成于 android runtime ,每个 android 应用程序都可以欢快的使用 sqlite 数据库,如果你熟悉 jdbc ,那么这个过程就更安逸了。

和传统关系数据库比较

有的:

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

调用

package com.demo.android.dummynote.tools;

import android.r;

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 [email protected]

*/

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

}

viewall.settext(sf.tostring());

};

btnadd.setonclicklistener(listener);

btnviewall.setonclicklistener(listener);

import android.content.context;

import android.database.sqlite.sqlitedatabase;

import android.util.log;

* 数据库操作工具类

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

* 建表 列名 区分大小写? 都有什么数据类型?<br>

* 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 = "";

sql = "insert into t_user values(null,'" + uname + "')";

db.execsql(sql);

log.v(tag, "insert table t_user ok");

return true;

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() {