廢話不多說 看代碼注釋
1 public class MainActivity extends AppCompatActivity { 2 3 private MyDatabaseHelper dbHelper; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 3); // 執行這句並不會創建數據庫文件 11 Button btnCreateDatabase = (Button) findViewById(R.id.button); 12 btnCreateDatabase.setOnClickListener(new View.OnClickListener() { 13 @Override 14 public void onClick(View v) { 15 dbHelper.getWritableDatabase(); // 執行這句才會創建數據庫文件 16 } 17 }); 18 19 } 20 }
--
1 public class MyDatabaseHelper extends SQLiteOpenHelper { 2 3 public static final String CREATE_BOOK = "create table book (" + 4 "id integer primary key autoincrement, " + 5 "author text, " + 6 "price real," + 7 "pages integer, " + 8 "name text)"; 9 10 private Context mContext; 11 12 public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 13 super(context, name, factory, version); 14 15 mContext = context; 16 } 17 18 /** 19 * 數據庫已經創建過了, 則不會執行到,如果不存在數據庫則會執行 20 * @param db 21 */ 22 @Override 23 public void onCreate(SQLiteDatabase db) { 24 db.execSQL(CREATE_BOOK); // 執行這句才會創建表 25 26 Toast.makeText(mContext, "create succeeded", Toast.LENGTH_SHORT).show(); 27 28 } 29 30 /** 31 * 創建數據庫時不會執行,增大版本號升級時才會執行到 32 * @param db 33 * @param oldVersion 34 * @param newVersion 35 */ 36 @Override 37 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 38 // 在這里面可以把舊的表 drop掉 從新創建新表, 39 // 但如果數據比較重要更好的做法還是把舊表的數據遷移到新表上,比如升級qq聊天記錄被刪掉肯定招罵 40 Toast.makeText(mContext, "onUpgrade oldVersion:" + oldVersion + " newVersion:" + newVersion, Toast.LENGTH_SHORT).show(); 41 } 42 }
驗證數據庫文件是否存在的方法看最后部分
剩下的工作就是對數據庫表的增刪改查了
首先通過下面的代碼獲得一個引用以便操作數據庫
1 SQLiteDatabase db = dbHelper.getWritableDatabase();
對於增刪改都可以用 db.execSQL(String sql); 來執行sql語句。 例如增加一條記錄
1 db.execSQL("insert into book(name , author, pages, price) values(\"Android數據庫操作指南\", \"panda fang\", 200, 35.5)");
遇到字符串要轉義 有沒有覺得很蛋疼, 用下面的方法就好多了
1 db.execSQL("insert into book(name , author, pages, price) values(?, ? ,? ,? )", new String[]{"Android數據庫操作指南", "panda fang", "200", "35.5"});
sql 中用 ? 占位 后面傳入真正的參數, 由於在創建表的時候已經約定pages 和 price字段的數據類型為integer和real, 雖然代碼中寫的是字符串並不影響,存入數據庫會自動處理的。數組嘛,必須與其他的元素類型一致。 這第二個方式是 execSQL(String sql)的重載方法 api是 public void execSQL(String sql, Object[] bindArgs) throws SQLException
對於查詢則要使用 rawQuery(String sql, String[] selectionArgs) , 因為 execSQL返回void ,而查詢需要訪問查詢結果。方法如下
1 Cursor cursor = db.rawQuery("select * from book", null); 2 while (cursor.moveToNext()) 3 { 4 String name = cursor.getString(cursor.getColumnIndex("name")); 5 String author = cursor.getString(cursor.getColumnIndex("author")); 6 Log.i(TAG, "name:" + name + " author:" + author); 7 } 8 cursor.close();
如何檢查數據庫文件是否存在,以及檢查表中的數據呢。
前提是使用模擬器或者root過的真機。從 android studio 菜單中 Tools -> Android -> Android Device Monitor -> File Explorer 找到 data/data/程序包名/databases 目錄
查看是否存在數據庫文件。如果存在可以導出到電腦上, 用 以下工具查看數據庫中的表
sqlitespy | 簡潔輕量 免費 |
SQLite Studio | 免費 |
SQLite Expert | 強大重量 個人版免費 專業版收費 |
Navicat for SQLite | 強大 收費 |
更多請自行搜索...... |
還有一種方式是使用android sdk 中的命令行工具操作, 命令行操作比較麻煩,后面專門開一篇講。
SQL 速查手冊
SQL 教程 http://www.w3school.com.cn/sql/index.asp