java android使用原始查询插入blob和带有特殊字符的字符串 - sqlite3

时间:2013-09-13 16:53:25

标签: java android sqlite

我正在编写应用程序,我希望有两个版本 - 一个用于桌面(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类,但为什么他们为像数据库这样的东西创建了完全不同的方法....

1 个答案:

答案 0 :(得分:0)

  1. 在SQLite中,您可以使用blob literals
  2.     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" });