android SQLite 數據庫存儲
在Android開發的成長中,數據庫是我們必須要掌握的,android數據庫操作的方式有很多種,但沒有接觸過SQL操作的同學,建議從SQLite學起,自己掌握了數據庫的操作流程才是本,是根。一味濫用開源庫并不是我們開發的初衷。接下來是本人觀摩《第一行代碼》的理解。如有不正,請指出。
首先新建一個項目,然后看我們的目錄結構,很簡單的
首先我們要新建一個類MyDatabaseHelper,去繼承SQLiteOpenHelper,重寫它的兩個抽象方法;
package com.mydemo.mydemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Administrator on 2018/2/28.
*/
public class MyDatabaseHelper extends SQLiteOpenHelper{
//參數分別是:Context,數據庫名,Cursor,數據庫版本號
public MyDatabaseHelper(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) {
}
}
然后我們需要一個建表的SQL語句,先上代碼:
package com.mydemo.mydemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
/**
* Created by Administrator on 2018/2/28.
*/
public class MyDatabaseHelper extends SQLiteOpenHelper{
public static final String CREATE_BOOK = "create table Book("
+ "id integer primary key autoincrement,"
+ "author text,"
+ "price real,"
+ "pages integer,"
+ "name text)";
private Context mContext;
//參數分別是:Context,數據庫名,Cursor,數據庫版本號
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext=context;
}
//創建表方法
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
Toast.makeText(mContext, "創建成功", Toast.LENGTH_SHORT).show();
}
//升級數據庫版本方法
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
建表語句其實很好理解,就是把SQL語句轉化成字符串的形式,SQL的語句是這樣的
create table Book(
id integer primary key autoincrement,
author text,
price real,
pages integer,
name text)
接著我們的MainActivity和xml文件也要修改,添加一個創建表的按鈕:
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.mydemo.mydemo.MainActivity">
<Button
android:id="@+id/create_database"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="創建表" />
</LinearLayout>
package com.mydemo.mydemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private MyDatabaseHelper myDatabaseHelper;
private Button btnCreate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//參數分別是:Context,數據庫名,Cursor,數據庫版本號
myDatabaseHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2); btnCreate.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View view) { myDatabaseHelper.getWritableDatabase(); } }); }
private void initView() {
btnCreate =findViewById(R.id.create_database); }}
getWritableDatabase()方法我的理解是打開寫入數據庫的方法,getReadableDatabase()方法是讀取數據庫的方法;
查看我們創建成功的表我們用cmd命令的方式去查看,配置好sdk環境變量,不知道的可以百度一下或者(右鍵計算機—屬性—高級系統設置—環境變量,然后在系統變量里找到Path并點擊編輯,將sdk的platform-tools目錄配置進去)
cmd命令就直接上圖了
到這里我們就把表創建出來了。我們還可以升級我們的數據庫
package com.mydemo.mydemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
/**
* Created by Administrator on 2018/2/28.
*/
public class MyDatabaseHelper extends SQLiteOpenHelper{
public static final String CREATE_BOOK = "create table Book("
+ "id integer primary key autoincrement,"
+ "author text,"
+ "price real,"
+ "pages integer,"
+ "name text)";
public static final String CREATE_CATEGORY = "create table Category("
+ "id integer primary key autoincrement,"
+ "category_name text,"
+ "category_code integer)";
private Context mContext;
//參數分別是:Context,數據庫名,Cursor,數據庫版本號
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext=context;
}
//創建表方法
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
sqLiteDatabase.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext, "創建成功", Toast.LENGTH_SHORT).show();
}
//升級數據庫版本方法
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("drop table if exists Book");
sqLiteDatabase.execSQL("drop table if exists Category");
onCreate(sqLiteDatabase);
}
}
MainActivity把對應的版本號2修改成3就行
myDatabaseHelper = new MyDatabaseHelper(this, "BookStore.db", null, 3);
在查看有沒有升級成功,對應剛剛的命令
接下來進行我們的數據庫增刪改查,先一步步來,添加我們的增加數據的按鈕
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//開始組裝第一條數據
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);
values.clear();
db.close();
}
});
這里為了減少篇幅,只上核心代碼,添加控件,找id這些我就不粘貼了,跟著第一個按鈕后面寫或者自己定義也是可以的;insert()方法有三個參數,第一個是表的名字,第二個是用于在未指定添加數據的情況下給某些可為空的列自動賦值null,我們一般不用,直接傳null就行了,第三個參數是一個ContentValues對象,它提供一系列的put()方法重載,用于向ContentValues中添加數據;
點擊增加數據按鈕之后我們可以繼續查看是否添加數據成功:
我們查看添加的內容用SQL查詢語句 select * from Book; (這里主要別忘了分號)
接下來我們可以看看怎么更新數據庫里面的內容
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price", 9.9);
db.update("Book", values, "name=?", new String[]{"The Da Vinci Code"});
values.clear();
db.close();
}
});
update()方法有4個參數,我們用第三,第四個參數指定具體更新的位置,第三個參數對應的是SQL語句的where部分,可以這樣理解:“name等于哪個”,然后第四個參數就是具體的哪個;
可以看到我們的加錢成功修改成9.9了,這樣我們就完成了更新的操作了;接下來我們進行刪除操作:
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db=myDatabaseHelper.getWritableDatabase();
db.delete("Book","pages > ?",new String[]{"500"});
db.close();
}
});
刪除操作更容易理解了,第二,第三個參數也是用來約束刪除某行或者某幾行的數據,不指定的話就是刪除所有行。第二個參數還是這樣理解:“pages > ?”,然后第三個參數就是具體的 ? ;
看到我們已經把pages>500的刪除掉了,到這里是不是感覺并沒有那么不好理解呀,其實cmd命令和sql語句敲多了也就明白了;
接著我們要開始最后的查詢方法了:
btnQuery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db=myDatabaseHelper.getReadableDatabase();
//查詢Book表中的所有數據
Cursor cursor=db.query("Book",null,null,null,null,null,null);
if (cursor.moveToFirst()){
do {
//遍歷Cursor對象,取出數據并打印
String name=cursor.getString(cursor.getColumnIndex("name"));
String author=cursor.getString(cursor.getColumnIndex("author"));
int pages=cursor.getInt(cursor.getColumnIndex("pages"));
double price=cursor.getDouble(cursor.getColumnIndex("price"));
Log.e("MainActivity", "Book name is "+name);
Log.e("MainActivity", "Book author is "+author);
Log.e("MainActivity", "Book pages is "+pages);
Log.e("MainActivity", "Book price is "+price);
}while(cursor.moveToNext());
}
cursor.close();
}
});
最后的query()方法的參數比較多,至少也要傳入7個參數,第一個參數還是表名,
第二個參數用于指定去查詢哪幾列,不指定的話就默認全部,
第三第四個參數用于用于約束查詢的行,不指定的話也是查詢全部行,
第五個參數用于指定需要去group by的列,不指定則表示不對查詢結果進行group by操作,
第六個參數用于對group by之后的數據進行進一步的過濾,不指定則表示不進行過濾,
第七個參數用于指定查詢結果的排序方式,不指定則表示使用默認的排序方式,
還有其他幾個query()方法的重載其實大同小異,有興趣可以自己看看;
這里我們用log的方式打印出來
到這里相信大家對android的sqlite操作也有相當的了解了。
智能推薦
iOS - OC SQLite 數據庫存儲
http://www.cnblogs.com/QianChia/p/5782861.html 采用 SQLite 數據庫來存儲數據。SQLite 作為一中小型數據庫,應用 iOS 中,跟前三種保存方式相比,相對比較復雜一些。 注意:寫入數據庫,字符串可以采用 char 方式,而從數據庫中取出 char 類型,當 char 類型有表示中文字符時,會出現亂碼。這是因為數據庫默認使用 ASCII 編碼方...
【Android】數據存儲-SQLite
SQLite特點: 輕量級 獨立 隔離 跨平臺 多語言接口 安全性(多進程可以同時讀取,但同一時間只能有一個進程在寫入數據) 創建數據庫和表,以及數據庫的增刪改查操作 DatabaseHelper.java 創建一個activity: DatabaseButtonActivity.java xml: 使用Android Debug Database查看數據庫和表信息 參考鏈接:https://ju...
android使用sqlite存儲數據
前面已經說到了幾種文件的操作如sharedreference,sdcard.實際上android還提供了另外的存儲方式那就是sqlite。只要學習過數據庫掌握這個也是沒問題的。下面就和我一起來弄一下這個吧。 1.安裝一個SQLiteDeveloper,這個用來打開android生成的數據庫。軟件隨便搜索就能找到,后面導出數據庫只需打開軟件點擊“數據庫“----->&q...
Android 數據存儲方式(SQLite)
SQLite是Android非常重要的數據存儲方式,但是它的操作非常簡單,今天就給大家簡單講一下: 先寫一個DBHelper類,用來創建數據庫表 接下來講一下如何寫sql語句,以及如何調用DBHelper類...
猜你喜歡
QML使用Sqlite數據庫存儲ListModel數據
(本文為utf-8格式,可以直接使用相應代碼) Models 是用來提供數據的,它既可以以 QML 的形式出現也可以是 C++的類。QML中的Model有ListModel、XmlListModel、 VisualItemModel;C++ 中的 Model 有 QAbstractItemModel、QStringList、 QList<QObject*>等。...
SQLite數據庫存儲(一)【安卓學習筆記】
對于MODE_PRIVATE,MODE_APPEND兩種模式,對寫文件的影響有什么不同? MODE_PRIVATE:該文件只能被當前程序讀寫,會把原來的內容覆蓋掉 MODE_APPEND:該文件的內容可追加,不會把原來的內容覆蓋掉,新寫的內容追加在文件后面 但是對于修改文件中的部分內容,應該怎么做呢?這就需要我們用到SQLite數據庫 主要內容: 創建和打開一個SQLite 數據庫 SQLite數...
17讀書筆記之SQLite數據庫存儲
SQLite數據庫存儲 創建數據庫 Android管理數據庫提供了一個SQLiteOpenHelper幫助類。 借助這個類就可以簡單地對數據庫進行創建和升級。下面學習SQLiteOpenHelper的基本用法。 首先SQLiteOpenHelper是一個抽象類,我們要是用的話,需要創建一個自己的幫助類去繼承它。SQLiteOpenHelper中有兩個抽象方法。 onCreate()和onUpgra...