最近公司在開發一個掃碼的APP,在一個做保存單據的時候使用到了sqlite的功能,android sqlite是安卓內置數據庫,可以很方便的存儲我們想要保存的數據。話不多說,開始上示例。
1.要寫一個類來繼承SQLiteOpenHelper
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* TODO: 掃碼錶頭表創建
* 在登陸系統會自動創建表,退出時自動刪除表
* 主要作用是保存斷網時的掃碼錶頭數據
* @Author:clb
* @date:2018-6-22 下午6點14分
*/
public class DBHelperH extends SQLiteOpenHelper {
//數據庫版本號
private static final String name = "yjkjtempdate.db"; //數據庫路徑及名稱
private static final int version = 1; //數據庫版本
public DBHelperH(Context context) {
super(context, name, null, version);
}
/*
* 當數據庫創建的時候被調用
* */
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("創建數據庫和表");
//SQLite數據創建支持的數據類型: 整型數據,字符串類型,日期類型,二進制的數據類型
String sql = "create table tableh1(" +
"id integer primary key AUTOINCREMENT," +
"hcontent text,\n" +
"errdate int(11),\n" +
"hbid VARCHAR(50) " + ")";
//execSQL用於執行SQL語句
//完成數據庫的創建
db.execSQL(sql);
//數據庫實際上是沒有被創建或者打開的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一個被調用時纔會進行創建或者打開
}
/**
* TODO: SqlLite數據庫版本更新
* @param db
* 數據庫
* @param oldVersion
* 舊版本號
* @param newVersion
* 新版本號
* @date:2018-5-25 下午3點15分
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("更新數據庫版本爲:" + newVersion);
}
}
寫好DBHelperH類之後,就可以開始使用sqlite了。
2.簡單使用
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
public class Test extends AppCompatActivity {
public String errdate;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// 讀取數據庫,沒有會創建一個
DBHelperH dbHelpershow = new DBHelperH(Test.this);
SQLiteDatabase sqliteDatabase = dbHelpershow.getReadableDatabase();
SQLiteDatabase sqliteDatabases = dbHelpershow.getWritableDatabase();
// 查詢數據
String sqls = "select count(*) from tableh1 where id = 1";
Cursor cursors = sqliteDatabase.rawQuery(sqls, null);
if(cursors.moveToNext()){
int count = cursors.getInt(0);
Log.d("asaaaaaaaaaaaaaaa","我十二");
if(count>0){
Log.d("asaaaaaaaaaaaaaaa","有該數據不能再寫入數據庫!");
}else {
Log.d("asaaaaaaaaaaaaaaa","沒有該數據");
// 插入數據
// 創建ContentValues對象
ContentValues valuesH = new ContentValues();
// 失敗單據的時間設置 獲取系統時間的10位的時間戳
long time = System.currentTimeMillis() / 1000;
errdate = String.valueOf(time);
// 向該對象中插入鍵值對 表頭數據
valuesH.put("hbid", 123123123);
valuesH.put("errdate", errdate);
valuesH.put("hcontent", "asdasdasda");
// 調用insert()方法將數據插入到數據庫當中
sqliteDatabases.insert("tableh1", null, valuesH);
}
}
//刪除數據
sqliteDatabases.delete("tableh1", "id=?", new String[]{"1"});
// 修改數據
ContentValues values2 = new ContentValues();
values2.put("hbid", 412312);
values2.put("errdate", errdate);
values2.put("hcontent", "我是數據");
// 調用update方法修改數據庫
sqliteDatabases.update("tableh1", values2, "id=?", new String[]{"1"});
// 刪除數據庫
deleteDatabase("tempdata");
sqliteDatabases.close();
}
}
更多sqlite的寫法,可以到官網查詢資料。語法和其他數據庫寫法基本一致。