Android SQLite Query(我想解析常规Sql查询)

时间:2016-03-13 08:43:45

标签: android mysql sqlite android-studio android-sqlite

我从EditText中获取了String值。还有一个提交查询的按钮。

String sql=editQuery.getText().toString();// SELECT * FROM employees

StringBuffer finalDataq=new StringBuffer();

Cursor cur = dbHelper.rawsqlquery(sql);

for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext()) {
    finalDataq.append(cur.getInt(cur.getColumnIndex(MyDBHelper.ID)));
    finalDataq.append(" - ");
    finalDataq.append(cur.getString(cur.getColumnIndex(MyDBHelper.FIRST_NAME)));
                    finalDataq.append(" - ");
    finalDataq.append(cur.getString(cur.getColumnIndex(MyDBHelper.LAST_NAME)));

    finalDataq.append(" - ");
    finalDataq.append(cur.getString(cur.getColumnIndex(MyDBHelper.ADDRESS)));

    finalDataq.append(" - ");
    finalDataq.append(cur.getDouble(cur.getColumnIndex(MyDBHelper.SALARY)));
                    finalDataq.append("\n");

}
submittedQuery.setText(finalDataq);

我的rawsqlquery()功能

public Cursor rawsqlquery(String sql) {
    return myDB.rawQuery(sql,null);
}

它给了我正确的结果。例如,当我从table_name写入select *时,它返回了表中的所有行。

但我想选择特定的列,我不知道该怎么做。我想用editext编写我的查询并直接想编译并获得结果它将返回游标对象(如果我没有错)。那么我如何选择列名来显示我的结果,因为列名是用editText编写的。   例如:SELECT id,员工的fname

提前谢谢

2 个答案:

答案 0 :(得分:0)

尝试使用Cursor方法获取cur.getColumnNames();检索的列名称

删除你的for循环并使用以下代码

Cursor cur = dbHelper.rawsqlquery(sql);
String[] names = cur.getColumnNames();
while(cur.moveToNext()) {
    for(String name : names) {
        finalDataq.append(cur.getString(cur.getColumnIndex(name)));
        finalDataq.append(" - ");
    }
    finalDataq.append("\n");
}

答案 1 :(得分:0)

我建议您将所有列名称作为数组获取,并将其设置为AutoCompleteTextView,为用户提供一个选择菜单。就像在这里一样,AutoCompleteTextView名为actv

actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);

使用

获取所有列名称
Cursor dbCursor = mDataBase.query(TABLE_NAME, null, null, null, null, null, null);
String[] columnNames = dbCursor.getColumnNames();

然后将adapter设置为actv

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,columnNames);
actv.setAdapter(adapter);

这样用户就有机会选择列名。希望它有所帮助。