【问题标题】:java android inserting blob and strings with special chars using raw query - sqlite3java android使用原始查询插入带有特殊字符的blob和字符串 - sqlite3
【发布时间】:2013-09-13 16:53:24
【问题描述】:

我正在编写应用程序,我希望有两个版本 - 一个用于桌面(java 标准版),一个用于 android。

目前我正在研究数据库模型。为了让代码在两个版本中都能正常工作,第一个想法是跳过所有在两个平台之间不兼容的函数(不幸的是,Android 和桌面 Java 具有完全不同的类来管理 SQLite 数据库,即使某些方法相似)并且只使用纯原始 SQL 语句。

但是,当深入研究时,我对这种方法有很多问题。

1) 如何使用纯原始 SQL 语句存储 BLOB(类似于

insert into table (col1, col2) values (val1, [...... 100KB val 2])

有很多答案如何做到这一点。使用适用于 Android 的 ContentValues 类,但要么我必须创建自己的一组涵盖标准 Android/桌面 Java 类的类,要么将这个数据库层分为两个不同的版本。

2) 如何自动替换所有对sql语句有特殊意义的字符,例如。 “父亲的车” - ' 不允许直接放在 sql 语句中(请不要忘记纯原始 sql 语句)。

结论:

A) 你知道我上面的问题的答案吗? B)以这种方式工作是否值得(仅纯原始 sql 语句)? C)如果不是承认什么方法 - 创建我自己的一组用于操作的类,或者只是创建这个数据库层的两个不同版本?

顺便说一句,我可以理解 Android 有完全不同的 GUI 类,但为什么他们为数据库等东西创建了完全不同的方法......

【问题讨论】:

    标签: java android sqlite


    【解决方案1】:
    1. 在SQLite中,你可以使用blob literals:
        INSERT INTO Tab(blob) VALUES(x'001122abcdef');
    
    1. 所有 SQL API 允许使用参数;在 Android SQLite API 中,即使 rawQuery 也有这个:

      db.rawQuery("INSERT INTO Sold(ID, Name) VALUES(1234, ?)",
                  new String[] { "father's car" });
      

    【讨论】:

    • 如何转换 ex。图像文件到 blob 文字?
    • 非常感谢。但是我仍然想知道只有原始 sql 语句的方法是否是一个好主意。也许它会对效率产生如此重大的影响并且会使很多事情复杂化(例如,如果我使用Android executeInsert 我可以获得新添加记录的id,而使用纯原始sql语句时,我不会得到它。结果我有向数据库询问它,例如基于唯一名称)。
    猜你喜欢
    • 2012-03-23
    • 2020-03-18
    • 2017-05-05
    • 2018-05-15
    • 1970-01-01
    • 2012-06-19
    • 2015-07-07
    • 2015-09-06
    • 1970-01-01
    相关资源
    最近更新 更多