Android 提供了对 SQLite 数据库的完全支持。应用中的任何类(不包括应用外部的类)均可按名称访问自己所创建的任何数据库。
创建新 SQLite 数据库的推荐方法是创建 SQLiteOpenHelper
的子类并覆盖 onCreate()
方法,在此方法中,可以执行 SQLite 命令以创建数据库中的表。
Db.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class Db extends SQLiteOpenHelper {
public Db(Context context) {
//第二个参数是数据库的名称,第四个参数是数据库的版本
super(context, "db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建一个表名称为“user”,这个表里有两列数据name和score
db.execSQL("CREATE TABLE user("
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT,"//这个参数必须要
+ "name TEXT DEFAULT \"\","
+ "score INTEGER \"\",");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
关于”_id INTEGER PRIMARY KEY AUTOINCREMENT,”安卓官方是这么说的:
Android 没有实施标准 SQLite 概念之外的任何限制。我们推荐包含一个可用作唯一 ID 的自动增量值关键字段,以便快速查找记录。 私有数据不要求这样做,但如果您实现了一个内容提供程序,则必须包含使用
BaseColumns._ID
常量的唯一 ID。
以此作为数据库的一个基类,可以通过用 getWritableDatabase()
和 getReadableDatabase()
进行数据库的读写操作。
private Db db;
private SQLiteDatabase dbwrite;
private ContentValues cv;
private Cursor cursor = null;
db = new Db(MainActivity.this);
dbRead = db.getReadableDatabase(); //读操作
dbwrite = db.getWritableDatabase();//写操作
//写操作
cv = new ContentValues();//初始化一个ContentValues,方便对每类数据进行操作
cv.put("name", "Tom"); //将name这一类数据设为Tom
cv.put("score", 100); //设置score为100
dbwrite.insert("user", null, cv); //把数据插入user表
dbwrite.close(); //写操作完成之后一定要close
//读操作
//关于查询数据库,就是query函数的功能,这里就不赘述了
cursor = dbRead.query("user", null, null, null, null, null, "score desc"); //按score降序排列读出
//再将数据从cursor中取出来就行
while (cursor.moveToNext()) {
System.out.println(cursor.getString(cursor.getColumnIndex("name"))
+ cursor.getString(cursor.getColumnIndex("score"));
}
//删除数据
bwrite.delete("user", "score=?",new String[] {"99","100"}); //删除表user中score等于99和100的数据
bwrite.delete("user", "name=?",new String[] {"Tom"}); //删除表user中name为Tom的数据
//关于查询数据库,就是query函数的功能,这里就不赘述了