關於Sqlite的簡單使用與總結,可直接模仿用到現有專案中~
今天的第一篇blog就把我關於sqlite常用的一些套路分享出來(其實大部分也是模仿其他大牛寫的),方便我們大家共同學習進步,有什麼不對的地方,希望看到的人兒批評指正,哈哈~~~
1.第一種模式:
先看SQLiteOpenHelper類:
public class SQLHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "database.db";// 資料庫名稱
public static final int VERSION = 1;
public static final String TABLE_PERSON = "PersonItem";// 資料表
public static final String ID = "id";//
public static final String NAME = "name";
public static final String SEX = "sex";
public static final String AGE = "age";
private Context context;
public SQLHelper(Context context) {
super(context, DB_NAME, null, VERSION);
this.context = context;
}
public Context getContext() {
return context;
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO 建立資料庫後,對資料庫的操作
String sql = "create table if not exists " + TABLE_CHANNEL +
"(_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
ID + " INTEGER , " +
NAME + " TEXT , " +
AGE + " INTEGER , " +
SEX + " TEXT)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onCreate(db);
}
}
再看DBUtils類:
public class DBUtils {
private static DBUtils mInstance;
private SQLHelper mSQLHelp;
private SQLiteDatabase mSQLiteDatabase;
public DBUtils(Context context) {
mSQLHelp = new SQLHelper(context);
mSQLiteDatabase = mSQLHelp.getWritableDatabase();
}
public static DBUtils getInstance(Context context){
if (mInstance == null){
mInstance = new DBUtils(context);
}
return mInstance;
}
public void close() {
mSQLHelp.close();
mSQLHelp = null;
mSQLiteDatabase.close();
mSQLiteDatabase = null;
mInstance = null;
}
/**
* 插入資料
*/
public void insertData(ContentValues values){
mSQLiteDatabase.insert(SQLHelper.TABLE_PERSON, null, values);
}
/**
* 修改資料
*/
public void updateData(ContentValues values, String whereClause,
String[] whereArgs){
mSQLiteDatabase.update(SQLHelper.TABLE_PERSON, values, whereClause,
whereArgs);
}
/**
* 刪除資料
*/
public void deleteData(String whereClause, String[] whereArgs){
mSQLiteDatabase.delete(SQLHelper.TABLE_PERSON, whereClause, whereArgs);
}
/**
* 按搜尋條件查詢資料
*/
public Cursor selectData(String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy){
Cursor cursor = mSQLiteDatabase.query(SQLHelper.TABLE_PERSON, columns, selection,
selectionArgs, groupBy, having, orderBy);
return cursor;
}
}
2.第二種模式(純粹是為了做對比,從別的地方挪過來的):
先看SQLiteHelper類:
public class SqliteDataHelper extends SQLiteOpenHelper {
public static final String TABLE_NOTES = "notes";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_TITLE = "title";
public static final String COLUMN_LAST_REVIEWED = "last_reviewed";
public static final String COLUMN_TOTAL_REVIEWS = "total_reviews";
public static final String COLUMN_CONTENT = "content";
private static final String DATABASE_NAME = "notes.db";
private static final int DATABASE_VERSION = 1;
public SqliteDataHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(" CREATE TABLE " + TABLE_NOTES + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_TITLE + " TEXT NOT NULL, " +
COLUMN_LAST_REVIEWED + " TEXT NOT NULL, " +
COLUMN_TOTAL_REVIEWS + " TEXT NOT NULL, " +
COLUMN_CONTENT + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NOTES);
onCreate(db);
}
}
再看DBManager類:
public class NotesDataManager {
private SqliteDataHelper helper;
private SQLiteDatabase database;
public NotesDataManager(Context context) {
helper = new SqliteDataHelper(context);
}
public void open() throws SQLException {
database = helper.getWritableDatabase();
}
public void close() {
helper.close();
}
public long insertNotes(String title, String content){
this.open();
ContentValues values = new ContentValues();
values.put(SqliteDataHelper.COLUMN_TITLE,title);
values.put(SqliteDataHelper.COLUMN_CONTENT,content);
long currentTime = System.currentTimeMillis();
values.put(SqliteDataHelper.COLUMN_LAST_REVIEWED,currentTime);
values.put(SqliteDataHelper.COLUMN_TOTAL_REVIEWS,0);
long insert = database.insert(SqliteDataHelper.TABLE_NOTES, null, values);
this.close();
return insert;
}
public long deleteNotes(String title, String content){
this.open();
int delete = database.delete(SqliteDataHelper.TABLE_NOTES, SqliteDataHelper.COLUMN_CONTENT + " = ? ", new String[]{String.valueOf(content)});
return delete;
}
public long incrementTotalReviews(String content){
this.open();
String sql = "UPDATE " + SqliteDataHelper.TABLE_NOTES +
" SET " + SqliteDataHelper.COLUMN_TOTAL_REVIEWS + "=" + SqliteDataHelper.COLUMN_TOTAL_REVIEWS + "+1"+
"WHERE" + SqliteDataHelper.COLUMN_CONTENT + " >= '" + content +"'";
database.execSQL(sql); //這是sqlite的另外一種寫法
this.close();
return 0;
}
public long modifyLastSeen(String content)
{
this.open();
String sql = "UPDATE " + SqliteDataHelper.TABLE_NOTES +
" SET " + SqliteDataHelper.COLUMN_LAST_REVIEWED + "=" + System.currentTimeMillis()+
" WHERE " + SqliteDataHelper.COLUMN_CONTENT + " >= '" + content+"'";
database.execSQL(sql);
/*database.execSQL("UPDATE " + SQLiteHelper.TABLE_NOTES + " SET "
+ SQLiteHelper.COLUMN_TOTAL_REVIEWS + " = " + SQLiteHelper.COLUMN_TOTAL_REVIEWS + " +1 WHERE "
+ SQLiteHelper.COLUMN_CONTENT + " = " +content);*/
this.close();
return 0;
}
public ArrayList<NoteItem> getAllNotes(){
this.open();
ArrayList<NoteItem> noteItemList = new ArrayList<NoteItem>();
Cursor cursor = database.rawQuery("select * from notes", null);
if (cursor.moveToFirst()){
while (!cursor.isAfterLast()){
String title = cursor.getString(cursor.getColumnIndex(SqliteDataHelper.COLUMN_TITLE));
String last_reviewed = cursor.getString(cursor.getColumnIndex(SqliteDataHelper.COLUMN_LAST_REVIEWED));
String total_reviews = cursor.getString(cursor.getColumnIndex(SqliteDataHelper.COLUMN_TOTAL_REVIEWS));
String content = cursor.getString(cursor.getColumnIndex(SqliteDataHelper.COLUMN_CONTENT));
NoteItem item = new NoteItem(title,last_reviewed,total_reviews,content);
noteItemList.add(item);
cursor.moveToNext();
}
}
this.close();
return noteItemList;
}
public List<NoteItem> getAllNotesForNotification() {
this.open();
List<NoteItem> items = new ArrayList<NoteItem>();
Cursor cursor = database.rawQuery("select * from notes",null);
if (cursor .moveToFirst()) {
while (!cursor.isAfterLast()) {
String title = cursor.getString(cursor.getColumnIndex(SqliteDataHelper.COLUMN_TITLE));
String last_reviewed = cursor.getString(cursor.getColumnIndex(SqliteDataHelper.COLUMN_LAST_REVIEWED));
String total_reviews = cursor.getString(cursor.getColumnIndex(SqliteDataHelper.COLUMN_TOTAL_REVIEWS));
String content = cursor.getString(cursor.getColumnIndex(SqliteDataHelper.COLUMN_CONTENT));
NoteItem item = new NoteItem(title,last_reviewed,total_reviews,content);
long past_epoch = Long.valueOf(item.last_reviewed);
long current_epoch = System.currentTimeMillis();
long difference = current_epoch - past_epoch;
if (notificationRequired(difference,Integer.valueOf(item.total_reviews))) {
items.add(item);
}
cursor.moveToNext();
}
}
this.close();
return items;
}
}上述類只需要看標紅的就可以,主要是學習有哪幾種sql的寫法。
相關推薦
關於Sqlite的簡單使用與總結,可直接模仿用到現有專案中~
最近剛剛開通了blog,目的就是把自己常用到的一些技術點和一些模版積累下來,方便後期做專案的時候可以直接拿出模版套著使用,而不用每次都需要找度娘去解決,非常的不方便~~~ 今天的第一篇blog就把我關於sqlite常用的一些套路分享出來(其實大部分也是模仿其他大牛寫的),
函數與字典,可選參數和while語句結合的簡單應用
函數python函數可以與各種語句相結合,以達到提高效率簡化流程的目的: 通過函數創建字典eg. 將歌手與專輯對應,並儲存在字典當中 def make_ablum(name, album): """返回整潔的字典格式""" album_details = {‘singer‘: name,
小程序前端開發基礎框架,可直接用於開發
orien 以及 markdown 技術分享 tor ogr get back ref 項目介紹 對於微信小程序開發,一直想開源一個可以直接拿來使用的開源框架,這樣可以方便大家在此基礎上可以叠代開發,簡化了寫樣式,發起Http請求以及和簡化調用微信接口的麻煩,其中對於樣式采
IDEAeclipse打成jar(包含第三方jar在裡面),可直接使用打包的jar
1、使用框架是spring boot,若是想打成可執行檔案,正常步驟就可以 2、若是想打成普通的jar(包含了第三方jar的依賴)則步驟如下: 注意:extract to the target jar一定要勾上,意思是包含第三方jar到目標jar &n
樹相關的全部程式碼,可直接執行
#include <iostream> #include<cstdio> #include<cstdlib> #include <stack> #include <queue> using namespace std; typedef i
在頁面游標處插入指定字串的具體實現,可直接引用
//方法一:在游標處插入指定字串的具體實現 function insertAtCursor1(myValue) { var myField = document.getElementById('ruleConfig'); //IE 瀏覽器 if (document.se
GitHub 釋出了一款重量級產品,可直接執行程式碼!
【導讀】10月16日,GitHub Universe開發者大會如期舉行,並重磅推出GitHub Actions,平臺主管Sam Lambert稱,這將是GitHub歷史上最大的改變。此外,GitHub還公佈了2018年年度報告,各種有趣使用者資料,快來一睹為快吧!
2018版阿里雲簡訊api使用教程,附詳細圖文和demo,可直接執行
阿里雲簡訊介面改版後,原來的介面已不能使用,提供的新版demo晦澀難懂,文件也語焉不詳,多次與技術人員詢問後依然得不到正確使用姿勢,參考https://blog.csdn.net/u011958281/article/details/78614792 後總算
一個任務管理類的c++實現,可直接通過編譯,目的:提高效率,防止頻繁申請記憶體和釋放
#include <iostream> #include <pthread.h> #include <semaphore.h> #include <errno.h> #include <queue> using namespace std;
PHP針對數字的加密解密類,可直接使用
<?phpnamespace app;/** * 加密解密類 * 該演算法僅支援加密數字。比較適用於資料庫中id欄位的加密解密,以及根據數字顯示url的加密。 * @author 深秋的竹子 * @ver
GitHub 釋出了一款重量級產品,可直接執行程式碼
轉載自 GitHub 釋出了一款重量級產品,可直接執行程式碼 【導讀】10月16日,GitHub Universe開發者大會如期舉行,並重磅推出GitHub Actions,平臺主管Sam Lambert稱,這將是GitHub歷史上最大的改變。此外,GitHub還公佈了20
PHP提取字串中視訊url地址函式,可直接使用
PHP程式提取字串中的視訊url地址,可直接使用,使用方法: get_content_video($contents); /** * PHP提取字串中視訊url地址 * @ Linyufan.com * @ 2018.9.11 */ function get_co
vc從固定字串任意擷取 子字串,可直接使用
//"henanshengname=yangzhenjiang&huashengdou"; "name=" "&" 返回"yangzhenjiang" string Find
winpcap三個原始碼例項,可直接使用
原始碼 原始碼一 #include "pcap.h" #define HAVE_REMOTE #include "remote-ext.h" #pragma comment(lib,"wpcap.lib") int main() { pcap_if_t *
vue移動端城市列表按首字母排序元件包,有npm包,可直接下載使用
初衷,為各使用相關元件的小夥伴寫更少的相關程式碼實現功能,原始碼在我的被另一篇博文裡有,有興趣的可以去研究,使用過程中有問題的請即時反饋,謝了!qq(微信)591339209,有其他常用到的元件也可以反饋給我,酌情封裝!另外要是這個元件還有什麼需要優化,或者有哪裡使用還不方便
Html+javascript實現一個簡單的計算器,可繼續計算
先展示出計算器的大致樣子 <body> <div id="main"> <table frame="box" rules="all"> <tr> <td colspan="5" ><input
淺析CSV----內有程式碼,,去掉定製化的內容,可直接使用
首先認識一下CSV csv---泛指具有以下特徵的任何檔案 純文字,使用某個字符集,比如ASCII,Unicode,EBCDIC或GB2312  
℃江讓您從精通到入門:Android Studio 簡單實現ViewPager,可做APP操作提示
前期準備,如下圖: 第一步、先書寫佈局檔案:activity_main.xml檔案如下: <?xml version="1.0" encoding="utf-8"?> <Re
log4j最簡單的配置,可列印SQL到控制檯
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender
Android小票印表機連線 (已封裝好,可直接使用)
一、新建MyUsbPrinterUtil工具類,程式碼如下:import android.annotation.SuppressLint; import android.app.PendingIntent; import android.content.BroadcastRe