SQLite數據庫簡單Demo

爲了節省自己手寫SQLite數據庫,就把平時簡單的Demo留下,方便自己摘抄。

我忘記要不要寫權限了,反正一般寫項目的時候,都直接把常用權限直接寫上了(也許不是一個好習慣~~)。

無非就是幾個類,很簡單。


先上實體類:

package com.wzq.waterlogisticsproject.database;

/**
 * 作者:BigPenguinKing on 2016/11/23 0023 19:04
 * Blog: http://blog.csdn.net/w630886916
 */
public class User {
    private String userName;
    private String passWord;

    public User(String userName, String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                '}';
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}

然後繼續跟上工具類:

package com.wzq.waterlogisticsproject.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 作者:BigPenguinKing on 2016/11/23 0023 19:10
 * Blog: http://blog.csdn.net/w630886916
 */
public class DBUtils extends SQLiteOpenHelper{

    public DBUtils(Context context) {
        super(context, "use.db", null, 1);
    }

    /**
     * 創建數據庫
     *
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        //主鍵自增,兩個表相,這裏是用戶名和密碼
db.execSQL("create table user (id integer primary key autoincrement,name varchar(20) ,pwd varchar(20))");
    }

    /**
     * 更新操作
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//        * 思路:
//        * 1.將user表更改爲臨時表(備份,就是把這個user表表名更改一下,你可以更改爲:temp_user)
//                * sql: alter table user rename to temp_user;
//        * 2.創建一個新表user
//                * sql : create table user (id integer primary key autoincrement,name varchar(20),age integer(10),phone varchar(20))
//                * 3.查詢temp_user表所有的數據,將數據插入2步驟中所創建的一個新表 user
//        * sql:query();
//        *
//        * 4.刪除臨時表temp_user
    }
}

上dao(並不是都用,用什麼寫什麼就行,反正就是增刪改查):

package com.wzq.waterlogisticsproject.database.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.wzq.waterlogisticsproject.database.DBUtils;
import com.wzq.waterlogisticsproject.database.User;

import java.util.ArrayList;
import java.util.List;

/**
 * 作者:BigPenguinKing on 2016/11/23 0023 19:17
 * Blog: http://blog.csdn.net/w630886916
 * dao層
 */
public class UserDao {
    /**
     * 聲明
     */
    private DBUtils dbUtils;
    private SQLiteDatabase database;

    /**
     * 構造方法
     * @param context
     */
    public  UserDao(Context context) {
        dbUtils = new DBUtils(context);
        database = dbUtils.getWritableDatabase();
    }

    /**
     * 添加方法
     * @param name
     * @param pwd
     * @return 如果插入成功,返回true 否則 失敗 返回 false
     */
    public boolean add(String name, String pwd) {
        // 開啓數據庫事務
        database.beginTransaction();
        try {
            // db.execSQL("insert into person (name,phone) values (?,?)", bindArgs)
            /**
             * table 表名 nullColumnHack 你要指定表中那列可以爲空 null
             *
             * ContentValues 你要插入數據user表中的值
             */
            ContentValues values = new ContentValues();// 類似與map集合
            // key 與user中的列名一一對應
            // value 你要往這個列插入的值
            values.put("name", name);
            values.put("pwd", pwd);
            long result = database.insert("user", null, values);
            database.setTransactionSuccessful();
            // result 如果插入成功,返回受影響的行數,返回 -1 就插入失敗
            if (result != -1) {
                return true;
            } else {
                return false;
            }
        }finally {
            // 結束事務
            database.endTransaction();
        }
    }

    /**
     * 查詢方法
     * @return
     */
    public List<User> query() {
        Cursor cursor = database.query("user", null, null, null, null, null, null);
        List<User> list = new ArrayList<User>();
        while (cursor.moveToNext()) {
            list.add(new User(cursor.getString(cursor.getColumnIndex("name")),
                    cursor.getString(cursor.getColumnIndex("pwd"))));
        }
        return list;
    }

}


    /**
     * 刪除一條數據
     * 
     * @param id
     * @return
     */
    public boolean delete(int id) {
        /**
         * table 表名 whereClause 條件 whereArgs 條件參數
         */
        int result = db.delete("user", "id = ?",
                new String[] { String.valueOf(id) });

        if (result > 0) {
            return true;
        } else {    
            return false;
        }

    }

    /**
     * 更新一條數據
     * 
     * @param name
     *            你要修改的名字
     * @param id
     *            根據用戶id來修改
     * @return
     */
    public boolean update(String name, String money, int id) {

        /**
         * table 表名 values 你要修改user表中的值 whereClause 條件 你要根據什麼條件去修改 whereArgs
         * 條件參數
         */
        // 開啓數據庫事務
        db.beginTransaction();
        try {
            ContentValues values = new ContentValues();
            values.put("name", name);
            values.put("money", money);
            int result = db.update("user", values, "id = ?",new String[] { String.valueOf(id) });

            /*User user = null;// new User();
            user.equals("uuu");*/

            db.setTransactionSuccessful();//這一定要設置,不設置的話,你修改的那個數據將不會提交到數據庫
            if (result > 0) {
                return true;
            } else {
                return false;
            }

        } finally {
            // 結束事務
            db.endTransaction();
        }

    }
/**
     * 查詢所有用戶的值
     * 
     * @return
     */
    public List<User> findAll() {
        /**
         * distinct 是否取出重複數據 如果這是true 就去除重複數據,否則不去除 table 表名 columns 你要查詢的列
         * name,phone,id,age , name,phone id,name,age selection 查詢條件 id = ? or
         * name = ? selectionArgs 查詢條件參數 groupBy 分組查詢 having 字句 子查詢語句 分類 電冰箱
         * ,having 電冰箱的價格 < 2000
         * 
         * orderBy 是否排序 排序分 升序與降序 1,2,3 3,2,1
         * 
         * limit 分頁語句 10 20
         */
        try {
            Cursor cursor = db
                    .query("user", null, null, null, null, null, null);
            List<User> list = new ArrayList<User>();
            while (cursor.moveToNext()) {
                // cursor.getColumnIndex("name") 返回的是name列的所引值
                // cursor.getString()根據索引拿到值
                // List
                String name = cursor.getString(cursor.getColumnIndex("name"));
                int age = cursor.getInt(cursor.getColumnIndex("age"));
                String phone = cursor.getString(cursor.getColumnIndex("phone"));

                User user = new User();
                user.setAge(age);
                user.setName(name);
                user.setPhone(phone);

                list.add(user);
            }
            // 關閉遊標
            closeCursor(cursor);
            return list;
        } catch (Exception e) {
            return null;
        }

    }

    /**
     * 關閉數據庫
     */
    public void closeDb() {
        if (db != null && db.isOpen()) {
            db.close();
        }
    }

    /**
     * 關閉遊標
     */
    public void closeCursor(Cursor cursor) {
        if (!cursor.isClosed()) {
            cursor.close();
        }
    }

至於添加數據一般就在哪用就在哪添加:
不過如果是初始化添加的話,那最好就是在自定義的Application裏面初始化了。

    public void setDB() {
        UserDao dao = new UserDao(getApplicationContext());
        dao.add("138200000001", "123456");
        dao.add("138200000002", "123456");
        dao.add("138200000003", "123456");
        dao.add("138200000004", "123456");
    }
發佈了35 篇原創文章 · 獲贊 23 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章