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

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

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

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

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


先谢谢了!!!
...全文
885 17 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
希望有类似经历的朋友能帮助我一下,

提供思路也好啊,谢谢了!!
大家好,个人觉得用Sqlite数据库时,经常需要进行机械性的CRUD操作,故对其进行了一下封装,希望能起到抛砖引玉的作用。 目的:封装共有的CRUD 下面简单的说一下使用步骤,如果觉得多余,可以无视。 1. 实现自己的DBHelper: /** * * @author Kee.Li * * 1. 继承了SmartDBHelper,不需要重写SQLiteOpenHelper的那两个方法 * 2. 父类构造方法参数modelClasses是实体类的数组,也就是需要生产表的类的Class数组 * */ public class DBHelper extends SmartDBHelper { //数据库名称 private final static String DATABASE_NAME = "books.db"; //数据库版本 private final static int DATABASE_VERSION = 2; //需要生成数据库表的类的数组 private final static Class<?>[] modelClasses = {Book.class,User.class}; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION,modelClasses); } } 2.创建app需要的实体,也就是对应的数据库表(这里的实体添加到DBHelper的modelClasses数组中) /** * 数据库的实体 * @author Kee.Li * 关于注解: * Table: 此类对应的数据库表名 * Id:标识此属性为数据库自增长的id,应为int型 * Column:标识此属性对应的数据库字段名 */ @Table(name="t_books") public class Book{ @Id @Column(name="book_id") private int bookId; @Column(name="book_name") private String bookName; @Column(name="book_author") private String bookAuthor; //set get 方法省略.... } 3. 实现DAO,也就是对实体的CRUD类 /** * @author Kee.Li * * 此类只需要继承TemplateDAO,在构造方法里面给父类的属性dbHelper赋值,即可实现CRUD操作 * 若有复杂的操作,可以自定义方法 */ public class BookDAO extends TemplateDAO { /** * 创建DAO时初始化连接数据库对象helper * @param context */ public BookDAO(Context context) { super(new DBHelper(context)); } } 4. activity的调用 bookDAO = new BookDAO(this); List books = bookDAO.find(); 好了,到此结束,如果有什么好的建议或者意见,希望可以共同学习!谢谢大家!

80,330

社区成员

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

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