数据存储之 SQLite 数据库操作(一)

来源:互联网 发布:苹果制作铃声软件 编辑:程序博客网 时间:2024/05/21 21:36
这一讲我们来讲解一下数据库的存储方式 ,SQLite数据库属于文本型的数据库,它是以文本的形式来保存的。

1. SQLite 数据库介绍

查看 Android API文档中 SQLite 的介绍
    Android提供了对 SQLite 数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。
建议创建一个新的数据库的方式就是创建一个子类继承 SQLiteOpenHelper 然后重写它的 onCreate() 方法,这样你就可以在数据库中执行 SQLite的语法命令来创建表了
查看API文档中 SQLiteOpenHelper 类的介绍
    这是一个帮助类,作用是管理数据库的创建和版本的管理,你可以创建一个子类来实现 onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) 方法, onOpen(SQLiteDatabase)可以选择是否要实现。这个类负责在数据库存在的情况下,打开数据库,如果它不存在则会创建数据库,并且在必要的时候更新它。事务也会被使用到,这样才能确保数据库总是在合理的状态。
        查看它的方法列表:
        getReadableDatabase() 可以通过这个方法进行数据库的创建和打开

2. 程序实现

1) DBOpenHelper.java 用来更新或者创建数据库使用

[java] view plain copy
  1. package com.android.sqlitedemo.db;  
  2.   
  3. import android.content.Context;  
  4. import android.database.DatabaseErrorHandler;  
  5. import android.database.sqlite.SQLiteDatabase;  
  6. import android.database.sqlite.SQLiteOpenHelper;  
  7. import android.database.sqlite.SQLiteDatabase.CursorFactory;  
  8.   
  9. public class DBOpenHelper extends SQLiteOpenHelper {  
  10.   
  11.     /** 
  12.      * 查看SQLiteOpenHelper api文档的,它的构造方法 
  13.      * public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 
  14.      * 创建一个帮助类的对象来创建,打开,或者管理一个数据库,这个方法总是会快速的返回, 
  15.      * 这个数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开 
  16.      * 参数: 
  17.      *   context : 上下文对象,用来打开或者创建数据库 
  18.      *   name : 数据库文件的名称,如果是创建内存中则位null , 
  19.      *   factory : 用来创建游标对象,默认的是为null 
  20.      *   version : 数据库的版本号(以版本数字号1开始),如果数据库比较旧,就会用 onUpgrade(SQLiteDatabase, int, int) 方法来更新数据库, 
  21.      *             如果数据库比较新,就使用 onDowngrade(SQLiteDatabase, int, int)  方法来 回退数据库 
  22.      * 【注意】 : 我们声明完这个构造方法之后,包括初始化它的名称 和 版本之后,实际上它还是没有马上被创建起来的。 
  23.      */  
  24.     private static String name = "mydb.db"//表示数据库的名称  
  25.     //private static int version = 1; //表示数据库的版本号  
  26.     private static int version = 2//更新数据库的版本号,此时会执行 onUpgrade()方法  
  27.     public DBOpenHelper(Context context) {  
  28.         super(context, name, null, version);  
  29.         // TODO Auto-generated constructor stub  
  30.     }  
  31.   
  32.     //当数据库创建的时候,是第一次被执行,完成对数据库的表的创建  
  33.     @Override  
  34.     public void onCreate(SQLiteDatabase db) {  
  35.         // TODO Auto-generated method stub  
  36.         //SQLite 数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型  
  37.         //数据库这边有一个特点,就是SQLite数据库中文本类型没有过多的约束,也就是可以把布尔类型的数据存储到文本类型中,这样也是可以的  
  38.         String sql = "create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";  
  39.         db.execSQL(sql); //完成数据库的创建   
  40.     }  
  41.   
  42.     /** 
  43.      * onUpgrade() 方法是在什么时候被执行呢? 
  44.      * 查看API文档中 onUpgrade()介绍 
  45.      *   当数据库需要升级时调用这个方法[在开发过程中涉及到数据库的设计存在缺陷的时候进行升级,不会损坏原来的数据],这种实现方式会使用方法来减少表,或者增加表,或者做版本更新的需求。 
  46.      * 在这里就可以执行 SQLite Alter语句了,你可以使用 ALTER TABLE 来增加新的列插入到一张表中,你可以使用 ALTER TABLE 语句来重命名列或者移除列,或者重命名旧的表。 
  47.      * 你也可以创建新的表然后将旧表的内容填充到新表中。 
  48.      *   此方法会将事务之内的事件一起执行,如果有异常抛出,任何改变都会自动回滚操作。 
  49.      *   参数: 
  50.      *     db : 数据库 
  51.      *     oldVersion : 旧版本数据库 
  52.      *     newVersion : 新版本数据库 
  53.      * 【注意】:这里的删除等操作必须要保证新的版本必须要比旧版本的版本号要大才行。[即 Version 2.0 > Version 1.0 ] 所以这边我们不需要对其进行操作。 
  54.      */  
  55.     @Override  
  56.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  57.         // TODO Auto-generated method stub  
  58.         String sql = "alter table person add sex varchar(8)";  
  59.         db.execSQL(sql);  
  60.     }  
  61.   
  62. }  
2) MainActivity.java 主程序的实现

[java] view plain copy
  1. package com.android.sqlitedemo;  
  2.   
  3. import com.android.sqlitedemo.db.DBOpenHelper;  
  4.   
  5. import android.os.Bundle;  
  6. import android.app.Activity;  
  7. import android.content.Context;  
  8. import android.view.Menu;  
  9. import android.view.View;  
  10. import android.view.View.OnClickListener;  
  11. import android.widget.Button;  
  12.   
  13. public class MainActivity extends Activity {  
  14.   
  15.     private Button button;  
  16.   
  17.     @Override  
  18.     protected void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.activity_main);  
  21.         initComponent();  
  22.         button.setOnClickListener(new OnClickListener() {  
  23.   
  24.             @Override  
  25.             public void onClick(View v) {  
  26.                 // TODO Auto-generated method stub  
  27.                 DBOpenHelper helper = new DBOpenHelper(MainActivity.this);  
  28.                 // 调用 getWritableDatabase()或者 getReadableDatabase()其中一个方法将数据库建立  
  29.                 helper.getWritableDatabase();  
  30.             }  
  31.         });  
  32.     }  
  33.   
  34.     @Override  
  35.     public boolean onCreateOptionsMenu(Menu menu) {  
  36.         // Inflate the menu; this adds items to the action bar if it is present.  
  37.         getMenuInflater().inflate(R.menu.main, menu);  
  38.         return true;  
  39.     }  
  40.   
  41.     private void initComponent() {  
  42.         button = (Button) findViewById(R.id.button1);  
  43.     }  
  44.   
  45. }  

3. 执行结果

1). 当数据库版本为 1 (version = 1)的时候数据库内容如下图所示


2). 当数据库版本为 2 (version = 2)的时候数据库进行了更新操作,执行了 onUpgrade() 方法,更新后的内容增加了一列,如下图所示




原文地址: http://blog.csdn.net/ahuier/article/details/10417777

0 0