当前位置:数据库 > SQLite >>

SQLite的小例子--备忘录

1. Android Intents
1.1. Android中的SQLite
SQLite是一个嵌入在Android中的开源数据库。SQLite支持标准的关系型数据库特征,比如SQL语法,事务和预处理语句。另外它在运行时只需要很少的内存(大约250KByte)
在Android中使用SQLite不需要任何数据库的安装或管理(不需要数据库管理员)。你可以指定SQL来使用数据库工作,并且数据库会为你自动管理。
在Android中使用数据库工作可以减缓由于必要的I/O操作,因此它建议在AsyncTask中执行这项任务。
数据库支持的数据类型:
TEXT 类似JAVA中的String
INTEGER 类似JAVA中的long
REAL 类似JAVA中的double
在将这些数据保存到数据库之前,所有其他的类型都必须转换成这些类型。实际上SQLite本身不验证写入列中的类型定义,你可以写一个整数到字符串列上。
      如果您的应用程序创建一个数据库,这个数据库时保存在目录
”data/data/<项目包名>/databases/数据库名”。这里的第一个data目录的路径就是
Environment.getDataDirectory()的返回值。Environment.getDataDirectory()通常返回SD卡中的位置
一个SQLite数据库相对于创建它的应用程序是私有的,如果你想将数据分享给其他应用程序,可以使用ContentProvider
1.2. SQLiteOpenHelper
在你的应用程序中通过使用子类SQLiteOpenHelper来创建和更新一个数据库,在这个类中,在数据库模式变化的情况下,你需要重写onCreate()方法来创建数据库和重写onUpdate()方法来更新数据库。这两种方法都需要接收一个SQLiteOpenHelper对象。
      SQLiteOpenHelper提供方法getReadableDatabase()和getWriteableDatabase()方法来获得一个SQLiteDatabase对象,在对象可以允许访问数据库,而不管是在读或写的模式下。
      对于数据库的主键,你应该一直使用标识符”_id”来作为数据库主键,在Android的一些方法中最好依赖这个标准。
      SQLiteDatabase提供方法insert()、update()、delete()和可以直接执行SQL的
execSQL()方法,对象ContentValues允许为insert和update定义键值,键就是列,值就是该列对应的值。
1.3. SQLiteDatabase和Cursor(游标)
我们可以通过创建rawQuery()方法通过接收SQL查询数据,或者通过query()方法,该方法提供了一个指定动态数据或SQLiteQueryBuilder的接口。SQLiteBuilder类似内容提供者的接口,因此通常用于ContentProvider中。查询通常返回的是一个游标(Cursor)
查询方法有如下一些参数:
query(String dbName,int[] columnNames,String whereClause, String[] valuesForWhereClause, String[] groupBy, String[] having, String[] orderBy)。
如果所有的参数都要选择的话,可以将那些不需要的字句设置为null,比如where的地方设置为null,当然还可以在where的地方填入其他值(如果需要的话),比如
“_id=18 and summary=?”。如果需要几个值呢?你可以通过在valuesForWhereClause数据来查询。一般来说,如果不需要的话,可以填入null,比如groupby字句。
一个游标就代表查询结果。要过的元素的数量,可以使用getCount()方法。要一在单个数据行与行之间移动数据,可以通过moveToFirst()和MoveToNext()方法。通过isAfterLast()方法,可以检查下面是否还有数据。
在ListView中可以通过SimpleCursorAdapter适配器来直接使用游标。
2. 开始编写应用程序
2.1.  概览
下面,我们通过一个示例程序来测试,这个程序可以允许用户保持它应该做的事项。这些事项被存放在SQLite数据库中,这个应用程序包括两个Activity,一个是用来查看所有待办事项清单,一个是用户创建/维护一个特定的待办事项。这两个Activity都是通过Intent来进行沟通的。
2.2. 工程
 创建功能,名字为SQLiteTest,这里有两个Activity,一个视图用来显示待办事件列表,另一个用来编辑待办事件
2.3.数据库处理
 数据库帮手:MySQLiteOpenHelper.java
 
Java代码 
package com.loulijun.sqlitetest; 
 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 
 
public class MySQLiteOpenHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "hualang"; 
    private static final int DATABASE_VERSION = 1; 
    //数据库创建语句 
    private static final String DATABASE_CREATE =  
            "create table test(_id integer primary key autoincrement, "+ 
            "category text not null, summary text not null, description text not null);"; 
    public MySQLiteOpenHelper(Context context) { 
        super(context, DATABASE_NAME, null, DATABASE_VERSION); 
         
    } 
    //创建数据库时调用 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
        db.execSQL(DATABASE_CREATE); 
    } 
    //更新数据库时调用,比如更新数据库版本 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        Log.w(MySQLiteOpenHelper.class.getName(), "upgrading database from version "+ 
                oldVersion + " to " + newVersion + ", which will destroy all old data"); 
        db.execSQL("DROP TABLE IF EXISTS test"); 
        onCreate(db); 
    } 
 

  在上面这个助手的基础上,我们可以写类"MyAdapter"。用之来提供查询,创建,更新等功能。通过助手类的open()方法打开数据库。在更新和创建值的时候,可以使用"android.content.ContentValues"类,这个类可以存储键值对,你可以使用列名作为ContentValues的键。
 
Java代码 
package com.loulijun.sqlitetest; 
 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
 
public class MyAdapter { 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_CATEGORY = "category"; 
    public static final String KEY_SUMMARY = "summary"; 
    public static final String KEY_DESCRIPTION = "description"; 
    public static final String DATABASE_TABLE = "test"; 
    private Context context; 
    private SQLiteDatabase db; 
    private MySQLiteOpenHelper dbHelper; 
     
    public MyAdapter(Context context) 
    { 
        this.context = context; 
    } 
     
    public MyAdapter open() throws SQLException 
    { 
        dbHelper = new MySQLiteOpenHelper(context); 
        db = dbHelper.getWritableDatabase(); 
        return this; 
    } 
 &n

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,