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");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值