【问题标题】:Does value get converted when inserted into database?插入数据库时​​值是否会转换?
【发布时间】:2013-06-29 17:32:35
【问题描述】:

我很好奇androids SQLiteDatabase的insert方法会不会自动处理类型转换。

这是我的例子:

我有一个列名为 age 的 csv 文件。它的类型将是 INTEGER。

假设我已经创建了数据库和表。

现在我正在使用 CSVReader 解析 csv 文件,它解析每一行并将每个值插入到 String[] 的索引中。

为了将每一行数据插入数据库,我必须使用一个 ContentValue 对象,它允许我在其中存储值。

//Parse each line and store in line...

ContentValue values = new ContentValue();
values.put(KEY_AGE, line[1]); // Assume line[1] is the age 

database.insert(table, null, values); 

如果我将年龄值存储为字符串(如上所示),然后将其插入表中,Android 是否会在将其插入数据库之前处理转换为 INTEGER?

我问这个是因为我试图将一堆表插入数据库,当我可以遍历一个数组然后显式声明每个 put 调用时,它看起来更简洁,即:

如果有人有任何设计建议,请随时告诉我。

干净

int i = 0;
for(String s : TransitContract.Routes.COLUMN_ARRAY) {
    values.put(s, line[i]);
    i++;
}

丑陋

values.put(TransitContract.Routes.KEY_ROUTE_ID, line[0]);
values.put(TransitContract.Routes.KEY_AGENCY_ID, line[1]);
values.put(TransitContract.Routes.KEY_SHORT_NAME, line[2]);
values.put(TransitContract.Routes.KEY_LONG_NAME, line[3]);
values.put(TransitContract.Routes.KEY_DESCRIPTION, line[4]);
values.put(TransitContract.Routes.KEY_ROUTE_TYPE, Integer.parseInt(line[5]));
values.put(TransitContract.Routes.KEY_URL, line[6]);
values.put(TransitContract.Routes.KEY_COLOR, line[7]);
values.put(TransitContract.Routes.KEY_TEXT_COLOR, line[8]);

return mDatabase.insert(TransitContract.Routes.TABLE_NAME, null, values);

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    当您将列声明为INTEGER 时,如果可能,SQLite 会自动将字符串转换为数字。

    请参阅Type Affinity 的文档。

    【讨论】:

      【解决方案2】:

      如果您的 ContentProvider 没有限制它(即直接将其传递给 SQLiteDatabase.insert() 方法),它应该可以工作。 SQLite 对查询/插入中使用的类型和实际的列类型并不那么挑剔。

      但是,最好在插入之前解析和检查值。否则,您实际上可能会插入一个无法解析为整数的字符串,因此检索该值可能会失败。

      参考资料:

      【讨论】:

      • 我在我的 SQLiteOpenHelper 子类的 onCreate 中执行所有这些操作,所以 ContentProvider 甚至没有发挥作用,对吧?这些不是通过 ContentProvider 完成的插入。这些是在我的 SQLiteOpenhelper 首次初始化数据库时直接对数据库进行的插入。顺便说一句,我想我会让 SQLite 处理它,因为我得到的数据已经过类型检查。
      • 由于SQLiteOpenHelperSQLiteDatabase 实例作为参数传递,它应该按照您想要的方式工作。
      猜你喜欢
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 2020-12-09
      • 2013-05-24
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多