免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1217 | 回复: 1
打印 上一主题 下一主题

android SQLiteOpenHelper使用示例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-17 15:30 |只看该作者 |倒序浏览

android SQLiteOpenHelper使用示例


androidSQLiteOpenHelper.




我们大家都知道Android平台提供给我们一个数据库辅助类来创建或打开数据库,这个辅助类继承自SQLiteOpenHelper类,在该类的构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象。继承和扩展SQLiteOpenHelper类主要做的工作就是重写以下两个方法。

onCreate(SQLiteDatabase db) : 当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行。

onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version):当打开数据库时传入的版本号与当前的版本号不同时会调用该方法。

除了上述两个必须要实现的方法外,还可以选择性地实现onOpen 方法,该方法会在每次打开数据库时被调用。

SQLiteOpenHelper 类的基本用法是:当需要创建或打开一个数据库并获得数据库对象时,首先根据指定的文件名创建一个辅助对象,然后调用该对象的getWritableDatabase 或 getReadableDatabase方法 获得SQLiteDatabase 对象。

调用getReadableDatabase 方法返回的并不总是只读数据库对象,一般来说该方法和getWriteableDatabase 方法的返回情况相同,只有在数据库仅开放只读权限或磁盘已满时才会返回一个只读的数据库对象。







MySQLiteHelper
  1. package xiaohang.zhimeng;

  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteOpenHelper;
  5. import android.database.sqlite.SQLiteDatabase.CursorFactory;

  6. public class MySQLiteHelper extends SQLiteOpenHelper{
  7. //调用父类构造器
  8. public MySQLiteHelper(Context context, String name, CursorFactory factory,
  9. int version) {
  10. super(context, name, factory, version);
  11. }

  12. /**
  13. * 当数据库首次创建时执行该方法,一般将创建表等初始化操作放在该方法中执行.
  14. * 重写onCreate方法,调用execSQL方法创建表
  15. * */
  16. @Override
  17. public void onCreate(SQLiteDatabase db) {
  18. db.execSQL("create table if not exists hero_info("
  19. + "id integer primary key,"
  20. + "name varchar,"
  21. + "level integer)");

  22. }

  23. //当打开数据库时传入的版本号与当前的版本号不同时会调用该方法
  24. @Override
  25. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  26. }

  27. }

  28. package xiaohang.zhimeng;

  29. import android.content.Context;
  30. import android.database.sqlite.SQLiteDatabase;
  31. import android.database.sqlite.SQLiteOpenHelper;
  32. import android.database.sqlite.SQLiteDatabase.CursorFactory;

  33. public class MySQLiteHelper extends SQLiteOpenHelper{
  34. //调用父类构造器
  35. public MySQLiteHelper(Context context, String name, CursorFactory factory,
  36. int version) {
  37. super(context, name, factory, version);
  38. }

  39. /**
  40. * 当数据库首次创建时执行该方法,一般将创建表等初始化操作放在该方法中执行.
  41. * 重写onCreate方法,调用execSQL方法创建表
  42. * */
  43. @Override
  44. public void onCreate(SQLiteDatabase db) {
  45. db.execSQL("create table if not exists hero_info("
  46. + "id integer primary key,"
  47. + "name varchar,"
  48. + "level integer)");

  49. }

  50. //当打开数据库时传入的版本号与当前的版本号不同时会调用该方法
  51. @Override
  52. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  53. }

  54. }


  55. Activity01
复制代码
  1. package xiaohang.zhimeng;

  2. import android.app.Activity;
  3. import android.content.ContentValues;
  4. import android.database.Cursor;
  5. import android.database.sqlite.SQLiteDatabase;
  6. import android.graphics.Color;
  7. import android.os.Bundle;
  8. import android.widget.TextView;

  9. public class Activity01 extends Activity {
  10. MySQLiteHelper myHelper;
  11. TextView tv;

  12. @Override
  13. public void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.main);
  16. tv = (TextView)findViewById(R.id.tv);
  17. //创建MySQLiteOpenHelper辅助类对象
  18. myHelper = new MySQLiteHelper(this, "my.db", null, 1);
  19. //向数据库中插入和更新数据
  20. insertAndUpdateData(myHelper);
  21. //查询数据
  22. String result = queryData(myHelper);
  23. tv.setTextColor(Color.RED);
  24. tv.setTextSize(20.0f);
  25. tv.setText("名字\t等级\n"+result);

  26. }

  27. //向数据库中插入和更新数据
  28. public void insertAndUpdateData(MySQLiteHelper myHelper){
  29. //获取数据库对象
  30. SQLiteDatabase db = myHelper.getWritableDatabase();
  31. //使用execSQL方法向表中插入数据
  32. db.execSQL("insert into hero_info(name,level) values('bb',0)");
  33. //使用insert方法向表中插入数据
  34. ContentValues values = new ContentValues();
  35. values.put("name", "xh");
  36. values.put("level", 5);
  37. //调用方法插入数据
  38. db.insert("hero_info", "id", values);
  39. //使用update方法更新表中的数据
  40. //清空ContentValues对象
  41. values.clear();
  42. values.put("name", "xh");
  43. values.put("level", 10);
  44. //更新xh的level 为10
  45. db.update("hero_info", values, "level = 5", null);
  46. //关闭SQLiteDatabase对象
  47. db.close();
  48. }

  49. //从数据库中查询数据
  50. public String queryData(MySQLiteHelper myHelper){
  51. String result = "";
  52. //获得数据库对象
  53. SQLiteDatabase db = myHelper.getReadableDatabase();
  54. //查询表中的数据
  55. Cursor cursor = db.query("hero_info", null, null, null, null, null, "id asc");
  56. //获取name列的索引
  57. int nameIndex = cursor.getColumnIndex("name");
  58. //获取level列的索引
  59. int levelIndex = cursor.getColumnIndex("level");
  60. for (cursor.moveToFirst();!(cursor.isAfterLast());cursor.moveToNext()) {
  61. result = result + cursor.getString(nameIndex)+ "\t\t";
  62. result = result + cursor.getInt(levelIndex)+"\n";
  63. }
  64. cursor.close();//关闭结果集
  65. db.close();//关闭数据库对象
  66. return result;
  67. }

  68. @Override
  69. protected void onDestroy() {
  70. SQLiteDatabase db = myHelper.getWritableDatabase();//获取数据库对象
  71. //删除hero_info表中所有的数据 传入1 表示删除所有行------>点击back按钮
  72. db.delete("hero_info", "1", null);
  73. super.onDestroy();
  74. }
  75. }
复制代码
下面通过一个简单的小例子说明SQLiteOpenDatabase的用法,其中包括创建数据库、插入数据、更新 、查询等等,我们将查询后获取到的数据显示到TextView上,看一下运行后的效果。

论坛徽章:
0
2 [报告]
发表于 2012-02-17 21:51 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP