Android資料庫一:sqlite語句增刪改查
SQLite資料型別
一般資料採用的固定的靜態資料型別,而SQLite採用的是動態資料型別,會根據存入值自動判斷。SQLite具有以下五種常用的資料型別:
NULL: 這個值為空值;
VARCHAR(n):長度不固定且其最大長度為 n 的字串,n不能超過 4000;
CHAR(n):長度固定為n的字串,n不能超過 254;
INTEGER: 值被標識為整數,依據值的大小可以依次被儲存為1,2,3,4,5,6,7,8;
REAL: 所有值都是浮動的數值,被儲存為8位元組的IEEE浮動標記序號;
TEXT: 值為文字字串,使用資料庫編碼儲存(TUTF-8, UTF-16BE or UTF-16-LE);
BLOB: 值是BLOB資料塊,以輸入的資料格式進行儲存。如何輸入就如何儲存,不改變格式;
DATA :包含了 年份、月份、日期;
TIME: 包含了 小時、分鐘、秒;
SqliteOpenHelper的用法:
該類的方法:
1、getReadableDatabase() 建立或者開啟一個可讀寫的資料庫,如果出現問題(磁碟滿等),則開啟一個只讀的資料庫。
2、getWritableDatabase() 獲得一個可讀寫的資料庫。如果磁碟滿則會拋異常。
3、onCreate(SQLiteDatabase db) 只有第一次建立這個資料庫的時候呼叫。一般在這個方法中建立資料的相應表。
4、onOpen(SQLiteDatabase db) 當每次開啟資料庫的時候都會呼叫。這個方法很少使用
5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 當升級資料庫即資料庫的版本號發生改變的時候呼叫,一般如果需要修改表結構就寫在這裡.
//db.execSQL(“alert 表名 add 列名列資料型別”);
6、close() 關閉開啟的所有資料庫物件
使用步驟:
建立SQLiteOpenHelper類的子類MySQLiteOpenHelper 類,實現SQLiteOpenHelper類中的抽象方法onCreate()和onUpgrade();
呼叫 MySQLiteOpenHelper 物件的getWritableDatabase 或 getReadableDatabase方法,獲得SQLiteDatabase 物件;
建立表。
呼叫SQLiteDatabase 物件的execSQL()方法,執行 update,insert,delete操作;呼叫rawQuery()方法執行select查詢操作;
如果執行的是查詢操作,則對返回的Cursor進一步處理。
案例
SQLiteOpenHelper
public class MyDBHelper extends SQLiteOpenHelper {
public MyDBHelper(Context context) {
super(context, "my.db", null, 1);
}
/**
* 第一次建立資料庫的時候回撥該方法,建立表以及表資料的初始化
*
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table person(_id integer primary key autoincrement,name text)";
db.execSQL(sql);
//可以給表初始化一些資料
//db.execSQL("insert into person(name) values('小米')");
}
/**
* 資料庫升級的時候回撥該方法
*
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//給表新增一個欄位
//db.execSQL("alter table person add age integer");
}
/**
* 資料庫開啟的時候回撥該方法
*
* @param db
*/
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
}
}
Dao類,增刪改查方法
/**
* 使用SQL語句增刪改查
* Created by xiaoyehai on 2017/12/30/030.
*/
public class DataBaseDao {
private final MyDBHelper mDbHelper;
public DataBaseDao(Context context) {
mDbHelper = new MyDBHelper(context);
}
/**
* 插入
*
* @param dataBean
*/
public void insert(DataBean dataBean) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("insert into person(name) values(" + "'" + dataBean.getName() + "'" + ")");
db.close();
}
}
/**
* 更新
*
* @param id
* @param dataBean
*/
public void update(int id, DataBean dataBean) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("update person set name=? where _id=?", new Object[]{dataBean.getName(), id});
db.close();
}
}
/**
* 根據id刪除
*/
public void delete(int id) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("delete from person where _id=?", new Object[]{id});
db.close();
}
}
/**
* 刪除所有
*/
public void deleteAll() {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("delete from person");
db.close();
}
}
/**
* 查詢所有
*/
public List<DataBean> queryAll() {
List<DataBean> list = new ArrayList<>();
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
Cursor cursor = db.rawQuery("select * from person", null);
while (cursor.moveToNext()) {
//int id = cursor.getInt(0);
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
DataBean dataBean = new DataBean(name);
list.add(dataBean);
}
cursor.close();
db.close();
}
return list;
}
/**
* 根據id查詢
* 有問題
*/
public List<DataBean> query(int id) {
List<DataBean> list = new ArrayList<>();
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
Cursor cursor = db.rawQuery("select * from person where _id=?", new String[]{id + ""});
while (cursor.moveToNext()) {
//int id = cursor.getInt(0);
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
DataBean dataBean = new DataBean(name);
list.add(dataBean);
}
cursor.close();
db.close();
}
return list;
}
Activity程式碼
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_add;
private Button btn_delete;
private Button btn_update;
private Button btn_query;
private ListView mListView;
private DataBaseDao mDataBaseDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
mDataBaseDao = new DataBaseDao(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add: //新增
addData();
break;
case R.id.btn_delete: //刪除
deleteData();
break;
case R.id.btn_update: //更新
updateData();
break;
case R.id.btn_query: //查詢
queryData();
break;
}
}
private void queryData() {
List<DataBean> list = mDataBaseDao.queryAll(); //查詢全部
//List<DataBean> list = mDataBaseDao.query(5); //根據id查詢
MyAdapter myAdapter = new MyAdapter(this, list, R.layout.item);
mListView.setAdapter(myAdapter);
}
private void updateData() {
DataBean dataBean = new DataBean("肖葉海更新");
mDataBaseDao.update(6, dataBean);
}
private void deleteData() {
//mDataBaseDao.delete(5); //根據id刪除
mDataBaseDao.deleteAll(); //刪除所有
}
private void addData() {
for (int i = 0; i < 10; i++) {
DataBean dataBean = new DataBean("肖葉海" + i);
mDataBaseDao.insert(dataBean);
}
}
private void initView() {
btn_add = (Button) findViewById(R.id.btn_add);
btn_delete = (Button) findViewById(R.id.btn_delete);
btn_update = (Button) findViewById(R.id.btn_update);
btn_query = (Button) findViewById(R.id.btn_query);
mListView = (ListView) findViewById(R.id.listview);
btn_add.setOnClickListener(this);
btn_delete.setOnClickListener(this);
btn_update.setOnClickListener(this);
btn_query.setOnClickListener(this);
}
}
佈局檔案
<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.originaldb.MainActivity">
<Button
android:id="@+id/btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="新增"/>
<Button
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="刪除"/>
<Button
android:id="@+id/btn_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="更新"/>
<Button
android:id="@+id/btn_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查詢"/>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
實體類
public class DataBean {
private String name;
public DataBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}