用if条件查询sql数据库

时间:2014-09-28 13:26:15

标签: java sql variables if-statement querying

这可能是一个愚蠢的问题,但这段代码无效......

String sql= "SELECT field, question, choice1, choice2, choice3, choice4, answer "
            + "FROM WineQuiz ORDER BY RANDOM() LIMIT 5";

    Intent i = getIntent();
    String mField1 = i.getStringExtra("FIELD1");
    String mField2 = i.getStringExtra("FIELD2");
    String mField3 = i.getStringExtra("FIELD3");

    if(mField1!="" || mField2!="" || mField3!=""){          
        sql = "SELECT field, question, choice1, choice2, choice3, choice4, answer "
            + "FROM WineQuiz WHERE field='"+mField1+"' or field='"+mField2+"' or field='"+mField3+"' ORDER BY RANDOM() LIMIT 5";

    Cursor c =db.rawQuery(sql, null);

我想做的很简单。我正在创建测验应用程序,其中SelectActivity将测验字段的字符串数据发送到此类,并使用mField1,2,3的变量接收它。

如果SelectActivity不发送任何字符串,则将第一个sql(变量)放入查询中。 如果选择了其中一个字段,mField1或2或3接收字符串数据,则第二个sql将被放入查询中。

然而,第一个sql查询不起作用,而第二个sql查询效果很好。 当我独立使用第一个sql查询时,它运行得很好。因此,第一个和第二个sql似乎无法同时存在,尽管这两个查询本身没有问题。

为什么会这样?

回复评论,“不工作”表示游标没有数据。我的继续代码如下,并显示错误日志“光标没有数据”。它字面意思是那些数组不存储任何数据。

Cursor c =db.rawQuery(sql, null);

    if (c.getCount() > 0) { // If cursor has at least one row
        c.moveToFirst();
        do { // always prefer do while loop while you deal with database
            cPos = c.getPosition();
            array[cPos][0] = c.getString(c.getColumnIndex("field"));
            array[cPos][1] = c.getString(c.getColumnIndex("question"));
            array[cPos][2] = c.getString(c.getColumnIndex("choice1"));
            array[cPos][3] = c.getString(c.getColumnIndex("choice2"));
            array[cPos][4] = c.getString(c.getColumnIndex("choice3"));
            array[cPos][5] = c.getString(c.getColumnIndex("choice4"));
            array[cPos][6] = c.getString(c.getColumnIndex("answer"));
            c.moveToNext();
            //Retrieves whether the cursor is after the last row in this SQLServerResultSet object.
        } while (!c.isAfterLast());
    } else {
        Log.e("SQL Query Error", "Cursor has no data");
    }

0 个答案:

没有答案