Android 數據庫操作


廢話不多說 看代碼注釋

 

 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

SQL 教程 | 菜鳥教程 http://www.runoob.com/sql/sql-tutorial.html

SQL Tutorial https://www.w3schools.com/sql/default.asp (英文)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM