Android:Sqlitedatabase學習小結
阿新 • • 發佈:2019-01-23
今天剛剛學習完Sqlite資料庫的基礎知識,隨即把學到的東西記錄下來,以便隨後查閱,以下是自己對Sqlite資料庫的小結:
1.Sqlite簡介
Sqlite是一款輕型的資料庫,它包含在一個相對小的C庫中,它的設計目標是嵌入式的,由於它佔用資源非常少,可能只需要幾百K的記憶體就可以了,並且支援Windows/Linux/Unix等等主流的作業系統,同時可以和很多種程式語言相結合,比如:C#/Java/php等,所以在嵌入式裝置中特別受歡迎,這一點也正好符合android的開發要求,所以在Android開發中經常要用到該資料庫。
2.Sqlite內部結構
在內部,Sqlite有以下幾個元件組成:SQL編譯器、核心、後端以及附件。Sqlite通過利用 虛擬機器和虛擬資料庫引擎,是除錯、修改和擴充套件Sqlite的核心變得更加方便,所有SQL語句被編譯成易讀的、可以在Sqlite虛擬機器中執行的程式集。其結構如下圖:
Sqlite內部結構圖
3.android中Sqlite的使用方法
在Android中要想使用Sqlite資料庫,首先應該建立一個類繼承SQLiteOpenHelper類,我們把這個類命名為DatabaseHelper,它作為一個訪問Sqlite的助手類,提供了兩方面的功能:
第一 getReadableDatabase()/getWritableDatabase()可以獲得SQLiteDatabase物件,通過該物件可以對資料庫進行操作;
第二 提供OnCreate()和onUpgrade()兩個回撥函式,允許我們在建立和升級資料庫時,進行自己的操作;
例項程式碼如下:
[java]
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
//在SQLiteOepnHelper的子類當中,必須有該建構函式
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
//必須通過super呼叫父類當中的建構函式
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
public DatabaseHelper(Context context,String name){
this(context,name,VERSION);
}
public DatabaseHelper(Context context,String name,int version){
this(context, name,null,version);
}
//該函式是在第一次建立資料庫的時候執行,實際上是在第一次得到SQLiteDatabse物件的時候,才會呼叫這個方法
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("create a Database");
//execSQL函式用於執行SQL語句
db.execSQL("create table user(id int,name varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
System.out.println("update a Database");
}
}
注:在繼承SQLiteOpenHelper類時,必須要有public DatabaseHelper(Context context, String name, CursorFactory factory,int version) 這個構造方法。
在定義好DatabaseHelper這個助手類後,就可以使用這個類建立Sqlite資料庫,並對資料庫進行操作了,下面通過一個定義好的Activity進行說明,程式碼如下:
[java]
public class SQLiteActivity extends Activity {
/** Called when the activity is first created. */
private Button createButton;
private Button insertButton;
private Button updateButton;
private Button updateRecordButton;
private Button queryButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createButton = (Button)findViewById(R.id.createDatabase);
updateButton = (Button)findViewById(R.id.updateDatabase);
insertButton = (Button)findViewById(R.id.insert);
updateRecordButton = (Button)findViewById(R.id.update);
queryButton = (Button)findViewById(R.id.query);
createButton.setOnClickListener(new CreateListener());
updateButton.setOnClickListener(new UpdateListener());
insertButton.setOnClickListener(new InsertListener());
updateRecordButton.setOnClickListener(new UpdateRecordListener());
queryButton.setOnClickListener(new QueryListener());
}
class CreateListener implements OnClickListener{
@Override
public void onClick(View v) {
//建立一個DatabaseHelper物件
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
//只有呼叫了DatabaseHelper物件的getReadableDatabase()方法,或者是getWritableDatabase()方法之後,才會建立,或開啟一個數據庫
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
}
class UpdateListener implements OnClickListener{
@Override
public void onClick(View v) {
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
}
class InsertListener implements OnClickListener{
@Override
public void onClick(View v) {
//生成ContentValues物件
ContentValues values = new ContentValues();
//想該物件當中插入鍵值對,其中鍵是列名,值是希望插入到這一列的值,值必須和資料庫當中的資料型別一致
values.put("id", 1);
values.put("name","zhangsan");
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
SQLiteDatabase db = dbHelper.getWritableDatabase();
//呼叫insert方法,就可以將資料插入到資料庫當中
db.insert("user", null, values);
}
}
//更新操作就相當於執行SQL語句當中的update語句
//UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX...
class UpdateRecordListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//得到一個可寫的SQLiteDatabase物件
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "zhangsanfeng");
//第一個引數是要更新的表名
//第二個引數是一個ContentValeus物件
//第三個引數是where子句
db.update("user", values, "id=?", new String[]{"1"});
}
}
class QueryListener implements OnClickListener{
@Override
public void onClick(View v) {
System.out.println("aaa------------------");
Log.d("myDebug", "myFirstDebugMsg");
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
System.out.println("query--->" + name);
}
}
}
}
在上例中可以看出,在建立或者操作資料庫前,都要通過DatabaseHelpe類中的getReadbleDatabase()和getWritbleDatabase()兩個方法在建立需要的資料庫,前者是建立一個只讀資料庫,後者是建立一個可寫資料庫。
1.Sqlite簡介
Sqlite是一款輕型的資料庫,它包含在一個相對小的C庫中,它的設計目標是嵌入式的,由於它佔用資源非常少,可能只需要幾百K的記憶體就可以了,並且支援Windows/Linux/Unix等等主流的作業系統,同時可以和很多種程式語言相結合,比如:C#/Java/php等,所以在嵌入式裝置中特別受歡迎,這一點也正好符合android的開發要求,所以在Android開發中經常要用到該資料庫。
2.Sqlite內部結構
在內部,Sqlite有以下幾個元件組成:SQL編譯器、核心、後端以及附件。Sqlite通過利用
Sqlite內部結構圖
3.android中Sqlite的使用方法
在Android中要想使用Sqlite資料庫,首先應該建立一個類繼承SQLiteOpenHelper類,我們把這個類命名為DatabaseHelper,它作為一個訪問Sqlite的助手類,提供了兩方面的功能:
第一 getReadableDatabase()/getWritableDatabase()可以獲得SQLiteDatabase物件,通過該物件可以對資料庫進行操作;
第二 提供OnCreate()和onUpgrade()兩個回撥函式,允許我們在建立和升級資料庫時,進行自己的操作;
例項程式碼如下:
[java]
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
//在SQLiteOepnHelper的子類當中,必須有該建構函式
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
//必須通過super呼叫父類當中的建構函式
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
public DatabaseHelper(Context context,String name){
this(context,name,VERSION);
}
public DatabaseHelper(Context context,String name,int version){
this(context, name,null,version);
}
//該函式是在第一次建立資料庫的時候執行,實際上是在第一次得到SQLiteDatabse物件的時候,才會呼叫這個方法
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("create a Database");
//execSQL函式用於執行SQL語句
db.execSQL("create table user(id int,name varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
System.out.println("update a Database");
}
}
注:在繼承SQLiteOpenHelper類時,必須要有public DatabaseHelper(Context context, String name, CursorFactory factory,int version) 這個構造方法。
在定義好DatabaseHelper這個助手類後,就可以使用這個類建立Sqlite資料庫,並對資料庫進行操作了,下面通過一個定義好的Activity進行說明,程式碼如下:
[java]
public class SQLiteActivity extends Activity {
/** Called when the activity is first created. */
private Button createButton;
private Button insertButton;
private Button updateButton;
private Button updateRecordButton;
private Button queryButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createButton = (Button)findViewById(R.id.createDatabase);
updateButton = (Button)findViewById(R.id.updateDatabase);
insertButton = (Button)findViewById(R.id.insert);
updateRecordButton = (Button)findViewById(R.id.update);
queryButton = (Button)findViewById(R.id.query);
createButton.setOnClickListener(new CreateListener());
updateButton.setOnClickListener(new UpdateListener());
insertButton.setOnClickListener(new InsertListener());
updateRecordButton.setOnClickListener(new UpdateRecordListener());
queryButton.setOnClickListener(new QueryListener());
}
class CreateListener implements OnClickListener{
@Override
public void onClick(View v) {
//建立一個DatabaseHelper物件
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
//只有呼叫了DatabaseHelper物件的getReadableDatabase()方法,或者是getWritableDatabase()方法之後,才會建立,或開啟一個數據庫
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
}
class UpdateListener implements OnClickListener{
@Override
public void onClick(View v) {
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
}
class InsertListener implements OnClickListener{
@Override
public void onClick(View v) {
//生成ContentValues物件
ContentValues values = new ContentValues();
//想該物件當中插入鍵值對,其中鍵是列名,值是希望插入到這一列的值,值必須和資料庫當中的資料型別一致
values.put("id", 1);
values.put("name","zhangsan");
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
SQLiteDatabase db = dbHelper.getWritableDatabase();
//呼叫insert方法,就可以將資料插入到資料庫當中
db.insert("user", null, values);
}
}
//更新操作就相當於執行SQL語句當中的update語句
//UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX...
class UpdateRecordListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//得到一個可寫的SQLiteDatabase物件
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "zhangsanfeng");
//第一個引數是要更新的表名
//第二個引數是一個ContentValeus物件
//第三個引數是where子句
db.update("user", values, "id=?", new String[]{"1"});
}
}
class QueryListener implements OnClickListener{
@Override
public void onClick(View v) {
System.out.println("aaa------------------");
Log.d("myDebug", "myFirstDebugMsg");
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
System.out.println("query--->" + name);
}
}
}
}
在上例中可以看出,在建立或者操作資料庫前,都要通過DatabaseHelpe類中的getReadbleDatabase()和getWritbleDatabase()兩個方法在建立需要的資料庫,前者是建立一個只讀資料庫,後者是建立一個可寫資料庫。