Android 数据库操作

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语法:

 
二、

SQL字符型字段按数字型字段排序实现方法

自己遇到的问题,跟下面博客描述一致,自己直接将数据字段类型,修改为了int。

得分字段为varchar 
那么按得分排序得到的结果可能是: 

10 
11 
123 
1234 

25 
253 

但是我们想要按照数字排序 



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

原文地址:https://www.cnblogs.com/liyanli-mu640065/p/9214462.html