Android 中關於增刪改查資料庫表實踐
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/create_database"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Create database"/>
<Button
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="add data"/>
<Button
android:id="@+id/delete_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="delete data"/>
<Button
android:id="@+id/update_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="update data"/>
<Button
android:id="@+id/query_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="query data"/>
</LinearLayout>
package com.activitytest.databasetest;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
/**
* SQLiteOpenHelper是抽象類,必須繼承它才能使用
* SQLite最大的特點是你可以儲存任何型別的資料到任何欄位中,無論這列宣告的資料型別是什麼。
* 例如:可以在Integer型別的欄位中存放字串,或者在布林型欄位中存放浮點數,或者在字元型欄位中存放日期型值。
* 但有一種情況例外:定義為INTEGER PRIMARY KEY的欄位只能儲存64位整數,當向這種欄位中儲存除整數以外的資料時,將會產生錯誤。
* 另外, SQLite 在解析create table 語句時,會忽略 create table 語句中跟在欄位名後面的資料型別資訊
* Created by 陳偉欽 on 2018/9/1.
*/
public class MyDatabaseHelper extends SQLiteOpenHelper {
//把建立資料庫表語句等同於字串變數的值,宣告為static使得其隨著類的載入而存在,隨著類的消失而消失,
//在類第一次被使用時裝載 ,只分配一塊儲存空間,所有此類的物件都可以操控此塊不變的儲存空間
public final static String CREATE_BOOK = "create table Book("+
"id integer primary key autoincrement,"+
"author text,"+
"price real,"+
"pages integer,"+
"name text)";
public final static String CREATE_CATEGORY = "create table Category("
+"id integer primary key autoincrement,"
+"category_name text,"
+"category_code integer)";
private Context context;
//第二個引數為資料庫名字(.db),第三個引數一般傳入null,第四個引數是當前資料庫的版本號
public MyDatabaseHelper(Context mcontext, String name, SQLiteDatabase.CursorFactory cursorFactory, int version){
super(mcontext,name,cursorFactory,version);
context = mcontext;
}
//當呼叫SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法獲取用於運算元據庫的SQLiteDatabase例項的時候,
// 如果資料庫不存在,Android系統會自動生成一個資料庫,接著呼叫onCreate()方法,onCreate()方法在初次生成資料庫時才會被呼叫,
// 在onCreate()方法裡可以生成資料庫表結構及新增一些應用使用到的初始化資料。
@Override
public void onCreate(SQLiteDatabase db) {
//使用資料庫的execSQL方法,可以以資料庫語言(字串形式)作為引數
db.execSQL(CREATE_BOOK); //執行建表語句,建立資料庫表
db.execSQL(CREATE_CATEGORY);
Toast.makeText(context, "Create databases succeed", Toast.LENGTH_SHORT).show();
}
//onUpgrade()方法在資料庫的版本發生變化時會被呼叫,一般在軟體升級時才需改變版本號,
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//這裡onUpgrade()方法在資料庫版本每次發生變化時都會把使用者手機上的資料庫表刪除,然後再重新建立。
// 一般在實際專案中是不能這樣做的,正確的做法是在更新資料庫表結構時,還要考慮使用者存放於資料庫中的資料不會丟失。
db.execSQL("drop table if exists Book");
db.execSQL("drop table if exists Category");
onCreate(db);
}
}
package com.activitytest.databasetest;
import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
/**
* 呼叫SQLiteDatabase物件的一些方法可以實現資料庫表的增刪改查
*/
public class MainActivity extends Activity implements View.OnClickListener{
private MyDatabaseHelper dbhelper;
private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
dbhelper = new MyDatabaseHelper(this,"BookStore.db",null, 2);
}
@Override
public void onClick(View v) {
ContentValues values = new ContentValues();
SQLiteDatabase db = dbhelper.getWritableDatabase();
switch(v.getId()){
case R.id.create_database:
dbhelper.getWritableDatabase();
case R.id.add_data:
values.put("name","The Da Vinci Code");
values.put("author","Dan Brown");
values.put("pages",454);
values.put("price",16.96);
db.insert("Book",null,values);
values.clear();
//組裝第二條資料
// values.put("name","The Lost Symbol");
// values.put("author","Dan Brown");
// values.put("pages",510);
// values.put("price",19.95);
// db.insert("Book",null,values);
db.execSQL("insert into Book(name, author, pages, price) values(?,?,?,?)",new String[]{"The Lost Symbol","Dan Brown","510","19.95"});
case R.id.update_data:
// values.put("price",10.99);
// db.update("Book",values,"name= ?",new String[]{"The Da Vinci Code"});
db.execSQL("update Book set price = ? where name = ?",new String[]{"10.99","The Da Vinci Code"});
case R.id.delete_data:
//db.delete("Book","pages > ?",new String[]{"500"});
db.execSQL("delete from Book where pages > ?", new String[]{"500"});
case R.id.query_data:
//呼叫query()方法會返回一個Cursor物件,利用此物件可以取出資料
//Cursor物件是行的集合
// Cursor cursor = db.query("Book",null,null,null,null,null,null);
// if(cursor.moveToFirst()){
// do{
// //利用getColumnIndex()方法可以獲得當前行的列名為name的值
// String name = cursor.getString(cursor.getColumnIndex("name"));
// int pages = cursor.getInt(cursor.getColumnIndex("pages"));
// String author = cursor.getString(cursor.getColumnIndex("author"));
// double price = cursor.getDouble(cursor.getColumnIndex("price"));
//// Toast.makeText().show();
// }while(cursor.moveToNext());
// }
// cursor.close();
db.rawQuery("select * from Book",null);
}
//getWritableDatabase()和getReadableDatabase()方法都可以獲取一個用於運算元據庫的SQLiteDatabase例項。
// 但getWritableDatabase() 方法以讀寫方式開啟資料庫,一旦資料庫的磁碟空間滿了,資料庫就只能讀而不能寫。
// 倘若使用的是getWritableDatabase() 方法就會出錯。getReadableDatabase()方法先以讀寫方式開啟資料庫,
// 如果資料庫的磁碟空間滿了,就會開啟失敗,當開啟失敗後會繼續嘗試以只讀方式開啟資料庫。
//如果資料庫不存在,Android系統會自動生成一個資料庫,接著呼叫onCreate()方法。
// onCreate()方法在初次生成資料庫時才會被呼叫,在onCreate()方法裡可以生成資料庫表結構及新增一些應用使用到的初始化資料。
}
private void init(){
btn1 = (Button) findViewById(R.id.create_database);
btn2 = (Button) findViewById(R.id.add_data);
btn3 = (Button) findViewById(R.id.delete_data);
btn4 = (Button) findViewById(R.id.update_data);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
}
}
相關文章
- 關於mongodb資料庫的增刪改查MongoDB資料庫
- MySql 表資料的增、刪、改、查MySql
- MySQL資料庫 ---MySQL表的增刪改查(進階)MySql資料庫
- 連線資料庫並實現增、刪、改、查資料庫
- JDBC連線資料庫實現增刪改查JDBC資料庫
- mybatis實現MySQL資料庫的增刪改查MyBatisMySql資料庫
- Flutter資料庫Sqflite之增刪改查Flutter資料庫
- Python操作SQLServer資料庫增刪改查PythonSQLServer資料庫
- mogoose 建立資料庫並增刪改查Go資料庫
- 關於連線資料庫實現增刪改查並且網頁上表現出來資料庫網頁
- YII1 增、刪、改、查資料庫操作資料庫
- JSP實現servlet對資料庫的增刪查改操作JSServlet資料庫
- Android studio增刪改查尚未全部完成時如何檢視資料庫Android資料庫
- 單表增刪改查
- mysql中建庫、建表、增刪改查DDL語句MySql
- Go微服務實踐之增刪改查Go微服務
- 關於ToDolist 的增刪改查 用jQuery來實現jQuery
- Golang原生sql操作Mysql資料庫增刪改查GolangMySql資料庫
- 資料庫的簡介和MySQL增刪改查資料庫MySql
- JDBC連線資料庫實現增刪改查前端互動JDBC資料庫前端
- 利用Java的API實現HBase資料庫的增刪查改JavaAPI資料庫
- mysql資料增刪改查操作MySql
- ORM實操之資料的增刪改查ORM
- MySQL——表的約束,資料型別,增刪查改MySql資料型別
- Oracle、mysql資料庫增、刪、改OracleMySql資料庫
- SQL Server 表的管理_關於資料增刪查改的操作的詳解(案例程式碼)SQLServer
- mysql指令1:增刪改庫,資料型別,建立表MySql資料型別
- 修改thinkphp的主頁面,連線資料庫,實現增刪改查PHP資料庫
- JavaWeb中jdbc增刪查改JavaWebJDBC
- Node+Vue實現對資料的增刪改查Vue
- 增刪改查
- MySQL表的增刪查改(提高篇)MySql
- MySQL表的增刪改查(基礎)MySql
- C/C++ Qt 資料庫QSql增刪改查元件應用C++QT資料庫SQL元件
- MySQL server的安裝以及增刪改查遠端資料庫MySqlServer資料庫
- Python中CRUD增刪改查教程Python
- Numpy array資料的增、刪、改、查例項
- SQL增刪改查SQL