2018年6月22日17:16:10
今天下午,想实现,向数据库表指定位置插入一条数据,用于保证,获取到的数据有序。但是感觉可能比较复杂。需要先获取到上一条的位置。
自己想着:直接插入数据时,添加一列标记字段。再获取数据时,再排序获取即可。
转载文件:
https://blog.csdn.net/codepython/article/details/47749973
一、sqlite alter table添加多列
最近在做Android数据库数据维护,新版本要在原有的表的基础上新增三个列。查询标准SQL语法,最初的执行语句如下:
1
2
3
|
String ADD_COLUMNS = "ALTER TABLE mytable ADD (source INTEGER DEFAULT 0, time TEXT, dura TEXT)" ; this .execQuery(ADD_COLUMNS); |
在执行这条语句的时候,程序崩溃,崩溃信息如下:
SQLiteException on:near "(":syntax error(code 1): while compiling: ALTER TABLE mytable ADD (source INTEGER DEFAULT 0, time TEXT, dura TEXT)
把在括号(有语法错误,那我就把括号去掉,执行语句换成:
1
2
3
|
String ADD_COLUMNS = "ALTER TABLE mytable ADD source INTEGER DEFAULT 0, time TEXT, dura TEXT" ; this .execQuery(ADD_COLUMNS); |
程序崩溃依旧,崩溃信息如下:
SQLiteException on:near ",":syntax error(code 1): while compiling: ALTER TABLE mytable ADD (source INTEGER DEFAULT 0, time TEXT, dura TEXT)
逗号附近有语法错误。
那么在SQLite中如何使用alter命令添加多列呢?
不要挣扎了,SQLite的alter不支持添加多列,一列一列来吧:
1
2
3
4
5
6
7
|
String ADD_COLUMNS_SOURCE = "ALTER TABLE mytable ADD source INTEGER DEFAULT 0" ; String ADD_COLUMNS_TIME = "ALTER TABLE mytable ADD time TEXT" ; String ADD_COLUMNS_DURA = "ALTER TABLE mytable ADD dura TEXT" ; this .execQuery(ADD_COLUMNS_SOURCE); this .execQuery(ADD_COLUMNS_TIME); this .execQuery(ADD_COLUMNS_DURA); |
下面是SQLite提供的alter语法:
![SQLite alter table](http://www.sqlite.org/images/syntax/alter-table-stmt.gif)
SQL字符型字段按数字型字段排序实现方法
自己遇到的问题,跟下面博客描述一致,自己直接将数据字段类型,修改为了int。
得分字段为varchar
那么按得分排序得到的结果可能是:
1
10
11
123
1234
2
25
253
3
但是我们想要按照数字排序
1
2
3
10
11
25
123
1234
253
这时候只需要
一种 、
数字字符串为01 0100 02 0200 一排序就是这个顺序,我想要变成01 02 0100 0200 就用下面这个办法
把这个字段转为int 然后再排 序就对了。
ORDER BY CAST(字段名 AS DECIMAL)
另一种
假如你要排序的字段名为 mynum,
如果 mynum 是 int 型,直接排序即可: order by mynum
如果 mynum 是 string 型,但存的是数值,并且要出现你说的自然排序效果的话,要这样做: order by mynum+0
m/benweet/stackedit
最后一种
使用MySQL绝对值函数ABS,它告诉MySQL使用绝对值来处理处理这个字段:
ORDER BY ABS(字段名)
三、数据库降级操作
当用户,下载了新版本的项目,数据库版本为7,但是重新下载了个旧版本的apk,数据库版本为6。打开指定模块时报错: SQLiteException,Can't downgrade database
@Override public void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion){ Log.d(Logtag, "数据库降级从:"+oldVersion+"到"+newVersion); db.execSQL("DROP TABLE IF EXISTS TABLE_APP_1;"); db.execSQL("DROP TABLE IF EXISTS TABLE_APP_2;"); db.execSQL("DROP TABLE IF EXISTS TABLE_APP_3;"); onCreate(db); // 建表 try { super.onDowngrade(db,oldVersion,newVersion); }catch(Exception ex){ LogUtil.e(Logtag,ex.toString()); } }
参考博客链接:
https://blog.csdn.net/vvcumt/article/details/40617425
https://blog.csdn.net/jie1991liu/article/details/50339797