您的位置:首页 > 数据库

SQLite基本操作

2015-11-26 09:48 429 查看
SQLite是Android使用的轻量级的数据库,开发Android应用是对数据库的操作自然是必不可少。

Android提供了一个SQLiteOpenHelper类来可以很方便的操作数据库,

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

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

主要包含两个java类——

DBUtil类,继承自SQLiteOpenHelper,用以实现各种操作功能:

[java] view
plaincopyprint?

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

    }  

}  

以及调用DBUtil的Activity:

[java] view
plaincopyprint?

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创建表

结果正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: