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类完成的