Android資料持久化—SQLite資料庫-建立資料庫(一)
在編寫軟體的過程中,我們通常會在移動裝置的本地儲存一些資料,這些資料如何儲存,就是使用到一個android 端的輕量級資料庫SQLite,在資料儲存大家都應該使用過SharedPreferences,這個東西只適合儲存一些簡單的資料,但是到了複雜的關係型資料的時候,上面這種方式就很難應付,所以就要使用sqlite資料庫。
SQLite,是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源的世界著名資料庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生於2000年5月。 至2015年已經有15個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。
首先我們要知道Android為我們提供了一個非常棒的幫助了他是:SQLiteOpenHelper類,這個類是一個抽象類,他包含兩個我們要重寫的方法:onCreate(建立資料庫)和OnUpgrade(更新資料庫),需要在這兩個方法進行建立資料庫和升級資料庫,SQLiteOpenHelper包含兩個重要的例項方法:getWritableDatabase()和getReadableDatabase()這兩個方法都可以建立和開啟資料庫,返回一個操作資料庫的物件,牛逼吧前言介紹完了,開始寫程式碼吧:!!!!!
建立一個繼承SQLiteOpenHelper的SQLiteDataBase類
public class SqliteData extends SQLiteOpenHelper { private Context mContext; public SqliteData(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
大家可以看到,我建立了一個繼承SQLiteOpenHelper的類,實現了我上面提到的那兩個抽象方法,並加了一個構造方法。
構造方法引數:第一個引數:上下文,第二個引數:資料庫名,第三個引數:允許查詢資料返回一個cursor,第四個引數:資料庫版本號
現在開始嘗試下建立資料庫:大家都應該知道sql語句吧,不知道的話點選這裡瞭解下。
我先寫一個sql語句的變數:
public static final String CREATE_BOOK = "create table Book("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "price real,"
+ "author text)";
這個sql語句的意思是:建立一個Book的表,裡面的欄位是id(設定為主鍵自增),name,price,author。
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
}
這個看名字就知道是建立資料庫,這裡直接是用 SQLIteDatabase的物件來執行我們寫好的sql語句,就可以建立資料庫了,
MainActivity.java核心程式碼
sqliteData = new SqliteData(MainActivity.this, "BookStore.db", null, 1);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sqliteData.getWritableDatabase();
}
});
上面著寫是核心程式碼,我把全部的程式碼放在下面:
SqliteData.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
/**
* Created by dark on 2018/7/17.
*/
public class SqliteData extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "create table Book("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "price real,"
+ "author text)";
private Context mContext;
public SqliteData(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
MainActivity.java
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button mButton,mAdd;
private SqliteData sqliteData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.btn);
mAdd = (Button) findViewById(R.id.add);
sqliteData = new SqliteData(MainActivity.this, "BookStore.db", null, 1);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sqliteData.getWritableDatabase();
}
});
}
}
PS:如何檢視資料庫資料:我是用的是MAC系統,檢視資料庫教程僅供參考,不能作為實際檢視資料庫
我使用的ls命令。在windows系統中換成dir命令
開啟終端進入sdk資料夾,開啟platform-tools資料夾,裡面會有一個adb檔案,這裡如果你閒每次都需要這樣開啟這個工具麻煩,那可以設定系統變數(設定系統變數我就不寫了);
找到這個adb檔案執行這個檔案./adb shell 進入data資料夾執行兩次 cd data 在最後一次進入的data資料夾內,找到你自己的專案資料夾,其實就是你專案的包名 執行sqlite3 你自己的資料庫名,這裡千萬不要看圖片上的,圖片上的命令不知道怎麼回事是錯誤的,必須是sqlite3 你自己的資料庫名 開啟資料庫執行.table查看錶名 看,這樣剛剛我自己建立的資料庫表名就查到了