为了节省自己手写SQLite数据库,就把平时简单的Demo留下,方便自己摘抄。
我忘记要不要写权限了,反正一般写项目的时候,都直接把常用权限直接写上了(也许不是一个好习惯~~)。
无非就是几个类,很简单。
先上实体类:
package com.wzq.waterlogisticsproject.database;
/**
* 作者:BigPenguinKing on 2016/11/23 0023 19:04
* Blog: http://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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");
}