版权声明:本文出自门心叼龙的博客,转载请注明出处。 https://blog.csdn.net/geduo_83/article/details/86559864
本文为自己多年来在Android实战开发过程中总结归纳的一些常见问题,现在分享出来希望对初学者有所帮助。
本文出自门心叼龙的博客,转载请注明出处: https://blog.csdn.net/geduo_83/article/details/86559864
目录
1. SQLite数据表都有哪些常见的数据类型?
- 1.1 自增Integer主键
id integer PRIMARY KEY autoincrement
- 1.2 字符串数据类型
content varchar(64) DEFAULT '0'
- 1.3 超文本类型
content text
- 1.4 时间类型
addTime datetime default (datetime('now','localtime'))
2. 常见的增删改查语句?
- 2.1 创建数据库
复写SQLiteOpenHelper的构造方法:
private TrackDBManager(Context context) {
this(context, mDBName, null, VERSION);
}
- 2.2 创建表
在onCreate方法里创建表
db.execSQL("create table track (vid varchar(64),trackid varchar(64),tracktime varchar(20),latlngs text)");
- 2.3 修改表
String sq11 = "alter TABLE " + HIS_QUERY + " add lat varchar(64) DEFAULT '0'";
db.execSQL(sq11);
- 2.4 增删改查语句
带占位符用?代替,参数的值按照?的顺序放入Object数组即可,也可以?直接用参数值替换即可
- "insert into student(name,age,sex,class) values(?,?,?,?)", new Object[]{name, age, sex, whichclass}
- "delete from student where name=?",new Object[]{name})
- "update student set age=?, sex=?,class=? where name=?",new Object[]{age, sex, whichclass, name}
- Cursor cursor = db.rawQuery("select age,sex,class from student where name=?",
- new String[]{name});
if(cursor.moveToNext()){
StudentInfo info = new StudentInfo();
info.setAge(cursor.getInt(0));
info.setSex(cursor.getString(1));
info.setWhichclass(cursor.getString(2));
return info;
}
cursor.close();
3. 常见错误?
- 3.1 数据库名称不带.db的后缀导致某些机型创建数据库时Crash
- 3.2 插入数据是字段内容过长而导致的Crash,尽量使用非SQL语句来完成对数据库的操作
- 3.3 修改表时增加多个字段时导致的Crash,多个字段分别添加即可
4. 数据库升级技巧?
- 4.1 在onCreate方法里创建表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY_HIS);
final int FIRST_DATABASE_VERSION = 1;
onUpgrade(db, FIRST_DATABASE_VERSION, version);
}
- 4.2 在onUpgrade方法里实现升级逻辑
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 使用for实现跨版本升级数据库
for (int i = oldVersion; i < newVersion; i++) {
switch (i) {
case 1:
String sql = "alter TABLE " + HIS_QUERY + " add searchtype integer DEFAULT 0";
db.execSQL(sql);
break;
case 2:
String sql1 = "alter TABLE " + HIS_QUERY + " add addTime datetime";
db.execSQL(sql1);
default:
break;
}
}
5.SQLite使用时一般架构?
架构1:
- 5.1 底层SQLiteOpenHelper创建数据库,创建表
- 5.2 DAO层来完成增删改查的操作,这样避免了数据库中表过多而导致的代码冗余的问题
架构2: