Android中实现SQLite数据库CRUD操作的两种方式
生活随笔
收集整理的這篇文章主要介紹了
Android中实现SQLite数据库CRUD操作的两种方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android中實現SQLite數據庫CRUD操作的兩種方式
SQLite是一款輕量級的關系型數據庫,具有運行速度、占用資源少的特點。通常只需要幾百KB的內存就夠了,因此特別適合在移動設備上使用。SQLite不僅支持標準的SQL語法,還遵循數據庫的ACID事務。Android為了讓我們更方便的管理數據庫,專門提供了一個SQLiteOpenHelper幫助類,借助這個類我們很容易對數據庫進行創建和升級。
相同點:這兩個方法都可以創建或打開一個現有的數據庫,如果數據庫已經存在則直接打開,否則創建一個新的數據庫,并返回一個可以對數據庫進行讀寫的對象。
不同點:當磁盤已滿不可寫入時,getReadableDatabase()方法返回的對象將以只讀的方式去打開數據庫,而getWritableDatabase()方法則會拋出異常。
Android中實現SQLite數據庫CRUD操作的方式有兩種:
1:直接用SQL語句進行操作
2:調用Android提供的系統函數
本文為了更好的說明對數據庫的增刪改查操作,做了兩個前提條件:
1: 定義了一個User.java類
2:定義一個MySQLiteOpenHelper 并繼承SQLiteOpenHelper
package com.example.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log; public class MySQLiteOpenHelper extends SQLiteOpenHelper{ /*** @param context: 上下文 * @param name:數據庫的名稱* @param factory: null代表使用系統默認的游標* @param version:數據庫文件的版本號,必須大于等于1*/ public MySQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {super(context, name, factory, version); } /*** 用于創建表的結構* 第一次使用MySQLiteOpenHelper類時,如果表結構沒有被創建就執行一次,創建表的結構,如果表的結構創建了就不執行*/ @Override public void onCreate(SQLiteDatabase db) {Log.d("tag", "oncrate");String sql = "create table t_user (_id integer primary key,name varchar(20), phone varchar(20) ,age integer)";db.execSQL(sql ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} }1. 直接用SQL語句進行操作
1.1 直接用SQL語句插入數據
public void insertOne(View view){//得到一個MySQLiteOpenHelper對象MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);//拿到SQLiteDateBase對象SQLiteDatabase dataBase = sqLiteOpenHelper.getReadableDatabase();//向表中插入數據String sql= "insert into t_user (name,phone,age) values (?,?,?)";dataBase.execSQL(sql, new Object[]{"zhangsan"+new Random().nextInt(100),(5000+new Random().nextInt(100)+""),new Random().nextInt(100)});//關閉資源dataBase.close();Toast.makeText(this, "方法1插入數據成功!", Toast.LENGTH_SHORT).show(); }1.2 直接用SQL語句刪除數據
public void deleteOne(View view){//得到一個MySQLiteOpenHelper對象MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getWritableDatabase();//刪除age < 30 的userString sql = "delete from t_user where age < ?";database.execSQL(sql , new Object []{30});//關閉資源database.close();Toast.makeText(this, "方法1刪除數據成功!", Toast.LENGTH_SHORT).show(); }1.3 直接用SQL語句修改數據
public void updateOne(View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);//得到SQLiteDataBase對象SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//更新 name = zhangsan45時,age修改為58;String sql = "update t_user set age = ? where name = ?";database.execSQL(sql , new Object[]{58,"zhangsan45"});//關閉資源database.close();Toast.makeText(this, "方法1更新數據成功!", Toast.LENGTH_SHORT).show(); }1.4 直接用SQL語句查詢數據
public void queryOne(View view){ArrayList<User> userList = new ArrayList<User>();MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);//得到SQLiteDataBase對象SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//查詢年齡大于50,且desc排序String sql = "select name ,phone,age from t_user where age > ? order by age desc";Cursor cursor = database.rawQuery(sql, new String[]{50+""});while(cursor.moveToNext()){User user = new User();user.setName(cursor.getString(0));user.setPhone(cursor.getString(1));user.setAge(cursor.getInt(2));userList.add(user);}//釋放cursorcursor.close();//關閉資源database.close();//在一個TextView中顯示查詢到的數據tv_data.setText(userList.toString());Toast.makeText(this, "方法1查詢數據成功!", Toast.LENGTH_SHORT).show(); }2. 調用Android提供的系統函數
2.1 調用Android提供的系統函數插入數據
public void insertTwo(View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();ContentValues values = new ContentValues();values.put("name", "lisi"+new Random().nextInt(100));values.put("phone", "8000"+ new Random().nextInt(100));values.put("age", new Random().nextInt(100));long insertNum = database.insert("t_user", null, values );Toast.makeText(this, "成功插入第"+insertNum+"條數據!", Toast.LENGTH_SHORT).show();//關閉資源database.close(); }2.2 調用Android提供的系統函數刪除數據
public void deleteTwo (View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//刪除 age>90的userdatabase.delete("t_user", "age > ?", new String []{"90"});Toast.makeText(this, "方法2刪除數據成功!", Toast.LENGTH_SHORT).show();//關閉資源database.close(); }2.3 調用Android提供的系統函數修改數據
public void updateTwo(View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//將name = zhangsan96 的age改為68ContentValues values = new ContentValues();values.put("age", "68");int update = database.update("t_user", values , "name = ?", new String[]{"zhangsan96"});Toast.makeText(this, "方法2更新數據成功!", Toast.LENGTH_SHORT).show();//關閉資源database.close(); }2.4 調用Android提供的系統函數查詢數據
public void queryTwo(View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//查詢年齡大于60的userString sql = "select name ,phone,age from t_user where age > ?";Cursor cursor = database.rawQuery(sql , new String[]{"60"});ArrayList<User> list = new ArrayList<User>();while(cursor.moveToNext()){User user = new User();user.setName(cursor.getString(0));user.setPhone(cursor.getString(1));user.setAge(cursor.getInt(2));list.add(user);}Toast.makeText(this, "方法2查詢數據成功!", Toast.LENGTH_SHORT).show();//關閉資源database.close();//顯示查詢到的數據tv_data.setText(list.toString());}OK,本文到此結束。讓我們共同學習,一起進步。
總結
以上是生活随笔為你收集整理的Android中实现SQLite数据库CRUD操作的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++11:继承构造函数
- 下一篇: 浅谈Android事件分发机制