android SQLite查询()'DRY RUN'

时间:2016-11-01 21:04:40

标签: android sqlite

以下是一些基本代码:

where(); // Generates "flag0 = 'R' AND (flag211 & 1) == 1"
return database.query( RT, minColumns(), where(), null, null, null, orderby() ); 

在我的应用程序中,where()方法可以返回一个由于几个“好”原因而不存在的列名: (a)方法很复杂,我只是人 (b)该方法返回由用户直接输入的值。

在任何一种情况下,应用程序都会按预期崩溃:

SQLiteLog: (1) no such column: flag211
AndroidRuntime: FATAL EXCEPTION: AsyncTask #1

在发布之前如何验证查询(甚至只是WHERE子句的有效性)?

或者如何很好地捕获和处理异常?

1 个答案:

答案 0 :(得分:0)

据我所研究,没有SQLite'干运行'设施本身。

但SQLite query()确实抛出了一个可以被捕获的异常,尽管缺乏明显的文档。

在我的问题中,我明确表示没有这样的专栏'事件被认为是正常的。

如果你在后台运行query(),这是一个经过测试的方法来捕获事件并礼貌地通知用户。

 package StringAndArray;


 public class Question_Four_Replace_Spaces {

 public static void main(String[] args) {
    String string = "Mr Shubham Dilip Yeole";
    char[] array = string.toCharArray();
    System.out.println("\n\nInput : " +string);
    System.out.println("\n\nResult: "+method_1(array,string.length()));
    method_1(array,string.length());
 }


private static String method_1(char[] array, int length) {
    int spaceCount = 0;
    for(int i=0; i<array.length; i++){
        if(array[i]==' ') spaceCount++;
    }
    int count = 0;
    int newLength = length + spaceCount*2;
    char[] newArray = new char[newLength];

    for(int i= 0; i<array.length; i++){
        if(array[i]==' '){
            newArray[count++] = '%';
            newArray[count++] = '2';
            newArray[count++] = '0';
        }else{
            newArray[count] = array[i];
            count++;
        }
    }
    String newString1 = new String(newArray);

    return newString1;
}
}

感谢@Catluc的有用提示。