【问题标题】:Android SQLite Query ( i want to parse General Sql query)Android SQLite 查询(我想解析通用 Sql 查询)
【发布时间】:2016-03-13 08:43:44
【问题描述】:

我从 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);
}

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

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

提前谢谢你

【问题讨论】:

  • 如果有人不明白,我会在 cmets 中解释
  • 事情是 rawquery 写入光标对象。如果我想显示所有列,那么这很容易,但是在 edittext 中我怎么知道要显示哪一列。有人可以帮忙吗???
  • 尝试String[] names = cursor.getColumnNames();,然后仅获取这些列的值。
  • 你想做什么,从特定列获取数据并立即显示在 EditText 中?
  • @shree krishna 。我正在尝试从 editText 获取查询,然后我想在 TextView 上显示数据。由于用户正在输入任何 sql 查询,我怎么知道需要显示这些列。如果用户选择所有行,我的代码就可以工作,那么我只需要打印整个表格就可以了。

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


【解决方案1】:

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

删除你的 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");
}

【讨论】:

  • 太好了...如果这个答案有帮助,请关闭问题。
【解决方案2】:

我建议您将所有列名作为数组获取并将其设置为AutoCompleteTextView,从而为用户提供选择菜单。就像这里你有AutoCompleteTextViewactv

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);

这样用户将有机会选择列名。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多