从前几章我们分别学习了属性文件存储输数据,内储存存储数据,和外部储存存储数据,今天我们来学习一下android 轻量级数据库Sqlite数据库的数据存储
首先必须了解SQLiteOpenHelper
SQLiteDatabase类本身只是一个数据库的操作类,但是如果要想进行数据库的操作,还需要一个android.database.sqlite.SQLiteOpenHelper类帮助下才可以取得进行,但是,SQLiteOpenHelper类是一个抽象类,所以要使用的时候需要定义其子类,并且在子类中要覆写相应的抽象方法
让一个类继承SQLiteOpenHelper 并=并且复写SQLiteOpenHelper的方法实现
SQLiteOpenHelper常用的方法
1
|
public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
|
构造
|
通过此构造方法指明要操作的数据库名称以及数据库的版本编号
|
2
|
public synchronized void close()
|
普通
|
关闭数据库
|
3
|
public synchronized SQLiteDatabase getReadableDatabase()
|
普通
|
以只读的方式创建或者打开数据库
|
4
|
public synchronized SQLiteDatabase getWritableDatabase()
|
普通
|
以修改的方式创建或者打开数据库
|
5
|
public abstract void onCreate(SQLiteDatabase db)
|
普通
|
创建数据表
|
6
|
public void onOpen(SQLiteDatabase db)
|
普通
|
打开数据表
|
7
|
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
|
普通
|
更新数据表
|
1onCreate()
:在第一次使用数据库的时候会调用此方法生成相应的数据
库表,但是此方法并不是说是在实例化
SQLiteOpenHelper
类的对象时
调用,而是通过对象调用了
getReadableDatabase()
或
getWritableDatabase()
方法时才会调用;
2
onUpgrade()
:当数据库需要进行升级的时候,会调用此方法,一般可
以在此方法之中将数据表删除,并且在删除表之后往往会调用
onCreate()
方法以重新创建新的数据表;
3
open()
:当数据库打开的时候会调用此方法,但是一般情况下用户不需
要覆写此方法。
接下来我们几个列子来学习下sqlite数据库
首先是数据库的创建
html文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="108dp"
android:text="建立数据库" />
</RelativeLayout>
JAVA文件
1让一个类继承SQLiteOpenHelper
2主类
package com.example.sqllitedatabase1;
import java.sql.Date;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class SqlIteOpenHelper extends SQLiteOpenHelper {
public static final String DBNAME = "flyou";//数据库名称
public static final int VERSION = 2;//数据库版本
public static final String TABLENAME = "user_info";//数据表名称
public SqlIteOpenHelper(Context context) {
super(context, DBNAME, null, VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
//sql语句创建数据表
String sql = "CREATE TABLE " + TABLENAME + " ("
+ "id INTEGER PRIMARY KEY ,"
+ "name VARCHAR(50) NOT NULL ," + "birthday DATE NOT NULL)";// SQL语句
db.execSQL(sql);
}
@Override//更新回掉操作
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
String sql = "DROP TABLE IF EXISTS " + TABLENAME;
db.execSQL(sql);
onCreate(db);
}
}
运行后可以在data/data/包名/databases中查看数据库文件
2.使用helper类数据库的增加,删除,更新操作
同样需要一个类继承SQLiteOpenHelper
另外可以定义一个操作数据库的类来实现操作
HTML文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"