SQLite是Android使用的轻量级的数据库,开发Android应用是对数据库的操作自然是必不可少。

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

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

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

主要包含两个java类——

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

  1. package barry.android.db;
  2.  
  3. import android.content.ContentValues;
  4. import android.content.Context;
  5. import android.database.Cursor;
  6. import android.database.sqlite.SQLiteDatabase;
  7. import android.database.sqlite.SQLiteOpenHelper;
  8.  
  9. public class DBUtil extends SQLiteOpenHelper {
  10.  
  11. private final static String DATABASE_NAME = "db2004";
  12. private final static int DATABASE_VERSION = 1;
  13. private static final String TABLE_NAME ="students";
  14. private static final String FILED_1 = "name";
  15. private static final String FILED_2 = "password";
  16.  
  17. public DBUtil(Context context){
  18. super(context, DATABASE_NAME,null,DATABASE_VERSION);
  19. System.out.println("new DBUtil");
  20. }
  21.  
  22. @Override
  23. public void onCreate(SQLiteDatabase db) {
  24. String sql = "CREATE TABLE "+TABLE_NAME+" ( "+FILED_1 +" TEXT, "+ FILED_2 +" TEXT );";
  25. db.execSQL(sql);
  26. System.out.println("oncreate创建表");
  27. }
  28.  
  29. @Override
  30. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  31. db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
  32. System.out.println("onUpgrade删除表");
  33. this.onCreate(db);
  34. }
  35.  
  36. /**
  37. * 查询表中所有的数据
  38. * @return
  39. */
  40. public Cursor select(){
  41. return this.getReadableDatabase()
  42. .query(TABLE_NAME, null, null, null, null, null, null);
  43. }
  44.  
  45. /**
  46. * 插入一条数据到表中
  47. * @param name 字段一的值
  48. * @param password 字段二的值
  49. */
  50. public void insert(String name ,String password){
  51. ContentValues cv = new ContentValues();
  52. cv.put(FILED_1, name);
  53. cv.put(FILED_2, password);
  54. this.getWritableDatabase().insert(TABLE_NAME, null, cv);
  55. this.getWritableDatabase().close();//关闭数据库对象
  56. }
  57.  
  58. /**
  59. * 删除表中的若干条数据
  60. * @param name 一个包含所有要删除数据的"name"字段的数组
  61. */
  62. public void delete(String[] name){
  63. String where = FILED_1+" = ?";
  64. String[] whereValues = name;
  65. this.getWritableDatabase().delete(TABLE_NAME, where, whereValues);
  66. this.getWritableDatabase().close();
  67. }
  68.  
  69. /**
  70. * 更新表中的数据(修改字段二"password")
  71. * @param name 要更新的数据"name"字段值
  72. * @param newPassword 新的"password"字段
  73. */
  74. public void update(String name,String newPassword){
  75. ContentValues cv = new ContentValues();
  76. cv.put(FILED_2, newPassword);
  77. String where =FILED_1+" = ?";
  78. String[] whereValues= {name};
  79. this.getWritableDatabase().update(TABLE_NAME, cv, where, whereValues);
  80. this.getWritableDatabase().close();
  81. }
  82.  
  83. /**
  84. * 清空表中的数据
  85. */
  86. public void clean (){
  87. this.getWritableDatabase().execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
  88. System.out.println("clean删除表");
  89. this.onCreate(this.getWritableDatabase());
  90. this.getWritableDatabase().close();
  91. }
  92. }

以及调用DBUtil的Activity:

  1. package barry.android.db;
  2.  
  3. import android.app.Activity;
  4. import android.database.Cursor;
  5. import android.os.Bundle;
  6.  
  7. public class Demo04_helperActivity extends Activity {
  8. /** Called when the activity is first created. */
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.main);
  13.  
  14. DBUtil dbUtil = new DBUtil(this);
  15. dbUtil.insert("周杰伦", "jaychou");
  16. dbUtil.insert("韩寒", "twocolds");
  17. dbUtil.insert("郭德纲", "yunhejiuxiao");
  18.  
  19. System.out.println("***********************************全部数据息");
  20. printData(dbUtil);
  21.  
  22. dbUtil.delete(new String[]{"周杰伦"});
  23.  
  24. System.out.println("***********************************删除'周杰伦'之后数据");
  25. printData(dbUtil);
  26.  
  27. dbUtil.update("郭德纲", "longtengsihai");;
  28. System.out.println("***********************************修改‘郭德纲’的密码为'longtengsihai'");
  29. printData(dbUtil);
  30.  
  31. dbUtil.clean();
  32.  
  33. }
  34.  
  35. private void printData(DBUtil dbUtil) {
  36. Cursor cursor = dbUtil.select();
  37. if(cursor.moveToFirst()){
  38. System.out.println("当前表中的数据条数:"+cursor.getCount());
  39. do{
  40. System.out.println(cursor.getString(0)+cursor.getString(1));
  41. }while(cursor.moveToNext());
  42. }
  43. cursor.close();
  44. }
  45. }

该程序所执行的操作为:

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

结果正确。

android SQLite数据库的基本操作的更多相关文章

  1. Android——SQLite/数据库 相关知识总结贴

    android SQLite简介 http://www.apkbus.com/android-1780-1-1.html Android SQLite基础 http://www.apkbus.com/ ...

  2. Android Sqlite 数据库版本更新

      Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...

  3. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  4. Android sqlite数据库存取图片信息

    Android sqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.get ...

  5. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  6. 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持

    IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...

  7. [Android] SQLite数据库之增删改查基础操作

        在编程中常常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,可以支持Windows/Linux/Un ...

  8. Android Sqlite数据库加密

    Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...

  9. Android SQLite数据库使用

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...

随机推荐

  1. Linux.Centos.yum命令的“No module named yum”错误

    Centos版本: uname -a Linux ygpiao -.el6.x86_64 # SMP Tue Jun :: UTC x86_64 x86_64 x86_64 GNU/Linux 在一次 ...

  2. 分布式队列ZooKeeper的实现

    一.背景 有一些时候,多个团队需要共同完成一个任务,比如,A团队将Hadoop集群计算的结果交给B团队继续计算,B完成了自己任务再交给C团队继续做.这就有点像业务系统的工作流一样,一环一环地传下 去, ...

  3. 构造函数与getter和setter的区别

    构造函数是用于初始化类的属性,且只有在创建对象时才会调用构造函数,用于给对象分配地址 无参的构造函数,创建对象时默认调用,当程序没有明确写出有参的构造函数,系统会默认的创建一个. 有参的构造函数,创建 ...

  4. 利用Delphi编写IE扩展

    就是如何使IE扩展组件可以响应事件.    在自己的程序中使用过WebBrowser控件的朋友都知道,WebBrowser控件定义了诸如BeforeNavigate.DownloadComplete ...

  5. 【linux】linux修改open file 大小

    使用下面命令可以查看openfile数量 ulimit -a linux修改open file 大小,修改步骤如下: 1>修改file-max 修改文件: vi /etc/sysctl.conf ...

  6. Web App 和 Native App,哪个是趋势?

    一.Web App vs. Native App 比起手机App,网站有一些明显的优点. 跨平台:所有系统都能运行 免安装:打开浏览器,就能使用 快速部署:升级只需在服务器更新代码 超链接:可以与其他 ...

  7. Knockout.Js官网学习(Mapping插件)

    前言 Knockout设计成允许你使用任何JavaScript对象作为view model.必须view model的一些属性是observable的,你可以使用KO绑定他们到你的UI元素上,当这些o ...

  8. 阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结

    2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker(Bugly sdk也集成Tikner ...

  9. 奇怪吸引子---Hadley

    奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...

  10. RHEL下修改市区

    针对中国时区,修改操作如下 1.   修改文件 /etc/sysconfig/clock内容: ZONE=Asia/ShanghaiUTC=falseARC=false 2.     rm /etc/ ...