安卓sqlite之增删改查(一)


  分类:

在安卓开发中不可避免的会遇到在手机中保存数据的时候,如果只是小量数据(如保存设置等)的话,用SharedPreferences是个极好的选择,它以键值对的形式保存数据,但是如果数据量比较多的话,比如一个键对应了一个集合的情况,此时再用SharedPreferences保存数据就显得吃力了,如果再需要对数据进行修改删除的操作,这个保存数据的方法明显不适合了,所以安卓本身也内置了sqlite数据库,对于保存app里面的数据已经够了。

新建安卓工程后新建一个类:DatabaseDBOpenHelper.java,该类继承自SQLiteOpenHelper,主要用于新建数据库,新建数据表和更新数据库:

[java]  view plain  copy
  1. public class DatabaseDBOpenHelper extends SQLiteOpenHelper {  
  2.   
  3.     /** 
  4.      * 数据库创建的构造方法  数据库名称  text.db ,版本号为1 
  5.      * @param context 
  6.      */  
  7.     public DatabaseDBOpenHelper(Context context) {  
  8.         super(context, "text.db"null1);  
  9.     }  
  10.   
  11.     /** 
  12.      * 初始化数据库的表结构 
  13.      */  
  14.     @Override  
  15.     public void onCreate(SQLiteDatabase db) {  
  16.         db.execSQL("create table student (id integer primary key autoincrement,name varchar(50),age integer,sex varchar(5),class varchar(50))");  
  17.     }  
  18.   
  19.     /** 
  20.      * 数据库版本升级时调用 
  21.      */  
  22.     @Override  
  23.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  24.           
  25.     }  
  26. }  
改类中的构造方法用于创建数据库和初始版本号;onCreate方法用于初始化数据库的表结构,这里新建了一个student表,里面有id(主键),name,age,sex和class; onUpgrade方法用于数据库版本升级时调用,此时可以用测试类去测试一下看看新建语法有没有问题,看看有没有新建数据库:在清单文件中application节点上方添加四行代码(第三行要写自己应用的包名)
[html]  view plain  copy
  1. <instrumentation  
  2.        android:name="android.test.InstrumentationTestRunner"  
  3.        android:targetPackage="com.example.testsqlite" >  
  4.    </instrumentation>  
然后在application节点中的theme下面添加一行代码:<uses-library android:name="android.test.runner" />,接着新建测试类Testsqlite继承自AndroidTestCase,最后编写测试代码就可以了:
[java]  view plain  copy
  1. public void testCreateDatabase() {  
  2.         DatabaseDao dao = new DatabaseDao(getContext());  
  3.     }  
右键运行该测试方法,如果在左边的工具栏中JUnit下面的条变绿就表示新建数据库成功了,此时在File Explorer 的data/data/包名  目录下就可以看到新建成功的数据库和表结构,可以导出来用SQLite Expert Personal 3工具打开,没安装该工具的可以下载,简单安装即可使用非常方便: 点击打开链接

接下来就是增加,删除,修改,查找数据了,在SQLite Expert Personal 3工具里也可以先执行sqlite指令对表数据进行操作,其实在把指令写进代码之前可以先用该工具执行需要进行的指令以验证sqlite语句是否正确。

OK,现在用Java代码实现增删改查方法:

[java]  view plain  copy
  1.  * 向数据库中添加数据  
  2.  * @param name  
  3.  * @param age  
  4.  * @param sex  
  5.  * @param whichclass  
  6.  */  
  7. public void addStudent(String name, int age, String sex, String whichclass){  
  8.     SQLiteDatabase db = helper.getWritableDatabase();  
  9.     db.execSQL("insert into student(name,age,sex,class) values(?,?,?,?)",  
  10.             new Object[]{name, age, sex, whichclass});  
  11. }  
[java]  view plain  copy
  1. /** 
  2.      * 根据name值删除数据 
  3.      * @param name 
  4.      */  
  5.     public void deleteStudent(String name){  
  6.         SQLiteDatabase db = helper.getWritableDatabase();  
  7.         db.execSQL("delete from student where name=?",new Object[]{name});  
  8.     }  
[java]  view plain  copy
  1. /** 
  2.      * 根据name值修改表中数据 
  3.      * @param name 
  4.      * @param age 
  5.      * @param sex 
  6.      * @param whichclass 
  7.      */  
  8.     public void updateStudent(String name, int age, String sex, String whichclass){  
  9.         SQLiteDatabase db = helper.getWritableDatabase();  
  10.         db.execSQL("update student set age=?, sex=?,class=? where name=?",   
  11.                 new Object[]{age, sex, whichclass, name});  
  12.     }  
[java]  view plain  copy
  1. /** 
  2.      * 根据name值查询数据 
  3.      * @param name 
  4.      * @return 
  5.      */  
  6.     public StudentInfo findStudent(String name){  
  7.         SQLiteDatabase db = helper.getWritableDatabase();  
  8.         Cursor cursor = db.rawQuery("select age,sex,class from student where name=?",  
  9.                 new String[]{name});  
  10.         if(cursor.moveToNext()){  
  11.             StudentInfo info = new StudentInfo();  
  12.             info.setAge(cursor.getInt(0));  
  13.             info.setSex(cursor.getString(1));  
  14.             info.setWhichclass(cursor.getString(2));  
  15.             return info;  
  16.         }  
  17.         cursor.close();  
  18.         return null;  
  19.     }  
[java]  view plain  copy
  1. /** 
  2.      * 查询全部数据 
  3.      * @return 
  4.      */  
  5.     public ArrayList<StudentInfo> findAllstudent(){  
  6.         SQLiteDatabase db = helper.getWritableDatabase();  
  7.         ArrayList<StudentInfo> list = new ArrayList<StudentInfo>();  
  8.         Cursor cursor = db.rawQuery("select * from student",null);  
  9.         for (int i = 0; i < cursor.getCount(); i++) {  
  10.             cursor.moveToNext();  
  11.             StudentInfo info = new StudentInfo();  
  12.             info.setName(cursor.getString(1));  
  13.             info.setAge(cursor.getInt(2));  
  14.             info.setSex(cursor.getString(3));  
  15.             info.setWhichclass(cursor.getString(4));  
  16.             list.add(info);  
  17.         }  
  18.         cursor.close();  
  19.         db.close();  
  20.         return list;  
  21.     }  
[java]  view plain  copy
  1. /** 
  2.      * 获取记录总数 
  3.      * @return 
  4.      */  
  5.     public long getCounts(){  
  6.         SQLiteDatabase db = helper.getWritableDatabase();  
  7.         Cursor cursor = db.query("student",new String[]{"count(*)"},null,null,null,null,null);  
  8.         if(cursor.moveToNext()){  
  9.             return cursor.getLong(0);  
  10.         }  
  11.         return 0;  
  12.     }  

其实安卓除了使用rawQuery()和execSQL()方法操作数据外还有另外一种API可以对数据进行增删改查:

[java]  view plain  copy
  1.  * 向数据库中添加数据(另一种方法实现)  
  2.  * @param name  
  3.  * @param age  
  4.  * @param sex  
  5.  * @param whichclass  
  6.  */  
  7. public void addStudent1(String name, int age, String sex, String whichclass){  
  8.     SQLiteDatabase db = helper.getWritableDatabase();  
  9.     ContentValues values = new ContentValues();  
  10.     values.put("name", name);  
  11.     values.put("age", age);  
  12.     values.put("sex", sex);  
  13.     values.put("class", whichclass);  
  14.     db.insert("student"null, values);  
  15.     db.close();  
  16. }  
[java]  view plain  copy
  1. /** 
  2.      * 根据name值删除数据(另一种实现方法) 
  3.      * @param name 
  4.      */  
  5.     public void deleteStudent1(String name){  
  6.         SQLiteDatabase db = helper.getWritableDatabase();  
  7.         db.delete("student""name=?"new String[]{name});  
  8.     }  
[java]  view plain  copy
  1. /** 
  2.      * 根据name值修改表中数据(另一种方法实现) 
  3.      * @param name 
  4.      * @param age 
  5.      * @param sex 
  6.      * @param whichclass 
  7.      */  
  8.     public void updateStudent1(String name, int age, String sex, String whichclass){  
  9.         SQLiteDatabase db = helper.getWritableDatabase();  
  10.         ContentValues values = new ContentValues();  
  11.         values.put("age", age);  
  12.         values.put("sex", sex);  
  13.         values.put("class", whichclass);  
  14.         db.update("student", values, "name=?"new String[]{name});  
  15.     }  
[java]  view plain  copy
  1. /** 
  2.      * 根据name值查询数据(另一种查询方法) 
  3.      * @param name 
  4.      * @return 
  5.      */  
  6.     public StudentInfo findStudent1(String name){  
  7.         SQLiteDatabase db = helper.getWritableDatabase();  
  8.         Cursor cursor = db.query("student"new String[]{"name","age","sex","class"},  
  9.                 "name=?"new String[]{name},nullnullnull);  
  10.         if(cursor.moveToNext()){  
  11.             StudentInfo info = new StudentInfo();  
  12.             info.setName(cursor.getString(0));  
  13.             info.setAge(cursor.getInt(1));  
  14.             info.setSex(cursor.getString(2));  
  15.             info.setWhichclass(cursor.getString(3));  
  16.             return info;  
  17.         }  
  18.         cursor.close();  
  19.         return null;  
  20.     }  
剩下的就是在测试类中写测试代码来测试每个方法了,我已经将这些例子写成demo了,有兴趣的朋友可以下载看看共同学习进步,demo下载: 点击打开下载demo
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值