【问题标题】:Select data from SQLite into ListArrays从 SQLite 中选择数据到 ListArrays
【发布时间】:2011-07-27 15:44:54
【问题描述】:

我已经为此绞尽脑汁好几天了,但我无法在 Android/Java 中使用 SQLite 数据库。我正在尝试从 SQLite 数据库中选择两行到 ListArray 中(或两行,每行一个。不确定这会更好或更糟),我只是不明白该怎么做。我已经尝试了各种我发现的数据库管理器类,但它们都没有做我需要的事情,而且似乎我应该能够完成这个简单的任务,而无需我在其他数据库管理器中看到的额外功能。有没有什么简单的方法可以从现有的 SQLite 数据库中查询一些数据并将其放入 ListArray 以便我可以使用它?我意识到我需要将数据库从资产复制到 Android 数据库路径中,我可以处理这部分。我还需要能够修改每行的一列。我不需要创建数据库、表或行。我恳求有人帮我解决这个问题,因为我认为我编写的任何代码(从互联网复制)都是完全没用的。

【问题讨论】:

  • 您到底想访问哪些数据/信息?它是您自己输入到数据库中的,还是您尝试从 Android 数据库中访问信息,例如联系人或通话记录?如果您尝试访问 Android 数据库,通常建议您使用 ContentProvider。这提供了一个抽象层并允许 Android 处理数据库事务。
  • 这是我自己提供的数据库。
  • 能否提供一些您使用过的源代码,以便我们帮助调试?
  • 我没有任何我觉得舒服的代码。我找不到任何仅选择一些数据并使用它的示例。我想大多数发布代码的人都假设人们熟悉如何使用该代码,但我根本不理解它。我来自 PHP 和 C#,这两种语言都有非常简单的访问数据库的方法。似乎Java没有。有没有简单的方法来查询数据库并将数据从选择中放入 ListArray?
  • 您可以使用 myDB.rawQuery() 并取回游标。然后您可以使用 cursor.getString(YOUR_COLUMN_NAME) 并将其添加到您的数组中。

标签: android sqlite


【解决方案1】:

您可以创建这样的方法:

private List<MyItem> getAllItems()
    List<MyItem> itemsList = new ArrayList<MyItem>();
    Cursor cursor = null;
    try {
        //get all rows
        cursor = mDatabase.query(MY_TABLE, null, null, null, null,
                null, null);
        if (cursor.moveToFirst()) {
            do {
                MyItem c = new MyItem();
                c.setId(cursor.getInt(ID_COLUMN));
                c.setName(cursor.getString(NAME_COLUMN));
                itemsList.add(c);
            } while (cursor.moveToNext());
        }
    } catch (SQLiteException e) {
        e.printStackTrace();
    } finally {
        cursor.close();
    }
    return itemsList;
}

这将在您的班级中,比如说MyDatabaseHelper,您还必须在其中声明:

private static class DatabaseHelper extends SQLiteOpenHelper{

    private final static String DATABASE_CREATE="create table " + MY_TABLE + " (id integer primary key, country string);";

    public DatabaseHelper(Context context,String name, CursorFactory factory, int version){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, 
                          int newVersion){
        Log.w(TAG, "Upgrading database from version " + oldVersion 
              + " to "
              + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS "+ MY_TABLE);
        onCreate(db);
    }
}    

用于open()close() 数据库。

【讨论】:

  • 另一个选项(我通常使用的)是将这些值存储在哈希图中,将 _ID 存储为值,并将我的“可搜索词”存储在键中,这样我就可以轻松找到所需的一切一个查询,而不是发生多个数据库事务(导致极度减速)
  • 好吧,你的数据库助手类对我一点帮助都没有。当我从资产导入现有数据库时,它假定它在运行时创建数据库,但我认为我可以解决这个问题。关于这段代码我不明白的第二件事是查询。 cursor = mDatabase.query(MY_TABLE, null, null, null, null, null, null); 这基本上只是在执行 SELECT * FROM MY_TABLE 吗?
  • 老实说,我仍在试图弄清楚如何理解这些文档。
  • 我放弃了。那里的列表代码不起作用,我无法确定文档的正面或反面来弄清楚如何使其工作。我只是看看我可以在 xml 中做什么来完成这项工作,并省略了需要 sqlite 的功能。我稍后会尝试解决这个问题并将其添加为应用程序的更新。
  • @Ovidiu Latcu MyItem 来自哪里?
猜你喜欢
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多