本文主要講解Andriod開發中Sqlite的簡單應用(增刪改查),僅供學習分享使用 ...
概述
Android對Sqlite提供了完全友好的支持,在應用程式內部,都可以通過名稱訪問任何的資料庫。建議通過SQLiteOpenHelpe的子類並通過重寫onCreate() 方法進行創建數據表。本文主要講解Andriod開發中Sqlite的簡單應用(增刪改查),僅供學習分享使用。
涉及知識點
- SQLiteOpenHelper 管理創建資料庫和版本管理的幫助類(抽象類)。
- onCreate 創建數據表的方法
- execSQL 執行一個非Select的語句,沒有返回信息。
- SQLiteDatabase 管理Sqlite數據的對象,顯示提供一組方法來管理資料庫(CRUD)。
- SimpleCursorAdapter 一個簡易的適配器,用來將Cursor適配數據到控制項上。
- ContentValues 存儲一組數據值(key-value)。
示例效果圖
如下圖所示:
資料庫幫助類
代碼如下:
1 package com.hex.demosqlite; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 import android.database.sqlite.SQLiteOpenHelper; 6 7 /** 8 * Created by Administrator on 2019/4/4. 9 */ 10 public class DatabaseHelper extends SQLiteOpenHelper { 11 12 private static final String DB_NAME="persons.db"; 13 14 private static final int DB_VERSION=1; 15 16 public DatabaseHelper(Context context) { 17 super(context, DB_NAME, null, DB_VERSION); 18 } 19 20 /** 21 * 創建資料庫,指定資料庫名稱,版本號 22 * @param db 23 */ 24 @Override 25 public void onCreate(SQLiteDatabase db) { 26 String sql="create table person(_id integer primary key autoincrement not null, name char(10),nickname char(10))"; 27 db.execSQL(sql); 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 if(newVersion>oldVersion){ 39 onCreate(db); 40 } 41 } 42 }
新增(Insert)
代碼如下:
1 /** 2 * 新增 3 * 4 * @param v 5 */ 6 public void add(View v) { 7 /** //一般不使用此種方法,因為execSQL方法沒有返回值 8 String sql="insert into person(name,nickname)values('宋江','及時雨')"; 9 db.execSQL(sql); 10 */ 11 ContentValues values = new ContentValues(); 12 values.put("name", "宋江"); 13 values.put("nickname", "及時雨"); 14 //返回值為插入行的行號 15 long result = db.insert("person", null, values); 16 if (result > 0) { 17 Toast.makeText(this, "插入成功", Toast.LENGTH_SHORT).show(); 18 } else { 19 Toast.makeText(this, "插入失敗", Toast.LENGTH_SHORT).show(); 20 } 21 }
查詢(Query)
代碼如下:
1 /** 2 * 查詢 3 * 4 * @param v 5 */ 6 public void query(View v) { 7 /* 8 String sql="select * from person where name=?"; 9 Cursor cursor = db.rawQuery(sql,new String[]{"宋江"}); 10 */ 11 //columns 如果為空,則表示所有列 12 Cursor cursor = db.query("person", null, "name=?", new String[]{"宋江"}, null, null, null); 13 while (cursor.moveToNext()) { 14 int nameIndex = cursor.getColumnIndex("name"); 15 int nickIndex = cursor.getColumnIndex("nickname"); 16 String nameValue = cursor.getString(nameIndex); 17 String nickValue = cursor.getString(nickIndex); 18 String s = "name=" + nameValue + ",nickname=" + nickValue; 19 Toast.makeText(this, s, Toast.LENGTH_SHORT).show(); 20 } 21 adaper.swapCursor(cursor); 22 adaper.notifyDataSetChanged(); 23 }
修改(Update)
代碼如下:
1 /** 2 * 更新 3 * 4 * @param v 5 */ 6 public void update(View v) { 7 // String sql="update person set nickname=? where name=?"; 8 9 ContentValues values = new ContentValues(); 10 values.put("nickname", "及時雨2"); 11 //更新語句受影響的行數 12 int result = db.update("person", values, "name=?", new String[]{"宋江"}); 13 if (result > 0) { 14 Toast.makeText(this, "更新成功", Toast.LENGTH_SHORT).show(); 15 } else { 16 Toast.makeText(this, "更新失敗", Toast.LENGTH_SHORT).show(); 17 } 18 }
刪除(Delete)
代碼如下:
1 /** 2 * 刪除 3 * 4 * @param v 5 */ 6 public void delete(View v) { 7 //String sql="delete person where name=?"; 8 9 //受刪除語句影響的行數 10 int result = db.delete("person", "name=?", new String[]{"宋江"}); 11 if (result > 0) { 12 Toast.makeText(this, "刪除成功", Toast.LENGTH_SHORT).show(); 13 } else { 14 Toast.makeText(this, "沒有刪除成功", Toast.LENGTH_SHORT).show(); 15 } 16 }
備註
千里之行,始於足下!