SQLite的特性:

•轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
•独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
•隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
•跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
•多语言接口
SQLite 数据库支持多语言编程接口。
•安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据.

优点:
1.能存储较多的数据。
2.能将数据库文件存放到SD卡中!

什么是 SQLiteDatabase?
一个 SQLiteDatabase 的实例代表了一个SQLite 的数据库,通过SQLiteDatabase 实例的一些方法,我们可以执行SQL 语句,对数据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。

什么是 SQLiteOpenHelper ?
根据这名字,我们可以看出这个类是一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase(),或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android 系统就会自动生成一个数 据库。SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里边的3 个函数,

什么是 ContentValues 类?
ContentValues 类和Hashmap/Hashtable 比较类似,它也是负责存储一些名值对,但是它存储的名值对当中的名是一个String 类型,而值都是基本类型。

什么是 Cursor ?
Cursor 在Android 当中是一个非常有用的接口,通过Cursor 我们可以对从数据库查询出来的结果集进行随机的读写访问。

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

java代码:
  1. package com.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("Himi", "onUpgrade");
  48. }
  49. }
复制代码
下面看最重要的MainActivity中的代码:

java代码:
  1. package com.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");// 创建文件
  41. @Override
  42. public void onCreate(Bundle savedInstanceState) {
  43. super.onCreate(savedInstanceState);
  44. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  45. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  46. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  47. setContentView(R.layout.main);
  48. tv = (TextView) findViewById(R.id.tv_title);
  49. btn_addOne = (Button) findViewById(R.id.sql_addOne);
  50. btn_check = (Button) findViewById(R.id.sql_check);
  51. btn_deleteone = (Button) findViewById(R.id.sql_deleteOne);
  52. btn_deleteTable = (Button) findViewById(R.id.sql_deleteTable);
  53. btn_newTable = (Button) findViewById(R.id.sql_newTable);
  54. btn_edit = (Button) findViewById(R.id.sql_edit);
  55. btn_edit.setOnClickListener(this);
  56. btn_addOne.setOnClickListener(this);
  57. btn_check.setOnClickListener(this);
  58. btn_deleteone.setOnClickListener(this);
  59. btn_deleteTable.setOnClickListener(this);
  60. btn_newTable.setOnClickListener(this);
  61. myOpenHelper = new MySQLiteOpenHelper(this);// 实例一个数据库辅助器
  62. //备注1----如果你使用的是将数据库的文件创建在SD卡中,那么创建数据库mysql如下操作:
  63. //if (!path.exists()) {// 目录存在返回false
  64. // path.mkdirs();// 创建一个目录
  65. //}
  66. //if (!f.exists()) {// 文件存在返回false
  67. // try {
  68. // f.createNewFile();//创建文件
  69. // } catch (IOException e) {
  70. // // TODO Auto-generated catch block
  71. // e.printStackTrace();
  72. // }
  73. //}
  74. }
  75. @Override
  76. public void onClick(View v) {
  77. try {
  78. //备注2----如果你使用的是将数据库的文件创建在SD卡中,那么创建数据库mysql如下操作:
  79. // mysql = SQLiteDatabase.openOrCreateDatabase(f, null);
  80. //备注3--- 如果想把数据库文件默认放在系统中,那么创建数据库mysql如下操作:
  81. mysql = myOpenHelper.getWritableDatabase(); // 实例数据库
  82. if (v == btn_addOne) {// 添加数据
  83. // ---------------------- 读写句柄来插入---------
  84. // ContentValues 其实就是一个哈希表HashMap, key值是字段名称,
  85. //Value值是字段的值。然后 通过 ContentValues 的 put 方法就可以
  86. //把数据放到ContentValues中,然后插入到表中去!
  87. ContentValues cv = new ContentValues();
  88. cv.put(MySQLiteOpenHelper.TEXT, "测试新的数据");
  89. mysql.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);
  90. // inser() 第一个参数 标识需要插入操作的表名
  91. // 第二个参数 :默认传null即可
  92. // 第三个是插入的数据
  93. // ---------------------- SQL语句插入--------------
  94. // String INSERT_DATA =
  95. // "INSERT INTO himi (id,text) values (1, '通过SQL语句插入')";
  96. // db.execSQL(INSERT_DATA);
  97. tv.setText("添加数据成功!点击查看数据库查询");
  98. } else if (v == btn_deleteone) {// 删除数据
  99. // ---------------------- 读写句柄来删除
  100. mysql.delete("himi", MySQLiteOpenHelper.ID + "=1", null);
  101. // 第一个参数 需要操作的表名
  102. // 第二个参数为 id+操作的下标 如果这里我们传入null,表示全部删除
  103. // 第三个参数默认传null即可
  104. // ----------------------- SQL语句来删除
  105. // String DELETE_DATA = "DELETE FROM himi WHERE id=1";
  106. // db.execSQL(DELETE_DATA);
  107. tv.setText("删除数据成功!点击查看数据库查询");
  108. } else if (v == btn_check) {// 遍历数据
  109. //备注4------
  110. Cursor cur = mysql.rawQuery("SELECT * FROM "
  111. + MySQLiteOpenHelper.TABLE_NAME, null);
  112. if (cur != null) {
  113. String temp = "";
  114. int i = 0;
  115. while (cur.moveToNext()) {//直到返回false说明表中到了数据末尾
  116. temp += cur.getString(0);
  117. // 参数0 指的是列的下标,这里的0指的是id列
  118. temp += cur.getString(1);
  119. // 这里的0相对于当前应该是咱们的text列了
  120. i++;
  121. temp += ""; // 这里是我整理显示格式 ,呵呵~
  122. if (i % 3 == 0) // 这里是我整理显示格式 ,呵呵~
  123. temp += "\n";// 这里是我整理显示格式 ,呵呵~
  124. }
  125. tv.setText(temp);
  126. }
  127. } else if (v == btn_edit) {// 修改数据
  128. // ------------------------句柄方式来修改 -------------
  129. ContentValues cv = new ContentValues();
  130. cv.put(MySQLiteOpenHelper.TEXT, "修改后的数据");
  131. mysql.update("himi", cv, "id " + "=" + Integer.toString(3), null);
  132. // ------------------------SQL语句来修改 -------------
  133. // String UPDATA_DATA =
  134. // "UPDATE himi SET text='通过SQL语句来修改数据'WHERE id=1";
  135. // db.execSQL(UPDATA_DATA);
  136. tv.setText("修改数据成功!点击查看数据库查询");
  137. } else if (v == btn_deleteTable) {// 删除表
  138. mysql.execSQL("DROP TABLE himi");
  139. tv.setText("删除表成功!点击查看数据库查询");
  140. } else if (v == btn_newTable) {// 新建表
  141. String TABLE_NAME = "himi";
  142. String ID = "id";
  143. String TEXT = "text";
  144. String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID
  145. + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT
  146. + " text );";
  147. mysql.execSQL(str_sql2);
  148. tv.setText("新建表成功!点击查看数据库查询");
  149. }
  150. // 删除数据库:
  151. // this.deleteDatabase("himi.db");
  152. } catch (Exception e) {
  153. tv.setText("操作失败!");
  154. } finally {// 如果try中异常,也要对数据库进行关闭
  155. mysql.close();
  156. }
  157. }
  158. }
复制代码

系列之Android SQLite的数据库文件存储在SD卡中(二)的帖子链接http://www.eoeandroid.com/thread-100493-1-1.html

完整denohttp://download.csdn.net/detail/cjjky/4236087

更多相关文章

  1. android多线程数据存储 - ThreadLocal的工作原理
  2. Android设置屏幕旋转后保存数据
  3. java 使用jdbc连接Greenplum数据库和Postgresql数据库
  4. 为什么HttpUrlConnection在移动数据连接上抛出SSLException?
  5. JavaScript unshift()函数移入数据到数组第一位
  6. 提供的数据显示在Office 2007+ XML中
  7. ubuntu (16.04) server 英文原版 添加中文语言支持 消除java 程
  8. java 对称加密——密钥与加密后的数据存盘方式
  9. Java8 新特性之流式数据处理

随机推荐

  1. python处理数据,存进hive表
  2. Python笔记-几种取整方式
  3. python 中 字符串转换为数组,字典或表达式
  4. 详解Python中的from..import绝对导入语句
  5. python入门之常见列表、字典知识
  6. 如何使用pip安装Python MySQLdb模块?
  7. 检测Python程序的执行效率
  8. python自然语言处理——3.8 分割
  9. 转:图解 Python 深拷贝和浅拷贝
  10. Python3语法——Python3函数参数的各种形