973114 发表于 2016-11-29 09:39:20

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

[*]packageorg.imti;
[*]
[*]importandroid.app.Activity;
[*]importandroid.database.Cursor;
[*]importandroid.os.Bundle;
[*]importandroid.view.View;
[*]importandroid.view.View.OnClickListener;
[*]importandroid.widget.Button;
[*]importandroid.widget.EditText;
[*]importandroid.widget.TextView;
[*]
[*]/**
[*]*SQLiteDemo
[*]*
[*]*供Activity私有访问的数据库没有使用ContentProvider方式增加查询数据
[*]*
[*]*@authordaguangspecial@gmail.com
[*]*
[*]*/
[*]publicclassDbDemoextendsActivity{
[*]EditTextinputTxt;
[*]ButtonbtnAdd;
[*]ButtonbtnViewAll;
[*]TextViewviewAll;
[*]
[*]DBHelperdb;
[*]
[*]@Override
[*]protectedvoidonCreate(BundlesavedInstanceState){
[*]//TODOAuto-generatedmethodstub
[*]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=newDBHelper(this);
[*]//初始化监听
[*]OnClickListenerlistener=newOnClickListener(){
[*]
[*]publicvoidonClick(Viewv){
[*]if(v.getId()==R.id.btnAdd){
[*]//增加
[*]db.save(inputTxt.getText().toString());
[*]db.close();
[*]}elseif(v.getId()==R.id.btnViewAll){
[*]//浏览所有数据
[*]Cursorcur=db.loadAll();
[*]StringBuffersf=newStringBuffer();
[*]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);
[*]}
[*]
[*]}


[*]packageorg.imti;
[*]
[*]importandroid.content.Context;
[*]importandroid.database.Cursor;
[*]importandroid.database.sqlite.SQLiteDatabase;
[*]importandroid.util.Log;
[*]
[*]/**
[*]*数据库操作工具类
[*]*
[*]*@authordaguangspecial@gmail.com
[*]*
[*]*/
[*]publicclassDBHelper{
[*]privatestaticfinalStringTAG="DBDemo_DBHelper";//调试标签
[*]
[*]privatestaticfinalStringDATABASE_NAME="dbdemo.db";//数据库名
[*]SQLiteDatabasedb;
[*]Contextcontext;//应用环境上下文Activity是其子类
[*]
[*]DBHelper(Context_context){
[*]context=_context;
[*]//开启数据库
[*]
[*]db=context.openOrCreateDatabase(DATABASE_NAME,Context.MODE_PRIVATE,null);
[*]CreateTable();
[*]Log.v(TAG,"dbpath="+db.getPath());
[*]}
[*]
[*]/**
[*]*建表
[*]*列名区分大小写?
[*]*都有什么数据类型?
[*]*SQLite3
[*]*TEXT文本
[*]NUMERIC数值
[*]INTEGER整型
[*]REAL小数
[*]NONE无类型
[*]*查询可否发送select?
[*]*/
[*]publicvoidCreateTable(){
[*]try{
[*]db.execSQL("CREATETABLEt_user("+
[*]"_IDINTEGERPRIMARYKEYautoincrement,"
[*]+"NAMETEXT"
[*]+");");
[*]Log.v(TAG,"CreateTablet_userok");
[*]}catch(Exceptione){
[*]Log.v(TAG,"CreateTablet_usererr,tableexists.");
[*]}
[*]}
[*]/**
[*]*增加数据
[*]*@paramid
[*]*@paramuname
[*]*@return
[*]*/
[*]publicbooleansave(Stringuname){
[*]Stringsql="";
[*]try{
[*]sql="insertintot_uservalues(null,'"+uname+"')";
[*]db.execSQL(sql);
[*]Log.v(TAG,"insertTablet_userok");
[*]returntrue;
[*]
[*]}catch(Exceptione){
[*]Log.v(TAG,"insertTablet_usererr,sql:"+sql);
[*]returnfalse;
[*]}
[*]}
[*]/**
[*]*查询所有记录
[*]*
[*]*@returnCursor指向结果记录的指针,类似于JDBC的ResultSet
[*]*/
[*]publicCursorloadAll(){
[*]
[*]Cursorcur=db.query("t_user",newString[]{"_ID","NAME"},null,null,null,null,null);
[*]
[*]returncur;
[*]}
[*]publicvoidclose(){
[*]db.close();
[*]}
[*]}
页: [1]
查看完整版本: android sqlite基础入门