灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3170回复:0

我的Android笔记(二)—— SQLite数据库的基本操作

楼主#
更多 发布于:2012-09-06 13:45


SQLite是Android使用的轻量级的数据库,开发Android应用是对数据库的操作自然是必不可少。
Android提供了一个SQLiteOpenHelper类来可以很方便的操作数据库

继承和扩展SQLiteOpenHelper类主要做的工作就是重写以下两个方法。
       onCreate: 当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行。
       onUpgrade:当打开数据库时传入的版本号与当前的版本号不同时会调用该方法。

下面是我写的一个SQLite基本操作的demo。

主要包含两个java类——
DBUtil类,继承自SQLiteOpenHelper,用以实现各种操作功能:

[java]
package barry.Android.db;

import Android.content.ContentValues;
import Android.content.Context;
import Android.database.Cursor;
import Android.database.sqlite.SQLiteDatabase;
import Android.database.sqlite.SQLiteOpenHelper;

public class DBUtil extends SQLiteOpenHelper {

    private final static String DATABASE_NAME = "db2004";
    private final static int DATABASE_VERSION = 1;
    private static final String TABLE_NAME ="students";
    private static final String FILED_1 = "name";
    private static final String FILED_2 = "password";

    public DBUtil(Context context){
        super(context, DATABASE_NAME,null,DATABASE_VERSION);
        System.out.println("new DBUtil");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE "+TABLE_NAME+" ( "+FILED_1 +" TEXT, "+ FILED_2 +" TEXT );";
        db.execSQL(sql);
        System.out.println("oncreate创建表");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        System.out.println("onUpgrade删除表");
        this.onCreate(db);
    }
    
    /**
     * 查询表中所有的数据
     * @return
     */
    public Cursor select(){
        return this.getReadableDatabase()
            .query(TABLE_NAME, null, null, null, null, null, null);      
    }

    /**
     * 插入一条数据到表中
     * @param name 字段一的值
     * @param password 字段二的值
     */
    public void insert(String name ,String password){
        ContentValues cv = new ContentValues();
        cv.put(FILED_1, name);
        cv.put(FILED_2, password);      
        this.getWritableDatabase().insert(TABLE_NAME, null, cv);
        this.getWritableDatabase().close();//关闭数据库对象  
    }    
    
    /**
     * 删除表中的若干条数据
     * @param name 一个包含所有要删除数据的"name"字段的数组
     */
    public void delete(String[] name){
        String where = FILED_1+" = ?";
        String[] whereValues = name;  
        this.getWritableDatabase().delete(TABLE_NAME, where, whereValues);
        this.getWritableDatabase().close();
    }
    
    /**
     * 更新表中的数据(修改字段二"password")
     * @param name 要更新的数据"name"字段值
     * @param newPassword 新的"password"字段
     */
    public void update(String name,String newPassword){      
        ContentValues cv = new ContentValues();
        cv.put(FILED_2, newPassword);        
        String where =FILED_1+" = ?";
        String[] whereValues= {name};        
        this.getWritableDatabase().update(TABLE_NAME, cv, where, whereValues);
        this.getWritableDatabase().close();
    }    
    
    /**
     * 清空表中的数据
     */
    public void clean (){
        this.getWritableDatabase().execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        System.out.println("clean删除表");
        this.onCreate(this.getWritableDatabase());
        this.getWritableDatabase().close();
    }
}
package barry.Android.db;
import Android.content.ContentValues;
import Android.content.Context;
import Android.database.Cursor;
import Android.database.sqlite.SQLiteDatabase;
import Android.database.sqlite.SQLiteOpenHelper;
public class DBUtil extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "db2004";
private final static int DATABASE_VERSION = 1;
private static final String TABLE_NAME ="students";
private static final String FILED_1 = "name";
private static final String FILED_2 = "password";
public DBUtil(Context context){
  super(context, DATABASE_NAME,null,DATABASE_VERSION);
  System.out.println("new DBUtil");
}
@Override
public void onCreate(SQLiteDatabase db) {
  String sql = "CREATE TABLE "+TABLE_NAME+" ( "+FILED_1 +" TEXT, "+ FILED_2 +" TEXT );";
  db.execSQL(sql);
  System.out.println("oncreate创建表");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
  System.out.println("onUpgrade删除表");
  this.onCreate(db);
}

/**
  * 查询表中所有的数据
  * @return
  */
public Cursor select(){
  return this.getReadableDatabase()
   .query(TABLE_NAME, null, null, null, null, null, null);  
}
/**
  * 插入一条数据到表中www.atcpu.com
  * @param name 字段一的值
  * @param password 字段二的值
  */
public void insert(String name ,String password){
  ContentValues cv = new ContentValues();
  cv.put(FILED_1, name);
  cv.put(FILED_2, password);  
  this.getWritableDatabase().insert(TABLE_NAME, null, cv);
  this.getWritableDatabase().close();//关闭数据库对象
}

/**
  * 删除表中的若干条数据
  * @param name 一个包含所有要删除数据的"name"字段的数组
  */
public void delete(String[] name){
  String where = FILED_1+" = ?";
  String[] whereValues = name;
  this.getWritableDatabase().delete(TABLE_NAME, where, whereValues);
  this.getWritableDatabase().close();
}

/**
  * 更新表中的数据(修改字段二"password")
  * @param name 要更新的数据"name"字段值
  * @param newPassword 新的"password"字段
  */
public void update(String name,String newPassword){  
  ContentValues cv = new ContentValues();
  cv.put(FILED_2, newPassword);  
  String where =FILED_1+" = ?";
  String[] whereValues= {name};  
  this.getWritableDatabase().update(TABLE_NAME, cv, where, whereValues);
  this.getWritableDatabase().close();
}

/**
  * 清空表中的数据
  */
public void clean (){
  this.getWritableDatabase().execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
  System.out.println("clean删除表");
  this.onCreate(this.getWritableDatabase());
  this.getWritableDatabase().close();
}
}

以及调用DBUtil的Activity:

[java]
package barry.Android.db;

import Android.app.Activity;
import Android.database.Cursor;
import Android.os.Bundle;

public class Demo04_helperActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        DBUtil dbUtil = new DBUtil(this);
        dbUtil.insert("周杰伦", "jaychou");
        dbUtil.insert("韩寒", "twocolds");
        dbUtil.insert("郭德纲", "yunhejiuxiao");        
        
        System.out.println("***********************************全部数据息");
        printData(dbUtil);        
        
        dbUtil.delete(new String[]{"周杰伦"});
        
        System.out.println("***********************************删除'周杰伦'之后数据");
        printData(dbUtil);  
        
        dbUtil.update("郭德纲", "longtengsihai");;
        System.out.println("***********************************修改‘郭德纲’的密码为'longtengsihai'");
        printData(dbUtil);  
        
        dbUtil.clean();
        
    }

    private void printData(DBUtil dbUtil) {
        Cursor cursor = dbUtil.select();        
        if(cursor.moveToFirst()){
            System.out.println("当前表中的数据条数:"+cursor.getCount());
            do{
                System.out.println(cursor.getString(0)+cursor.getString(1));                
            }while(cursor.moveToNext());
        }
        cursor.close();
    }
}
package barry.Android.db;
import Android.app.Activity;
import Android.database.Cursor;
import Android.os.Bundle;
public class Demo04_helperActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
      
      
        DBUtil dbUtil = new DBUtil(this);
        dbUtil.insert("周杰伦", "jaychou");
        dbUtil.insert("韩寒", "twocolds");
        dbUtil.insert("郭德纲", "yunhejiuxiao");      
      
        System.out.println("***********************************全部数据息");
        printData(dbUtil);      
      
        dbUtil.delete(new String[]{"周杰伦"});
      
        System.out.println("***********************************删除'周杰伦'之后数据");
        printData(dbUtil);
      
        dbUtil.update("郭德纲", "longtengsihai");;
        System.out.println("***********************************修改‘郭德纲’的密码为'longtengsihai'");
        printData(dbUtil);
      
        dbUtil.clean();
      
    }
private void printData(DBUtil dbUtil) {
  Cursor cursor = dbUtil.select();      
  if(cursor.moveToFirst()){
   System.out.println("当前表中的数据条数:"+cursor.getCount());
   do{
    System.out.println(cursor.getString(0)+cursor.getString(1));    
   }while(cursor.moveToNext());
  }
  cursor.close();
}
}
该程序所执行的操作为:
1.在创建一个名为"db2004"的数据库,(即DBUtil的“DATABASE_NAME”字段)。
2.当数据库被首次创建时执行DBUtil的onCreate方法,创建一张名为students的表,包含两个字段(name,password)。(即DBUtil的”TABLE_NAME、FILED_1、FILED_2”字段)。
3.往数据库中插入三条数据“周杰伦、韩寒、郭德纲”。然后.查询出表中所有数据并打印。
4.删除数据“周杰伦”。然后.查询出表中所有数据并打印。
5.将数据“郭德纲”的password修改为"longtengsihai"。然后.查询出表中所有数据并打印。
6.清除表中的所有数据,程序结束。
执行的结果为:
02-07 11:22:47.361: I/System.out(962): new DBUtil
02-07 11:22:47.490: I/System.out(962): ***********************************全部数据息
02-07 11:22:47.490: I/System.out(962): 当前表中的数据条数:3
02-07 11:22:47.500: I/System.out(962): 周杰伦jaychou
02-07 11:22:47.500: I/System.out(962): 韩寒twocolds
02-07 11:22:47.500: I/System.out(962): 郭德纲yunhejiuxiao
02-07 11:22:47.511: I/System.out(962): ***********************************删除'周杰伦'之后数据
02-07 11:22:47.540: I/System.out(962): 当前表中的数据条数:2
02-07 11:22:47.540: I/System.out(962): 韩寒twocolds
02-07 11:22:47.550: I/System.out(962): 郭德纲yunhejiuxiao
02-07 11:22:47.560: I/System.out(962): ***********************************修改‘郭德纲’的密码为'longtengsihai'
02-07 11:22:47.590: I/System.out(962): 当前表中的数据条数:2
02-07 11:22:47.590: I/System.out(962): 韩寒twocolds
02-07 11:22:47.590: I/System.out(962): 郭德纲longtengsihai
02-07 11:22:47.601: I/System.out(962): clean删除表
02-07 11:22:47.610: I/System.out(962): oncreate创建表

结果正确。


喜欢0 评分0
游客

返回顶部