Android 数据存储 (三)SQLite Databases

最近项目需要用到涉及数据库SQLite的知识,真正用的时候才发现自己一点都不熟悉。所以打算将其使用方法总结一下,方便自己以后复习。

SQLiteDatabase


SQLiteDatabase类用来管理SQLite数据库。
它有方法可以创建,删除,执行SQL命令,并执行其它常见的数据库管理任务。

1 创建 打开数据库

SQLiteDatabase类中提供了5 个static方法用来打开一个文件对应的数据库。

//openDatabase方法打开path文件对应的数据库。
public static SQLiteDatabase openDatabase(String path, CursorFactory factory, int flags)
public static SQLiteDatabase openDatabase(String path, CursorFactory factory, int flags,DatabaseErrorHandler errorHandler)
//openOrCreateDatabase 如果不存在则先创建再打开数据库,如果存在则直接打开。
public static SQLiteDatabase openOrCreateDatabase(File file, CursorFactory factory)
public static SQLiteDatabase openOrCreateDatabase(String path, CursorFactory factory)
public static SQLiteDatabase openOrCreateDatabase(String path, CursorFactory factory,DatabaseErrorHandler errorHandler)

通过文件path 或者file 创建SQLiteDatabase对象。通过此对象就可以操作数据库了。

//创建打开数据库。
SQLiteDatabase mTestDb = SQLiteDatabase.openOrCreateDatabase("/data/data/cn.vn.sqlitedatademo/databases/my.db", null);
要保证文件路径是已存在,(例如没有databases文件夹,则会报错android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database)

Activity的父类(不是直接父类)ContextWrapper.java实现了context.java中的如下两个抽象方法:

SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory)

SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
            DatabaseErrorHandler errorHandler)

所以可以在Activity中直接调用这两个方法来创建数据库,或者通过它的context来创建数据库。


2 创建表

创建一张表,表名user_info,列为 _id(主键并且自动增加)、name(用户名)、pwd(密码)、modifyTime(修改时间)。

mTestDb.execSQL("CREATE TABLE IF NOT EXISTS user_info(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT,pwd TEXT,modifyTime INTEGER)");

3 添加数据

public static void InsertTest(){
    UserBean user = new UserBean();
    user.setName("xiaopihai");
    user.setPwd("12345678");
    user.setModifyTime(System.currentTimeMillis());
    //增加一条数据,INSERT INTO user_info VALUES()因为有4列,所以需要写4项数据,否则会失败,
    //第一个数据位null,这是因为它是自动增长的。.
    mTestDb.execSQL("INSERT INTO user_info VALUES(null,'xiaopihai','12345678',"+user.getModifyTime()+")");
    //不可以为主键设置数据,因为它是唯一的,不可以与别的相同。否则会报错
    //SQLiteConstraintException: PRIMARY KEY must be unique (code 19)
    //mTestDb.execSQL("INSERT INTO user_info VALUES(12,'zhangsan','mima1111',"+System.currentTimeMillis()+")");
    //下面是增加一条数据(只设置某个或某几个内容),默认没添加的数据时空的。
    mTestDb.execSQL("INSERT INTO user_info(name,pwd) VALUES('lisi','mimajjjj')");
    mTestDb.execSQL("INSERT INTO user_info VALUES(null,?,?,?)",new Object[]{user.getName(),user.getPwd(),user.getModifyTime()});
    mTestDb.execSQL("INSERT INTO user_info(name,pwd) VALUES(?,?)",new Object[]{"lisi","mimajjjj"});
    
    ContentValues values = new ContentValues();
    values.put(UserSQLiteOpenHelper.COL_NAME,"qwerdf");
    //values.put(UserSQLiteOpenHelper.COL_PWD, "qwerdflol");
    values.put(UserSQLiteOpenHelper.COL_TIME, user.getModifyTime());
    mTestDb.insert("user_info", null,values);
}

数据库结果

_id|name|pwd|modifyTime
1|xiaopihai|12345678|1466403447668
2|lisi|mimajjjj|
3|xiaopihai|12345678|1466403447668
4|lisi|mimajjjj|
5|qwerdf||1466403447668

数据库增加有两种方法:

(一)通过执行sql语句,调用execSQL(String sql) 或者 execSQL(String sql,Object[] bindArgs)方法。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值