SQLite数据库是一个轻量级的数据库 、非常小 、 移植性好、效率高、可靠 ,功能齐全、嵌入式设备因为受到硬件条件的限制所以非常适合使用 SQLite 数据库,android提供了一系列操作SQLite数据库的类
1.SQLiteOpenHelper类,该类主要是创建和更新数据库使用
public class DBHelper extends SQLiteOpenHelper {
private static DBHelper gInstance;
private static final String DATABASE_NAME = "xy.db";
private DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
this(context, name, factory, version, null);
}
//name 数据库名、factory 用来创建对象游标,或者默认为null、 version数据版本 、errorHandler 当sqlite报告一个数据库毁坏错误时,DatabaseErrorHandler会被使用
private DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
super(context, name, factory, version, errorHandler);
}
public static synchronized DBHelper getInstance(Context context, SQLiteDatabase.CursorFactory factory, int version){
if(gInstance == null){
gInstance = new DBHelper(context, DATABASE_NAME, factory, version);
}
return gInstance;
}
public static synchronized DBHelper getInstance(Context context, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler){
if(gInstance == null){
gInstance = new DBHelper(context, DATABASE_NAME, factory, version, errorHandler);
}
return gInstance;
}
@Override//该方法只在创建时,被调用一次
public void onCreate(SQLiteDatabase db) {
//SQLiteDatabase 是操作数据库的增删改查的类
//此处创建数据库
db.execSQL("create table table1(_id integer, name varchar)");
}
@Override//当数据库的版本newVersion比oldVersion高时,此方法会本调用
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//oldVersion 上一次数据库的版本号,newVersion 新数据库的版本号
}
}
该类有两个获取数据库引用的方法,getWritableDatabase()和getReadableDatabase()。getWritableDatabase() 方法以写读方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库
下面介绍一个小实例配合SQLiteDatabase类
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加数据"/>
<Button
android:id="@+id/delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删数据"/>
<Button
android:id="@+id/modify"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="改数据"/>
<Button
android:id="@+id/find"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查数据"/>
</LinearLayout>
public class MainActivity extends AppCompatActivity {
private DBHelper mDbHelper;
private SQLiteDatabase mDatabase;
private int mId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDbHelper = DBHelper.getInstance(MainActivity.this, null, 1);
mDatabase = mDbHelper.getReadableDatabase();
MyOnClickListener listener = new MyOnClickListener();
findViewById(R.id.add).setOnClickListener(listener);
findViewById(R.id.delete).setOnClickListener(listener);
findViewById(R.id.modify).setOnClickListener(listener);
findViewById(R.id.find).setOnClickListener(listener);
}
class MyOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.add:
add();
break;
case R.id.delete:
delete();
break;
case R.id.modify:
modify();
break;
case R.id.find:
find();
break;
}
}
}
private void find() {
Cursor c = mDatabase.query("table1", null, null, null, null, null, null);
if(c != null){
while (c.moveToNext()){
int id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
System.out.println("_id = " + id + " name = " + name);
}
c.close();
}
}
private void modify() {
ContentValues values = new ContentValues();
values.put("_id", mId);
values.put("name", "xiao" + mId);
int count = mDatabase.update("table1", values, "_id = ?", new String[]{String.valueOf(mId)});
System.out.println("修改了" + count + "条");
}
private void delete() {
int count = mDatabase.delete("table1", "_id = ?", new String[]{String.valueOf(mId)});
--mId;
System.out.println("删除了" + count + "条");
}
private void add() {
ContentValues values = new ContentValues();
values.put("_id", mId);
values.put("name", "wurui" + mId);
long id = mDatabase.insert("table1", null, values);
System.out.println("成功添加一条 id为" + id);
++mId;
}
@Override
protected void onDestroy() {
if(mDatabase != null){
mDatabase.close();
}
if(mDbHelper != null){
mDbHelper.close();
}
super.onDestroy();
}
}
代码相对于简单,在此不过多介绍了,可以看到,增删改查,都是通过SQLiteDatabase类完成的