SQLite是Android中内置的数据库,SQLite是轻量级数据库,支持标准的SQL语法,并且支持ACID事物。
在Android中提供了SQLIteOPenHelper类,帮助我们使用SQLite。SQLite是一个抽象类,其中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须重写。SQLiteOpenHelper 中还有两个非常重要的实例方法, getReadableDatabase() 和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。
SQLiteOpenHelper 中有两个构造方法可供重写。一般选择参数少的进行重写。第一个参数是Context,第二个参数是数据库的名称,第三个参数是自己定义的Cursor,一般我们传人null,第四个是当前数据库的版本号。
1.对数据库的操作
对数据的操作无非为四种:增删改差,对应到数据库里面是,insert(增加数据),delete(删除数据),update(修改数据),select(查询数据)。
SQLite中提供了insert()方法进行插入数据,需要提供3个参数,第一个是表名,第二个是一般为null,第三个参数ContentValue对象,包含需要的值.
提供update()方法进行修改数据,需要提供4个参数,第一是表名,第二个是contentValue对象,第三,四个参数决定对哪些数据进行修改,为指定则默认所有。
提供delete()方法对数据进行删除,需要提供3个参数,第一是表名,第二,三两个参数指定要删除的数据的条件。未指定则默认所有。
其他query()方法对数据进行查询,需要提供7个参数,是最复杂的。第一个参数指定表名,第二个参数指定所需要的列,第三、四个参数指定查询哪些数据,第五、六个参数和组有关。一般现在直接用null,最后一个是排序方式。
下面来看具体的代码,
首先是布局文件,我们只为每个功能设定了一个按钮
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 3 android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 4 android:paddingRight="@dimen/activity_horizontal_margin" 5 android:paddingTop="@dimen/activity_vertical_margin" 6 android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" 7 android:orientation="vertical" 8 > 9 10 11 <Button 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content" 14 android:id="@+id/create_database" 15 android:text="create database" 16 /> 17 18 <Button 19 android:layout_width="match_parent" 20 android:layout_height="wrap_content" 21 android:id="@+id/add_btn" 22 android:text="add data" 23 /> 24 25 <Button 26 android:layout_width="match_parent" 27 android:layout_height="wrap_content" 28 android:id="@+id/update_btn" 29 android:text="update data" 30 /> 31 32 <Button 33 android:layout_width="match_parent" 34 android:layout_height="wrap_content" 35 android:id="@+id/delete" 36 android:text="delete data" 37 /> 38 <Button 39 android:layout_width="match_parent" 40 android:layout_height="wrap_content" 41 android:id="@+id/select_btn" 42 android:text="search a data" 43 /> 44 45 </LinearLayout>
然后我们定义了MyDataBaseHelper继承DatabaseHelpler,代码如下
1 public class MyDatabaseHelper extends SQLiteOpenHelper { 2 3 4 public static final String CREATE_BOOK = "create table Book (" 5 +"id integer primary key," 6 +"author text," 7 +"price real," 8 +"pages integer," 9 +"name text)"; 10 11 12 private Context mContext; 13 14 public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 15 super(context, name, factory, version); 16 mContext = context; 17 } 18 19 20 @Override 21 public void onCreate(SQLiteDatabase db) { 22 db.execSQL(CREATE_BOOK);//用sql语句直接创建表 23 24 Toast.makeText(mContext,"create successed",Toast.LENGTH_LONG).show(); 25 } 26 27 @Override 28 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 29 30 } 31 }
最后在MainActivity.java中使用
1 public class MainActivity extends AppCompatActivity { 2 3 private MyDatabaseHelper dbHelper; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1); 9 Button createdb = (Button)findViewById(R.id.create_database); 10 createdb.setOnClickListener(new View.OnClickListener() { 11 @Override 12 public void onClick(View v) { 13 dbHelper.getWritableDatabase(); 14 } 15 }); 16 17 18 Button addData = (Button)findViewById(R.id.add_btn); 19 addData.setOnClickListener(new View.OnClickListener() { 20 @Override 21 public void onClick(View v) { 22 SQLiteDatabase db = dbHelper.getWritableDatabase(); 23 ContentValues values = new ContentValues(); 24 values.put("id",1); 25 values.put("author","Tao Lin"); 26 values.put("pages",555); 27 values.put("price", 65.9); 28 values.put("name", "first code"); 29 db.insert("Book", null, values);//插入第一条数据 30 values.clear(); 31 values.put("id", 2); 32 values.put("author","Dan Brown"); 33 values.put("pages",510); 34 values.put("price",19.95); 35 values.put("name","the lost symbol"); 36 db.insert("Book", null, values);//插入第二条数据 37 38 39 } 40 }); 41 42 Button updataData = (Button)findViewById(R.id.update_btn); 43 updataData.setOnClickListener(new View.OnClickListener() { 44 @Override 45 public void onClick(View v) { 46 SQLiteDatabase db = dbHelper.getWritableDatabase(); 47 ContentValues values = new ContentValues(); 48 values.put("price",50.99); 49 db.update("Book", values, "name = ?", new String[]{"first code"}); 50 } 51 }); 52 53 54 Button deleteData = (Button)findViewById(R.id.delete); 55 deleteData.setOnClickListener(new View.OnClickListener() { 56 @Override 57 public void onClick(View v) { 58 SQLiteDatabase db = dbHelper.getWritableDatabase(); 59 db.delete("Book","pages>?" ,new String[]{"550"}); 60 } 61 }); 62 63 Button selectData = (Button)findViewById(R.id.select_btn); 64 selectData.setOnClickListener(new View.OnClickListener() { 65 @Override 66 public void onClick(View v) { 67 SQLiteDatabase db = dbHelper.getWritableDatabase(); 68 Cursor cursor = db.query("Book",null,null,null,null,null,null); 69 if (cursor.moveToNext()){ 70 do{ 71 String name = cursor.getString(cursor.getColumnIndex("name")); 72 String author = cursor.getString(cursor.getColumnIndex("author")); 73 int pages = cursor.getInt(cursor.getColumnIndex("pages")); 74 double price = cursor.getDouble(cursor.getColumnIndex("price")); 75 76 Log.d("MainActivity","Book name is "+name); 77 Log.d("MainActivity","Book author is "+author); 78 Log.d("MainActivity","Book pages is "+pages); 79 Log.d("MainActivity","Book price is "+price); 80 81 82 }while (cursor.moveToNext()); 83 84 } 85 cursor.close(); 86 87 88 } 89 }); 90 91 } 92 93 94 }
如果你对SQL语句非常熟悉,Android也支持直接用SQL语句对数据库进行访问。具体的下次再说。