用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; } }
浙公网安备 33010602011771号