从Android中先前创建的SQLite数据库中搜索和检索特定数据?

尤尔兹

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Java中的SQLIte数据库检索特定数据

如何从 Firebase 数据库中检索特定数据

如何在 Android ListView 中显示来自 SQLite 数据库的特定数据

在Android中以特定格式从数据库检索数据

Postgres:在特定数据库中创建函数

在特定数据库中创建SQL Server视图

从特定数据库检索数据

在Xamarin的SQLite数据库中存储和检索数组

如何使用特定数据从 Firebase 数据库中检索数据

数据更改后如何从Firebase实时数据库中检索特定数据

Android在SQlite数据库中存储Listview数据,并在Listview中创建活动时检索数据

从android中的Sqlite数据库检索null值

Visual Studio中的VB.net-如何从数据库中检索特定数据?

如何使用Android Studio从Firebase实时数据库中的节点检索特定数据?

在 SQLite 数据库中搜索和显示条目

如何从Android中的Firebase数据库检索特定节点

如何使用复选框来检索数据库中的特定数据

(Angularfire)从具有ID的Firebase数据库中检索特定数据

如何从 Firebase 数据库 Kotlin 中检索特定数据?

在SQLite数据库中搜索特定字符串-Android SDK

从数据库中检索和

我想从 SQLite 数据库中删除特定数据但它不起作用

为MYSQL中的一个特定数据库创建特定的用户名和密码

如何在android的Sqlite数据库中创建表

无法在android中创建Sqlite数据库

最初何时在Android中创建SQLite数据库?

未在sqlite中创建数据库

在JDBC SQLite中创建数据库

在 PublisherCacheFolder 中创建 Sqlite 数据库