• 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

  • 相关阅读:
    webix datadable 分页重加载
    webix datatale 分頁加载两次
    webix .datatable 表格分页
    webix datatable 列头加tooltip
    webix.tree 修改图标
    webix icon 图标
    spring 模板发送邮件
    spring发QQ邮件
    严重: Context initialization failed org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [cn.itcast.javaee.springmvc.app06.HelloAction] for bean with name '/hello.action' de
    严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/springmvc-day01]]
  • 原文地址:https://www.cnblogs.com/liyanli-mu640065/p/9214462.html
Copyright © 2020-2023  润新知