用Java语言来进行数据库的创建以及增删改查

1.首先是创建一个继承sqliteopenhelper类来创建数据库或者更新数据库,创建数据库在onCreate(SQLiteDatabase db)方法中,更新数据库在

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法中。
 1 package com.bwf.a10_sql_02.db;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 6 import android.database.sqlite.SQLiteOpenHelper;
 7 
 8 /**
 9  * 此助手类主要帮助我们完成数据库的创建、表格的创建、及数据库升级的功能
10  * */
11 public class DBHelper extends SQLiteOpenHelper{
12     /**
13      * 构造方法:
14      * @param Context context        上下文对象
15      * @param String name            指定数据库名
16      * @param CursorFactory factory    游标工厂,如果使用默认Cursor取数据,传null即可
17      * @param int version            数据库版本号
18      * */
19     public DBHelper(Context context, String name, CursorFactory factory,
20             int version) {
21         super(context, name, factory, version);
22     }
23 
24     /**
25      * 数据库第一次创建时会调用,一般在其中创建数据库表
26      * @param SQLiteDatabase db            数据库操作对象,封装了Sqlite中常用的增删改查等方法
27      * */
28     @Override
29     public void onCreate(SQLiteDatabase db) {
30         // 定义一个创建表格的SQL语句
31         String sql = "CREATE TABLE stu(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
32                 "name VARCHAR(5), age INTEGER)";
33         // 执行上述SQL语句来创建表格
34         db.execSQL(sql);
35     }
36 
37     /**
38      * 数据库升级时用到,常在里边完成数据库表格的修改或者增加
39      * 在创建SQLiteOpenHelper时,会传入该数据库的版本,
40      * 如果传入的数据库版本号比数据库文件中存储的版本号大的话,
41      * 则系统会自动调用该方法来完成数据库升级
42      * 
43      * @param SQLiteDatabase db         数据库操作类对象
44      * @param int oldVersion            老的数据库版本号
45      * @param int newVersion            新的数据库版本号
46      * */
47     @Override
48     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
49         // TODO Auto-generated method stub
50         
51     }
52 
53 }

2. 创建一个类来进行数据库建表和数据的增删改查

package com.bwf.a10_sql_02.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

/**
 * 使用该类来封装增删改查等数据库操作的方法,方便使用
 * @author         fanhy
 * @since        2015-09-22
 * @version        1.0.0
 * */
public class DBOPeration {
    SQLiteDatabase sd;
    
    public DBOPeration(Context context) {
        super();
        
        // 得到DBHelper对象,通过它去打开数据库
        DBHelper dbHelper = new DBHelper(context, "Stu.db", null, 1);
        // 初始化SQLiteDatabase
        /**
         * 两种方式打开数据库:
         * 内存充裕时,两种方式打开数据库的效果是一样的,都是可以读写的
         * 当内存较低没有可写空间时:
         * getReadableDatabase:以可读形式打开
         * getWritableDatabase:以可写方式打开失败并抛出异常
         * */
        sd = dbHelper.getReadableDatabase();
        //sd = dbHelper.getWritableDatabase();
    }
    
    /**
     * 插入一条数据
     * @param String name         学生姓名
     * @param int age            学生年龄
     * 
     * */
    public void insert(String name, int age){
        // 首先定义出要执行的数据库语句
        //String insertStr = "INSERT INTO stu (name, age) values ("+name+","+age+")";
        // 执行该SQL语句
        //sd.execSQL(insertStr);
        
        // 内部通过一个HashMap来实现的
        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("age", age);
        
        /**
         * @param String table                表名
         * @param String nullColumnHack        缺省(ContentValues)指定哪一列值为NULL
         * @param ContentValues values        要插入的数据封装到该容器中
         * */
        sd.insert("stu", "name", values);
    }
    
    /**
     * 删除所有数据
     * */
    public void deleteAll(){
        // 定义数据库语句
        //String deleteAllStr = "delete from stu";
        //sd.execSQL(deleteAllStr);
        
        /**
         * @param String table            表名
         * @param String whereClause    删除的条件,传null代表全部删除
         * @param String[] whereArgs    当删除条件都有不确定值时,在该参数中使用变量代替,不需要则传null
         * */
        sd.delete("stu", null, null);
    }
    
    /**
     * 根据年龄范围来删除
     * */
    public void deleteByAgeRange(int from, int to){
        /**
         * @param String table            表名
         * @param String whereClause    删除的条件,传null代表全部删除
         * @param String[] whereArgs    当删除条件都有不确定值时,在该参数中使用变量代替,不需要则传null
         * */
        String whereClause = "age > ? and age < ?";
        String[] whereArgs = new String[]{from + "", to + ""};
        sd.delete("stu", whereClause, whereArgs);
    }
    
    /**
     * 修改指定名字同学的年龄
     * @param String nameCondition          更新条件
     * @param int newAge                    更新后的年龄
     * */
    public void updateData(String nameCondition, int newAge){
        //String sqlUpdate = "update stu set age = "+age+" where name = '" + nameCondition +"'";
        //sd.execSQL(sqlUpdate);
        
        /**
         * @param String table                表名
         * @param ContentValues values        要更新的数据封装到该容器中
         * @param String whereClause        更新的条件,如果填null则表示无条件修改,即修改全部内容
         * @param String[] whereArgs        更新条件中含未知内容?部分使用该参数来填充,不需要则填null
         * 
         * */
        
        ContentValues values = new ContentValues();
        values.put("name", nameCondition);
        values.put("age", newAge);
        String whereClause = "name = ?";
        String[] whereArgs = {nameCondition};
        sd.update("stu", values, whereClause, whereArgs);
    }
    
    /**
     * 查询所有数据
     * */
    public Cursor searchAll(){
        Cursor cursor;
        //String sqlSelect = "select * from stu";
        //cursor = sd.rawQuery(sqlSelect, null);
        /**
         * @param String table                    表名
         * @param String[] columns                要返回的字段(列),如果需要返回所有字段,则传null即可
         * @param String selection                查询的条件,有不确定的部分用?占位,如果要查询全部则传null即可
         * @param String[] selectionArgs        查询中用?占位的部分,使用此参数进行填充,不需要则传null即可
         * @param String groupBy                分组条件,按照某字段或某几个字段进行分组,不需要则传null即可
         * @param String having                    配合分组使用可以带条件,不需要则传null
         * @param String orderBy                排序条件,可以按照某个或某些字段分别做升序或者降序排列,不需要则传null
         * */
        cursor = sd.query("stu", null, null, null, null, null, null);
        return cursor;
    }
    
    /**
     * 按照年龄范围查询,结果按年龄升序排列
     * */
    public Cursor searchByAgeRange(int from, int to){
        Cursor cursor;
        
        /**
         * @param String table                    表名
         * @param String[] columns                要返回的字段(列),如果需要返回所有字段,则传null即可
         * @param String selection                查询的条件,有不确定的部分用?占位,如果要查询全部则传null即可
         * @param String[] selectionArgs        查询中用?占位的部分,使用此参数进行填充,不需要则传null即可
         * @param String groupBy                分组条件,按照某字段或某几个字段进行分组,不需要则传null即可
         * @param String having                    配合分组使用可以带条件,不需要则传null
         * @param String orderBy                排序条件,可以按照某个或某些字段分别做升序或者降序排列,不需要则传null
         * */
        
        String selection = "age > ? and age < ?";
        String[] selectionArgs = {from + "", to + ""};
        String orderBy = "age asc";
        cursor = sd.query("stu", null, selection, selectionArgs, null, null, orderBy);
        return cursor;
    }
    
    /**
     * 根据关键字进行模糊查询,结果按年龄降序排列
     * @param String key         查询的关键字
     * */
    public Cursor searchByKey(String key){
        Cursor cursor;
        
        /**
         * @param String table                    表名
         * @param String[] columns                要返回的字段(列),如果需要返回所有字段,则传null即可
         * @param String selection                查询的条件,有不确定的部分用?占位,如果要查询全部则传null即可
         * @param String[] selectionArgs        查询中用?占位的部分,使用此参数进行填充,不需要则传null即可
         * @param String groupBy                分组条件,按照某字段或某几个字段进行分组,不需要则传null即可
         * @param String having                    配合分组使用可以带条件,不需要则传null
         * @param String orderBy                排序条件,可以按照某个或某些字段分别做升序或者降序排列,不需要则传null
         * */
        
        String selection = "name like '%" + key +"%'";
        String orderBy = "age desc";
        cursor = sd.query("stu", null, selection, null, null, null, orderBy);
        return cursor;
    }
    
}

 

posted on 2015-09-24 16:08  敬的男人  阅读(951)  评论(0)    收藏  举报