.
SQLite 是一個小型的 DataBase,是個輕量化的關聯式資料庫,其體積小、容量有限、速度快、要備份或搬移都很簡單,而且資料庫就是一個檔案,要跨平台也很方便
SQLite 主要可以儲存少量的資料在裝置端,由於是存在裝置端,因此就與現在網路上大部分
的資料庫軟體(SQLSERVER 或 MYSQL等)不同,可以達到離線資料庫存取的功能,本身並不需要藉由網路,因此在資料的存取上更快速,也不會有網路延遲等的問題,類似的應用像是Android 的 sharedpreferences,也可以達到相同的效果
之後有機會再來分享sharedpreferences要怎麼使用
附帶一提,SQLite的資料庫,其附檔名為.db
至於要怎麼檢視裝置端SQLite的內容
最後附上原始碼
MainActivity.java
- package com.example.mikumiku999.sqlite_test;
-
- import android.content.ContentValues;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.TextView;
-
- public class MainActivity extends AppCompatActivity {
-
- private static String DATABASE_TABLE = "students";
- private SQLiteDatabase db;
- private StdDBHelper dbHelper;
- private EditText txtID, txtName, txtGrade, txtNewGrade, command;
- private TextView output;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // 建立SQLiteOpenHelper物件
- dbHelper = new StdDBHelper(this);
- db = dbHelper.getWritableDatabase(); // 開啟資料庫
- // 取得TextView元件
- output = (TextView) findViewById(R.id.lblOutput);
- // 取得EditText元件
- txtID = (EditText) findViewById(R.id.txtID);
- txtName = (EditText) findViewById(R.id.txtName);
- txtGrade=(EditText) findViewById(R.id.txtGrade);
- txtNewGrade=(EditText) findViewById(R.id.txtNewGrade);
- command = (EditText) findViewById(R.id.txtSQL);
- }
- @Override
- protected void onStop() {
- super.onStop();
- db.close(); // 關閉資料庫
- }
- // Button元件的事件處理 - 插入記錄
- public void btn1_Click(View view) {
- long id;
- ContentValues cv = new ContentValues();
- cv.put("_id", Integer.parseInt(txtID.getText().toString()));
- cv.put("name", txtName.getText().toString());
- cv.put("grade", Double.parseDouble(txtGrade.getText().toString()));
- id = db.insert(DATABASE_TABLE, null, cv);
- output.setText("新增記錄成功: " + id);
- command.setText("INSERT INTO Student _id,name,grade
- Values"+txtID.getText().toString()+","+txtName.getText().toString()
- +","+txtGrade.getText().toString());
- } // 更新記錄
- public void btn2_Click(View view) {
- int count;
- int id = Integer.parseInt(txtID.getText().toString());
- ContentValues cv = new ContentValues();
- cv.put("grade", Double.parseDouble(txtNewGrade.getText().toString()));
- count = db.update(DATABASE_TABLE, cv, "_id=" + id, null);
- output.setText("更新記錄成功: " + count);
- command.setText("UPDATE Student Set grade
- ="+ txtNewGrade.getText().toString() + "WHERE id = "+
- txtID.getText().toString());
- } // 刪除記錄
- public void btn3_Click(View view) {
- int count;
- int id = Integer.parseInt(txtID.getText().toString());
- count = db.delete(DATABASE_TABLE, "_id=" + id, null);
- output.setText("刪除記錄成功: " + count);
- command.setText("Delete From Student Where id = "+ txtID.getText().toString());
- } // 查詢所有記錄
- public void btn4_Click(View view) {
- // 查詢整個資料表
- SqlQuery("SELECT * FROM " + DATABASE_TABLE);
- command.setText("SELECT * FROM Student");
- }
- public void btn5_Click(View view) {
- EditText txtSQL = (EditText) findViewById(R.id.txtSQL);
- // 執行輸入SQL指令的查詢
- SqlQuery(txtSQL.getText().toString());
- }
- // 執行SQL查詢
- public void SqlQuery(String sql) {
- String[] colNames;
- String str = "";
- Cursor c = db.rawQuery(sql, null);
- colNames = c.getColumnNames();
- // 顯示欄位名稱
- for (int i = 0; i < colNames.length; i++)
- str += colNames[i] + "\t\t";
- str += "\n";
- c.moveToFirst(); // 第1筆
- // 顯示欄位值
- for (int i = 0; i < c.getCount(); i++) {
- str += c.getString(0) + "\t\t";
- str += c.getString(1) + "\t\t";
- str += c.getString(2) + "\n";
- c.moveToNext(); // 下一筆
- }
- output.setText(str.toString());
- }
- }
StdDBHelper.java
- package com.example.mikumiku999.sqlite_test;
-
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
-
- /**
- * Created by mikumiku999 on 2017/12/30.
- */
-
- public class StdDBHelper extends SQLiteOpenHelper {
- private static final String DATABASE_NAME = "Class";
- private static final int DATABASE_VERSION = 1;
- public StdDBHelper(Context context) {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE students (" +
- "_id integer primary key, " +
- "name text no null, grade real no null)");
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- db.execSQL("DROP TABLE IF EXISTS students");
- onCreate(db);
- }
- }
執行結果
此範例主要演示資料庫的基本功能 新增 修改 與 刪除
1. 一開始建立資料表,裡面完全沒有任何內容
2. 新增一筆資料並顯示資料庫內結果
3. 再新增一筆資料並顯示新增結果
4. 更新編號 2 的成績,顯示時可以看到原本的分數已被修改成新的
5. 刪除 編號 1 的資料內容 因此在顯示時只剩一筆編號2的資料
最後為SQLite的應用 , 雖然也是有點久的作品了
點擊下面連結可看實作結果