Android的SQLite不支持“中文表名”吗?

huangbeyond 2011-11-30 08:53:35
近日在Android下开发一个软件,需要打开1个SQLite数据库文件(该文件由PC软件生成并填充数据)。

执行查询时发现,如果该SQLite数据库文件的表是英文表名,则一切正常。

但遇上“中文表名”的查询时,程序就直接异常退出。

有朋友遇上过类似事情吗?如何解决?


先谢谢了!!!
...全文
1036 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
BINCK177 2012-05-27
  • 打赏
  • 举报
回复
请问楼主是怎么解决的 我也遇到一样的问题 在安卓中读取数据库,由于数据库原先是access的数据库,经过一个工具转成sqlite数据库,数据库中有部分表的名称和列的名称是中文的,在读取的时候访问不到。
前段时间曾经出现这样的问题,数据库的表名及列名是英文的,但表中存储的内容是中文的,一开始用cur.getString()方法读出来的是乱码,后来我用string = new String(cur.getBlob(Column),"GB18030")的方法解决了,成功读出中文。但是这次不一样了,表名和列名都是中文的,数据库查询语句中必须用
cur = mSQLiteDatabase.rawQuery("SELECT * FROM 表名 where BDNM = ? ", new String[]{BDNM})的方法,请问楼主如何解决数据库中表名及列名是中文的问题?
huangbeyond 2011-12-05
  • 打赏
  • 举报
回复
问题解决了,用别的办法。呵呵,还是谢谢大家的帮助!!
J明 2011-12-03
  • 打赏
  • 举报
回复
这样写,试试看
String strSQLText = String.format("SELECT ID FROM '%s' LIMIT 1", TableName);
或者这样
String strSQLText = String.format("SELECT ID FROM 、\"%s\" LIMIT 1", TableName);
CyberLogix 2011-12-02
  • 打赏
  • 举报
回复
是支持中文的,
huangbeyond 2011-12-02
  • 打赏
  • 举报
回复
给数据表名|表字段取名时,用中文还是用英文好,这个讨论可能就超出一定的范畴了,呵呵。



我纠结的只是:
-----------------------------------------------------------------
String strSQLText = String.format("SELECT ID FROM %s LIMIT 1", TableName);
SqliteConnection.createStatement().executeQuery(strSQLText);

当TableName为全英文时,查询正常;
当TableName包含中文符号时,查询就抛出java.lang.StringIndexOutOfBoundsException异常,且该异常无法被try捕获。


-----------------------------------------------------------------

希望有遇过类似问题的同行能指点一二,不胜感谢。
huangbeyond 2011-12-01
  • 打赏
  • 举报
回复
不知道你们都是使用什么版本的Android与SQLite引擎.......


我用的是模拟器2.2/2.3,真机P1000,都存在这个问题。
huangbeyond 2011-12-01
  • 打赏
  • 举报
回复
异常信息是:

11-30 16:18:11.368: ERROR/AndroidRuntime(668):
java.lang.StringIndexOutOfBoundsException


严重怀疑:

异常并没发生在SQLite的C++运行代码里,而发生在rawQuery方法里。
ahaso 2011-12-01
  • 打赏
  • 举报
回复
这个是数组越界问题啊,你是不是查出来的东西不判断是否为空就直接去取了啊。

打些log看看哪里出问题了啊
六百万 2011-12-01
  • 打赏
  • 举报
回复
默认的都是用英文,如果要用中文肯定是需要修改对应的编码信息
jdpxiaoming 2011-12-01
  • 打赏
  • 举报
回复
明显 你的 代码有问题 数组越界的错误 。肯定是 结果 为空 你自己 debug下
wensefu 2011-12-01
  • 打赏
  • 举报
回复
纠结这种问题简直是在浪费时间,谁没事用中文作数据库名。
huangbeyond 2011-12-01
  • 打赏
  • 举报
回复
对于字串编码问题,已经测试了很多种组合,基本可以排除。


出问题的代码如下:

String strSQLText = String.format("SELECT ID FROM %s LIMIT 1", TableName);
SqliteConnection.createStatement().executeQuery(strSQLText);

当TableName为全英文时,查询正常;
当TableName包含中文符号时,查询就抛出java.lang.StringIndexOutOfBoundsException异常,且该异常无法被try捕获。


实在想不通是什么原因了......
安卓机器人 2011-12-01
  • 打赏
  • 举报
回复
这个问题还是自己多试试
J明 2011-11-30
  • 打赏
  • 举报
回复
可以支持中文。
不过一般都用英文比较好。
wxd_study111 2011-11-30
  • 打赏
  • 举报
回复
也有可能是手机或模拟器的语言设置问题,不过,最好用英文的字段名,这样就不用担心这类的问题。
huangbeyond 2011-11-30
  • 打赏
  • 举报
回复
希望有类似经历的朋友能帮助我一下,

提供思路也好啊,谢谢了!!

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧