我从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
提前谢谢
答案 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);
这样用户就有机会选择列名。希望它有所帮助。