1、首先新建一个类继承SQLiteOpenHelper 实现 oncreate 、onUpgrade 的方法 以及一个构造方法
并写一个创建数据的语句
public class DataBaseHelper extends SQLiteOpenHelper
private static final String CREATE_USER=" create table LoginUser ( _id integer primary key autoincrement, username text,password text )"
创建一个表名 LoginUser id的属性为主键 并且 自增,username 为文本,password 为文本(当然最好还是不要)
private static final String CREATE_USER = "create table LoginUser(" + "_id integer primary key autoincrement," + "username text," + "password text)";
实现一个构造方法 和 oncreate 、onUpgrade
public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); this.context = context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_USER); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists User"); onCreate(db); }
2、创建一个DbManager类
用单利模式(下面这个是双重锁)创建出一个数据名为UserStore
public class DbManager { public static DataBaseHelper mHelper; //构造方法 private DbManager(){} //单利模式 public static SQLiteDatabase getInstance(Context context) { if (mHelper == null) { synchronized (DbManager.class) { if (mHelper == null) { mHelper = new DataBaseHelper(context, "UserStore", null, 1); } } } return mHelper.getWritableDatabase(); } }
3、创建一个接口类 IDao
下面这个类我是为了测试用的,所以没有写的比较规范,大家可以自行更改
public interface IDao { void insert(Context context, String username, String password); void delete(Context context, String username); void update(Context context, String fieldName, String username, String password); Cursor query(Context context, String username); }
4、创建一个UserDao类,用来实现具体的数据库查询方法
具体查询方法使用
4.1 insert 插入一条数据
源码中的insert方法。
public long insert(String table, String nullColumnHack, ContentValues values)
第一个参数: String table 表名
SQL doesn't allow inserting a completely empty row without naming at least one column name.
第二个参数: String nullColunHack 源码中解释 到 SQL不允许插入完全空行而不命名至少一个列名。 那么我们就填上null
第三个参数:填入键值对 ,
public void insert(Context context, String username, String password) { SQLiteDatabase db; Log.e("-------------", "insert==" + context.toString() + "username====" + username + "password====" + password); db = DbManager.getInstance(context); ContentValues values = new ContentValues(); values.put("username", username); values.put("password", password); db.insert("LoginUser", null, values); }
对应的sqlite语句
INSERT INTO LoginUser VALUES (value1,value2,value3,...valueN);
4.2 delete 删除一条数据
看看源码的的delete方法
delete(String table, String whereClause, String[] whereArgs)
第一个参数不解释
第二个参数:删除条件 ,比如说 “username=?”
第三个参数:删除条件的值 。 ???这个问号的值 “admin” 有多少个问号就要有多少个值
@Override public void delete(Context context, String username) { SQLiteDatabase db; db = DbManager.getInstance(context); db.delete("LoginUser", "username=?", new String[]{username}); }对应的sqlite语句
sqlite> DELETE FROM LoginUser WHERE username ="aaa";
4.3 update
看看源码的update方法
int update(String table, ContentValues values, String whereClause, String[] whereArgs)
第一个参数:不解释
第二个参数 跟插入数据的方法的values 一样,在更新的方法里头,意思就是 需要更新那些字段的数据)
第三个参数: 更新条件 条件1,条件2
第四个参数 :更新条件的值 值1,值2
看下例子对应的参数
这下应该明白了吧
4.4 query 查询语句
源码query 方法 参数
Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
/** * @table 表名 * @colums 列名 * @selection 搜索条件1,条件2 * @selectionbArgs 条件1的值,条件2的值 * @group null * @having null * @orderBy 排序 * @limit 分页 */
Cursor cursor = db.query("LoginUser", new String[]{"username", "password"}, "username like ?", new String[]{"%a%"}, null, null, null); Log.e("aaa", cursor.getColumnCount() + " 数据库列数"); Log.e("aafffa", cursor.getCount() + "数据行数");select username, password from LoginUser where username like "%a%";
在Activity中调用 那就很简单啦
UserDao.getmUserDao().insert(this, user, pwd);
UserDao.getmUserDao().delete(this, user);