SQLite介绍

SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

在android中当需要操作SQLite数据库的时候需要得到一个SQLiteOpenHelper对象,而SQLiteOpenHelper是一个抽象类,用户需要继承这个类,并实现该类中的一些方法。

1、继承SQLiteOpenHelper之后就拥有了以下两个方法:

◆getReadableDatabase() 创建或者打开一个查询数据库

◆getWritableDatabase()创建或者打开一个可写数据库

◆他们都会返回SQLiteDatabase对象,用户通过得到的SQLiteDatabase对象进行后续操作

2、同时用户还可以覆盖以下回调函数,再对数据库进行操作的时候回调以下方法:

◆onCreate(SQLiteDatabase):在数据库第一次创建的时候会调用这个方法,一般我们在这个方法里边创建数据库表。

◆onUpgrade(SQLiteDatabase,int,int):当数据库需要修改的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据库表,并建立新的数据库表,当然是否还需要做其他的操作,完全取决于应用程序的需求。

◆onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。

需要注意

1、在SQLiteOepnHelper的子类当中,必须有以下该构造函数

  1. public DatabaseHelper(Context context, String name, CursorFactory factory,
  2. int version) {
  3. //必须通过super调用父类当中的构造函数
  4. super(context, name, factory, version);
  5. }

为了方便,也可以创建其它的构造函数,含二个参数或者三个参数的。

2、函数public void onCreate(SQLiteDatabase db)是在调用getReadableDatabase()或者是getWritableDatabase()第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法.

  1. public void onCreate(SQLiteDatabase db) {
  2. System.out.println("create a Database");
  3. //execSQL函数用于执行SQL语句
  4. db.execSQL("create table user(id int,name varchar(20))");
  5. }

在向数据库的表中插入记录时,需要先将数据包含在一个ContentValues中,向该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致。接着调用Databasehelper的getWritableDatabase方法来获得可以写入的Databasehelper对象,再向其中insert记录。注意调用DatabaseHelper对象的insert,update或者query方法的参数的传递。

另外执行query方法后,返回的是一个Cursor游标,游标最开始指向的是记录集合中第一行的上一行,因此首先需要先调用cursor.next()将游标移动到记录集合的第一行,接着再获取数据即可。

Java代码

  1. public class SQLiteActivity extends Activity {
  2. /** Called when the activity is first created. */
  3. private Button createButton;
  4. private Button insertButton;
  5. private Button updateButton;
  6. private Button updateRecordButton;
  7. private Button queryButton;
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. createButton = (Button)findViewById(R.id.createDatabase);
  13. updateButton = (Button)findViewById(R.id.updateDatabase);
  14. insertButton = (Button)findViewById(R.id.insert);
  15. updateRecordButton = (Button)findViewById(R.id.update);
  16. queryButton = (Button)findViewById(R.id.query);
  17. createButton.setOnClickListener(new CreateListener());
  18. updateButton.setOnClickListener(new UpdateListener());
  19. insertButton.setOnClickListener(new InsertListener());
  20. updateRecordButton.setOnClickListener(new UpdateRecordListener());
  21. queryButton.setOnClickListener(new QueryListener());
  22. }
  23. class CreateListener implements OnClickListener{
  24. @Override
  25. public void onClick(View v) {
  26. //创建一个DatabaseHelper对象
  27. DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
  28. //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
  29. SQLiteDatabase db = dbHelper.getReadableDatabase();
  30. }
  31. }
  32. class UpdateListener implements OnClickListener{
  33. @Override
  34. public void onClick(View v) {
  35. DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
  36. SQLiteDatabase db = dbHelper.getReadableDatabase();
  37. }
  38. }
  39. class InsertListener implements OnClickListener{
  40. @Override
  41. public void onClick(View v) {
  42. //生成ContentValues对象
  43. ContentValues values = new ContentValues();
  44. //想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
  45. values.put("id", 1);
  46. values.put("name","zhangsan");
  47. DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
  48. SQLiteDatabase db = dbHelper.getWritableDatabase();
  49. //调用insert方法,就可以将数据插入到数据库当中
  50. db.insert("user", null, values);
  51. }
  52. }
  53. //更新操作就相当于执行SQL语句当中的update语句
  54. //UPDATE table_name SET XXCOL=XXX WHERE XXXXCOL=XX...
  55. class UpdateRecordListener implements OnClickListener{
  56. @Override
  57. public void onClick(View arg0) {
  58. // TODO Auto-generated method stub
  59. //得到一个可写的SQLiteDatabase对象
  60. DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
  61. SQLiteDatabase db = dbHelper.getWritableDatabase();
  62. ContentValues values = new ContentValues();
  63. values.put("name", "zhangsanfeng");
  64. //第一个参数是要更新的表名
  65. //第二个参数是一个ContentValeus对象
  66. //第三个参数是where子句
  67. db.update("user", values, "id=?", new String[]{"1"});
  68. }
  69. }
  70. class QueryListener implements OnClickListener{
  71. @Override
  72. public void onClick(View v) {
  73. System.out.println("aaa------------------");
  74. Log.d("myDebug", "myFirstDebugMsg");
  75. DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
  76. SQLiteDatabase db = dbHelper.getReadableDatabase();
  77. Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
  78. while(cursor.moveToNext()){
  79. String name = cursor.getString(cursor.getColumnIndex("name"));
  80. System.out.println("query--->" + name);
  81. }
  82. }
  83. }
  84. }
 
 

Android SQLite数据库应用技巧分享

 
 

Android操作系统中内置了SQLite数据库!我们在应用程序开发中都需要对数据库进行相关操作。在这里大家就一起来看看有关Android SQLite数据库的应用技巧,方便将来的应用。

SQLite本身就是一个很小型的数据库!

数据库存储的位置在data/data/<项目文件夹>/databases/

1:Android SQLite数据库创建数据库

  1. Context.createDatabase(String name,int version ,
    int mode,CursorFactory factory)

如果创建不成功则抛出FileNotFoundException异常

Java代码

  1. SQLiteDatabase DataBase=this.openOrCreateDatabase
    ("DataBase.db",
  2. MODE_PRIVATE,
  3. new CursorFactory(){
  4. //创建新的数据库,名称Database,模式MODE_PRIVATE
  5. public Cursor newCursor(SQLiteDatabase db,
  6. SQLiteCursorDriver masterQuery,
  7. String editTable,
  8. SQLiteQuery query){
  9. return null;
  10. }
  11. });
  12. SQLiteDatabase DataBase=this.openOrCreateDatabase
    ("DataBase.db",
  13. MODE_PRIVATE,
  14. new CursorFactory(){
  15. //创建新的数据库,名称Database,模式MODE_PRIVATE
  16. public Cursor newCursor(SQLiteDatabase db,
  17. SQLiteCursorDriver masterQuery,
  18. String editTable,
  19. SQLiteQuery query){
  20. return null;
  21. }
  22. });

2:Android SQLite数据库打开已经存在的数据库

  1. Context.openDatabase(String file,CursorFactory factory);

如果我们要实现打开不存在的数据库就创建它,代码如下:

Java代码

  1. //创建一个名为:DataBase的数据库,后缀为.db
  2. SQLiteDatabase DataBase=this.openOrCreateDatabase
    ("DateBase.db",
  3. MODE_PRIVATE,
  4. null);
  5. //也可以这样写
  6. try
  7. {
  8. //打开已经存在的数据库
  9. db = this.openDatabase("DateBase.db", null);
  10. }
  11. catch (FileNotFoundException e)
  12. {
  13. try
  14. {
  15. //建立新的数据库
  16. }
  17. catch (FileNotFoundException e)
  18. {
  19. db = null;
  20. }
  21. }
  22. //创建一个名为:DataBase的数据库,后缀为.db
  23. SQLiteDatabase DataBase=this.openOrCreateDatabase
    ("DateBase.db",
  24. MODE_PRIVATE,
  25. null);
  26. //也可以这样写
  27. try
  28. {
  29. //打开已经存在的数据库
  30. db = this.openDatabase("DateBase.db", null);
  31. }
  32. catch (FileNotFoundException e)
  33. {
  34. try
  35. {
  36. //建立新的数据库
  37. }
  38. catch (FileNotFoundException e)
  39. {
  40. db = null;
  41. }
  42. }

3:Android SQLite数据库关闭数据库

  1. Java代码
  2. //千万不要忘记关闭数据库哦
  3. DataBase.close();
  4. //千万不要忘记关闭数据库哦
  5. DataBase.close();

4:Android SQLite数据库删除指定数据库

Java代码

  1. this.deleteDatabase("Database.db");
  2. this.deleteDatabase("Database.db");

5:Android SQLite数据库执行SQL命令使用:

  1. SQLiteDatabase.execSQL(String sql);

最新文章

  1. Qt、VTK配置常见问题
  2. IOS 本地推送 IOS10.0以上 static的作用 const的作用
  3. python string.py 源码分析 三:maketrans
  4. Python yield 使用浅析(转)
  5. 堡垒机 paramiko 自动登陆代码
  6. Virtualenv介绍
  7. hiho #1332 : 简单计算器 栈+递归
  8. 第三百五十八天 how can I 坚持
  9. 用JavaScript获取一个超链接的绝对URL地址
  10. WinForm------自定义YearMonthEdit组件
  11. C++初始化顺序
  12. SQLServer优化资料整理(二)
  13. Object类型知识总结,你掌握了多少?
  14. Common-used commands in Docker
  15. 07 ProgressDialog
  16. jQuery(一)、核心
  17. count性能
  18. 实训任务05 MapReduce获取成绩表的最高分记录
  19. orleans发送广播消息
  20. Android requestCode的限制

热门文章

  1. laravel post请求失败
  2. private、 protected、 public、 internal 修饰符的访问权限
  3. 深入Android媒体存储服务(一):APP与媒体存储服务的交互
  4. 官方原版Adobe Acrobat XI Pro v11.0.0 序列号激活 可升级更新
  5. DbConnectionFactory 数据库连接
  6. openNebula dubug
  7. 自定义标签体、MVC
  8. C++ *max_element函数找最大元素 *min_element函数找最小元素 STL算法(转)
  9. 一道java面试题-方法静态分派
  10. Choosing Between ElasticSearch, MongoDB &amp;amp; Hadoop