我有一个SQLite数据库,该数据库是在SQLite浏览器中制作的,并通过SQLite Asset Helper库导出到我的Android应用程序中。该数据库仅用于只读任务,不能升级或修改。
现在,我想在特定列中搜索用户在TextView中输入的任何数据,并在数据与该列的某个值匹配的情况下,检索与其他列相对应的所有值。
例如:
TABLE FRUITS
_id NAME URL
1 apple R.drawable.apple
2 orange R.drawable.orange
3 kiwi R.drawable.kiwi
由于我的应用程序仅允许用户输入NAME字段,因此该查询仅需要在NAME列中进行搜索,并且仅在数据库中存在URL值的情况下检索该URL值,否则将不返回任何内容。
这是我导入数据库的代码:
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "fruitManager";
private static final int DATABASE_VERSION = 1;
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public Cursor answerRequest(String request) {
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String sqlTables = "FRUITS";
qb.setTables(sqlTables);
String[] sqlSelect = {"0 _id", "NAME", "0 URL"};
Cursor c = qb.query(db, sqlSelect, null, null,
null, null, null);
return c;
}
}
从这里我提出了要求:
public class Request {
private Cursor cursor;
private MyDatabase db;
String request;
String url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sqlite_asset_helper);
public void onClick(View v) {
request = mEdit.getText().toString().toLowerCase();
db = new MyDatabase(this);
cursor = db.answerRequest(request);
url = cursor.getString(c.getColumnIndex("NAME"));
System.out.println("Your request was: " + request +
" and has this URL: " + url);
}
}
protected void onDestroy() {
super.onDestroy();
cursor.close();
db.close();
}
尽管如此,执行查询仍需要大量代码,但是在这种情况下(由于导入的数据库),我不知道确切地如何实现它们。提前致谢。
更新:我有点绝望,所以如果您没有答案,但是知道执行此任务的替代方法(例如使用另一个数据库处理程序而不是SQLite),我将接受您的建议作为正确答案。唯一的限制是:必须是脱机解决方案(访问数据库不需要Internet连接)。
您当前的查询如下所示:
`select 0 _id, NAME, 0 URL from FRUITS`
请注意,您没有在任何地方使用请求字符串。您还选择了整数文字0
并将其别名为其他列名称-似乎没有任何原因。照原样,您的结果将是
_id NAME URL
0 apple 0
0 orange 0
0 kiwi 0
您想要的是以下内容:
`select * from FRUITS where NAME = request`
这是我的写法:
public Cursor answerRequest(String request) {
SQLiteDatabase db = getReadableDatabase();
String table = "FRUITS";
String where = "NAME = ?";
String[] whereArgs = {request};
// select * from fruits where name = request
return db.query(table, null, where, whereArgs, null, null, null);
}
在其他地方,当您想检索值时:
db = new MyDatabase(this);
Cursor cursor = db.answerRequest(request);
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
// cursor is not empty, read values here
String url = cursor.getString(cursor.getColumnIndex("URL"));
}
} finally {
cursor.close();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句