布局文件
創建了四個按鍵,分別對應增刪改查
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" tools:context="xidian.dy.com.chujia.MainActivity"> <Button android:id="@+id/btn_insert" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="插入一條數據"/> <Button android:id="@+id/btn_query" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查詢當前數據" /> <Button android:id="@+id/btn_update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="修改一條數據"/> <Button android:id="@+id/btn_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="刪除一條數據"/> </LinearLayout>
數據庫操作
package xidian.dy.com.chujia; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private SQLiteDatabase db; private MainActivity mContext; private int i = 1; @Override protected void onCreate(Bundle savedInstanceState) { mContext = MainActivity.this; super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyDBOpenHelper myDBHelper = new MyDBOpenHelper(mContext, "my.db", null, 1); db = myDBHelper.getWritableDatabase(); bindViews(); } private void bindViews() { Button btn_insert = (Button) findViewById(R.id.btn_insert); Button btn_query = (Button) findViewById(R.id.btn_query); Button btn_update = (Button) findViewById(R.id.btn_update); Button btn_delete = (Button) findViewById(R.id.btn_delete); if(btn_query != null) btn_query.setOnClickListener(this); if(btn_insert != null) btn_insert.setOnClickListener(this); if(btn_update != null) btn_update.setOnClickListener(this); if(btn_delete != null) btn_delete.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_insert: ContentValues values1 = new ContentValues(); //name為數據庫中屬性名,第二個為欲插入的值 values1.put("name", "呵呵~" + i); i++; //參數依次是:表名,強行插入null值得數據列的列名,一行記錄的數據 db.insert("person", null, values1); Toast.makeText(mContext, "插入完畢~", Toast.LENGTH_SHORT).show(); break; case R.id.btn_query: StringBuilder sb = new StringBuilder(); //參數依次是:表名,列名,where約束條件,where中占位符提供具體的值,指定group by的列,進一步約束 //指定查詢結果的排序方式 Cursor cursor = db.query("person", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { int id = cursor.getInt(cursor.getColumnIndex("_id")); String name = cursor.getString(cursor.getColumnIndex("name")); sb.append("id:" + id + ":" + name + "\n"); } while (cursor.moveToNext()); } cursor.close(); Toast.makeText(mContext, sb.toString(), Toast.LENGTH_SHORT).show(); break; case R.id.btn_update: ContentValues values2 = new ContentValues(); values2.put("name", "嘻嘻~"); //參數依次是表名,修改后的值,where條件,以及約束,如果不指定三四兩個參數,會更改所有行 db.update("person", values2, "name = ?", new String[]{"呵呵~2"}); break; case R.id.btn_delete: //參數依次是表名,where條件,約束 db.delete("person", "_id = ?", new String[]{"3"}); //多個條件 // db.delete("person", "_id=? and name=?", new String[]{"1", "小名"}); break; } } }
這里先創建一個數據庫助手,通過該助手獲取數據庫操作對象。利用該對象提供的API來操作數據庫。
數據庫助手類
package xidian.dy.com.chujia; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by dy on 2016/6/13. */ public class MyDBOpenHelper extends SQLiteOpenHelper { public MyDBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {super(context, "my.db", null, 1); } @Override //數據庫第一次創建時被調用 public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE person(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20))"); } //軟件版本號發生改變時調用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL"); } }
事務
如果在數據庫操作中使用到了事務可以參考以下的代碼
//轉賬事物 public void transaction(){ try { db.beginTransaction(); ContentValues values = new ContentValues(); values.put("salary", 9000); db.update("person",values,"name=?", new String[]{"小王"}); values.clear(); values.put("salary", 11000); db.update("person", values, "name=?", new String[]{"小張"}); //設置事務執行成功 db.setTransactionSuccessful(); }finally { //關閉事物,同時提交,如果已經設置事務執行成功,那么sql將會生效,否則SQL回滾 db.endTransaction(); } }