1. 程式人生 > >關於Sqlite的簡單使用與總結,可直接模仿用到現有專案中~

關於Sqlite的簡單使用與總結,可直接模仿用到現有專案中~

最近剛剛開通了blog,目的就是把自己常用到的一些技術點和一些模版積累下來,方便後期做專案的時候可以直接拿出模版套著使用,而不用每次都需要找度娘去解決,非常的不方便~~~
今天的第一篇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