Android Sqlite介绍

  1. xml中定义了我们需要练习用到的几个操作按钮,这里不多解释了,下面看java源码:先看我们继承的 SQLiteOpenHelper

    java代码:

    1. package eoe.demo;


    2. import android.content.Context;
    3. import android.database.sqlite.SQLiteDatabase;
    4. import android.database.sqlite.SQLiteOpenHelper;
    5. import android.util.Log;
    6. /**
    7. *
    8. * @author Himi
    9. * @解释 此类我们只需要传建一个构造函数 以及重写两个方法就OK啦、
    10. *
    11. */
    12. public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    13. public final static int VERSION = 1;// 版本号
    14. public final static String TABLE_NAME = "himi";// 表名
    15. public final static String ID = "id";// 后面ContentProvider使用
    16. public final static String TEXT = "text";
    17. public static final String DATABASE_NAME = "Himi.db";
    18. public MySQLiteOpenHelper(Context context) {
    19. // 在Android 中创建和打开一个数据库都可以使用openOrCreateDatabase 方法来实现,
    20. // 因为它会自动去检测是否存在这个数据库,如果存在则打开,不过不存在则创建一个数据库;
    21. // 创建成功则返回一个 SQLiteDatabase对象,否则抛出异常FileNotFoundException。
    22. // 下面是来创建一个名为"DATABASE_NAME"的数据库,并返回一个SQLiteDatabase对象

    23. super(context, DATABASE_NAME, null, VERSION);
    24. }
    25. @Override
    26. // 在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表;
    27. public void onCreate(SQLiteDatabase db) {
    28. String str_sql = "CREATE TABLE " + TABLE_NAME + "(" + ID
    29. + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT + " text );";
    30. // CREATE TABLE 创建一张表 然后后面是我们的表名
    31. // 然后表的列,第一个是id 方便操作数据,int类型
    32. // PRIMARY KEY 是指主键 这是一个int型,用于唯一的标识一行;
    33. // AUTOINCREMENT 表示数据库会为每条记录的key加一,确保记录的唯一性;
    34. // 最后我加入一列文本 String类型
    35. // ----------注意:这里str_sql是sql语句,类似dos命令,要注意空格!
    36. db.execSQL(str_sql);
    37. // execSQL()方法是执行一句sql语句
    38. // 虽然此句我们生成了一张数据库表和包含该表的sql.himi文件,
    39. // 但是要注意 不是方法是创建,是传入的一句str_sql这句sql语句表示创建!!
    40. }
    41. @Override
    42. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    43. // 一般默认情况下,当我们插入 数据库就立即更新
    44. // 当数据库需要升级的时候,Android 系统会主动的调用这个方法。
    45. // 一般我们在这个方法里边删除数据表,并建立新的数据表,
    46. // 当然是否还需要做其他的操作,完全取决于游戏需求。
    47. Log.v("", "onUpgrade");
    48. }
    49. }


    复制代码

            下面我们就来看看主要的代码吧:

    java代码:

    1. package eoe.demo;


    2. import java.io.File;
    3. import java.io.IOException;
    4. import android.app.Activity;
    5. import android.content.ContentValues;
    6. import android.database.Cursor;
    7. import android.database.sqlite.SQLiteDatabase;
    8. import android.os.Bundle;
    9. import android.view.View;
    10. import android.view.Window;
    11. import android.view.WindowManager;
    12. import android.view.View.OnClickListener;
    13. import android.widget.Button;
    14. import android.widget.TextView;


    15. // ------------第三种保存方式--------《SQLite》---------
    16. /**
    17. * @author Himi
    18. * @保存方式:SQLite 轻量级数据库、
    19. * @优点: 可以将自己的数据存储到文件系统或者数据库当中, 也可以将自己的数据存
    20. * 储到SQLite数据库当中,还可以存到SD卡中
    21. * @注意1:数据库对于一个游戏(一个应用)来说是私有的,并且在一个游戏当中,
    22. * 数据库的名字也是唯一的。
    23. * @注意2 apk中创建的数据库外部的进程是没有权限去读/写的,
    24. * 我们需要把数据库文件创建到sdcard上可以解决类似问题.
    25. * @注意3 当你删除id靠前的数据或者全部删除数据的时候,SQLite不会自动排序,
    26. * 也就是说再添加数据的时候你不指定id那么SQLite默认还是在原有id最后添加一条新数据
    27. * @注意4 android 中 的SQLite 语法区分大小写的!!!!!这点要注意!
    28. * String UPDATA_DATA = "UPDATE himi SET text='通过SQL语句来修改数据' WHERE id=1";
    29. * 千万 不能可以写成
    30. * String UPDATA_DATA = "updata himi set text='通过SQL语句来修改数据' where id=1";
    31. */
    32. public class MainActivity extends Activity implements OnClickListener {
    33. private Button btn_addOne, btn_deleteone, btn_check, btn_deleteTable,
    34. btn_edit, btn_newTable;
    35. private TextView tv;
    36. private MySQLiteOpenHelper myOpenHelper;// 创建一个继承SQLiteOpenHelper类实例
    37. private SQLiteDatabase mysql ;
    38. //---------------以下两个成员变量是针对在SD卡中存储数据库文件使用
    39. // private File path = new File("/sdcard/himi");// 创建目录
    40. // private File f = new File("/sdcard/himi/himi.db");// 创建文件

    复制代码
    @Override
  2. public void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  5. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  6. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  7. setContentView(R.layout.main);
  8. tv = (TextView) findViewById(R.id.tv_title);
  9. btn_addOne = (Button) findViewById(R.id.sql_addOne);
  10. btn_check = (Button) findViewById(R.id.sql_check);
  11. btn_deleteone = (Button) findViewById(R.id.sql_deleteOne);
  12. btn_deleteTable = (Button) findViewById(R.id.sql_deleteTable);
  13. btn_newTable = (Button) findViewById(R.id.sql_newTable);
  14. btn_edit = (Button) findViewById(R.id.sql_edit);
  15. btn_edit.setOnClickListener(this);
  16. btn_addOne.setOnClickListener(this);
  17. btn_check.setOnClickListener(this);
  18. btn_deleteone.setOnClickListener(this);
  19. btn_deleteTable.setOnClickListener(this);
  20. btn_newTable.setOnClickListener(this);
  21. myOpenHelper = new MySQLiteOpenHelper(this);// 实例一个数据库辅助器


  22. //备注1 ----如果你使用的是将数据库的文件创建在SD卡中,那么创建数据库mysql如下操作:
  23. // if (!path.exists()) {// 目录存在返回false
  24. // path.mkdirs();// 创建一个目录
  25. // }
  26. // if (!f.exists()) {// 文件存在返回false
  27. // try {
  28. // f.createNewFile();//创建文件
  29. // } catch (IOException e) {
  30. // // TODO Auto-generated catch block
  31. // e.printStackTrace();
  32. // }
  33. // }
  34. }

  35. @Override
  36. public void onClick(View v) {
  37. try {
  38. //备注2----如果你使用的是将数据库的文件创建在SD卡中,那么创建数据库mysql如下操作:
  39. // mysql = SQLiteDatabase.openOrCreateDatabase(f, null);
  40. //备注3--- 如果想把数据库文件默认放在系统中,那么创建数据库mysql如下操作:
  41. mysql = myOpenHelper.getWritableDatabase(); // 实例数据库
  42. if (v == btn_addOne) {// 添加数据
  43. // ---------------------- 读写句柄来插入---------
  44. // ContentValues 其实就是一个哈希表HashMap, key值是字段名称,
  45. //Value值是字段的值。然后 通过 ContentValues 的 put 方法就可以
  46. //把数据放到ContentValues中,然后插入到表中去!
  47. ContentValues cv = new ContentValues();
  48. cv.put(MySQLiteOpenHelper.TEXT, "测试新的数据");
  49. mysql.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);
  50. // inser() 第一个参数 标识需要插入操作的表名
  51. // 第二个参数 :默认传null即可
  52. // 第三个是插入的数据

  53. // ---------------------- SQL语句插入--------------
  54. // String INSERT_DATA =
  55. // "INSERT INTO himi (id,text) values (1, '通过SQL语句插入')";
  56. // db.execSQL(INSERT_DATA);
  57. tv.setText("添加数据成功!点击查看数据库查询");
  58. } else if (v == btn_deleteone) {// 删除数据

  59. // ---------------------- 读写句柄来删除
  60. mysql.delete("himi", MySQLiteOpenHelper.ID + "=1", null);
  61. // 第一个参数 需要操作的表名
  62. // 第二个参数为 id+操作的下标 如果这里我们传入null,表示全部删除
  63. // 第三个参数默认传null即可

  64. // ----------------------- SQL语句来删除
  65. // String DELETE_DATA = "DELETE FROM himi WHERE id=1";
  66. // db.execSQL(DELETE_DATA);
  67. tv.setText("删除数据成功!点击查看数据库查询");
  68. } else if (v == btn_check) {// 遍历数据

  69. //备注4------
  70. Cursor cur = mysql.rawQuery("SELECT * FROM "
  71. + MySQLiteOpenHelper.TABLE_NAME, null);
  72. if (cur != null) {
  73. String temp = "";
  74. int i = 0;
  75. while (cur.moveToNext()) {//直到返回false说明表中到了数据末尾
  76. temp += cur.getString(0);
  77. // 参数0 指的是列的下标,这里的0指的是id列
  78. temp += cur.getString(1);
  79. // 这里的0相对于当前应该是咱们的text列了
  80. i++;
  81. temp += " "; // 这里是我整理显示格式 ,呵呵~
  82. if (i % 3 == 0) // 这里是我整理显示格式 ,呵呵~
  83. temp += "/n";// 这里是我整理显示格式 ,呵呵~
  84. }
  85. tv.setText(temp);
  86. }
  87. } else if (v == btn_edit) {// 修改数据
  88. // ------------------------句柄方式来修改 -------------
  89. ContentValues cv = new ContentValues();
  90. cv.put(MySQLiteOpenHelper.TEXT, "修改后的数据");
  91. mysql.update("himi", cv, "id " + "=" + Integer.toString(3), null);
  92. // ------------------------SQL语句来修改 -------------
  93. // String UPDATA_DATA =
  94. // "UPDATE himi SET text='通过SQL语句来修改数据' WHERE id=1";
  95. // db.execSQL(UPDATA_DATA);
  96. tv.setText("修改数据成功!点击查看数据库查询");
  97. } else if (v == btn_deleteTable) {// 删除表
  98. mysql.execSQL("DROP TABLE himi");
  99. tv.setText("删除表成功!点击查看数据库查询");
  100. } else if (v == btn_newTable) {// 新建表
  101. String TABLE_NAME = "himi";
  102. String ID = "id";
  103. String TEXT = "text";
  104. String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID
  105. + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT
  106. + " text );";
  107. mysql.execSQL(str_sql2);
  108. tv.setText("新建表成功!点击查看数据库查询");
  109. }
  110. // 删除数据库:
  111. // this.deleteDatabase("himi.db");
  112. } catch (Exception e) {
  113. tv.setText("操作失败!");
  114. } finally {// 如果try中异常,也要对数据库进行关闭
  115. mysql.close();
  116. }
  117. }
  118. }


复制代码

        以上代码中我们实现了两种存储方式:

       一种存储默认系统路径/data-data-com.himi-databases下,另外一种则是保存在了/sdcard-himi下,生成数据库文件himi.db

       那么这里两种实现方式大概步骤和区别说下:
       如果我们使用默认系统路径存储数据库文件:
       第一步:新建一个类继承 SQLiteOpenHelper;写一个构造,重写两个函数!
       第二步:在新建的类中的 onCreate(SQLiteDatabase db) 方法中创建一个表;
       第三步:在进行删除数据、添加数据等操作的之前我们要得到数据库读写句柄得到一个数据库实例;
       注意: 继承写这个辅助类,是为了在我们没有数据库的时候自动为我们生成一个数据库,并且生成数据库文件,这里也同时创建了一张表,因为我们在onCreate里是在数据库中创建一张表的操作;这里还要注意在我们new 这个我们这个 MySQLiteOpenHelper 类实例对象的时候并没有创建数据库哟~!而是在我们调用 (备注3) MySQLiteOpenHelper ..getWritableDatabase() 这个方法得到数据库读写句柄的时候,android 会分析是否已经有了数据库,如果没有会默认为我们创建一个数据库并且在系统路径 data-data-com.himi-databases下生成himi.db 文件!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值