近日在Android下开发一个软件,需要打开1个SQLite数据库文件(该文件由PC软件生成并填充数据)。执行查询时发现,如果该SQLite数据库文件的表是英文表名,则一切正常。但遇上“中文表名”的查询时,程序就直接异常退出。有朋友遇上过类似事情吗?如何解决?
先谢谢了!!!

解决方案 »

  1.   

    异常信息是:11-30 16:18:11.368: ERROR/AndroidRuntime(668): 
    java.lang.StringIndexOutOfBoundsException
    严重怀疑:异常并没发生在SQLite的C++运行代码里,而发生在rawQuery方法里。
      

  2.   

    不知道你们都是使用什么版本的Android与SQLite引擎.......
    我用的是模拟器2.2/2.3,真机P1000,都存在这个问题。
      

  3.   

    明显 你的 代码有问题 数组越界的错误 。肯定是 结果 为空 你自己 debug下
      

  4.   

    这个是数组越界问题啊,你是不是查出来的东西不判断是否为空就直接去取了啊。打些log看看哪里出问题了啊
      

  5.   

    对于字串编码问题,已经测试了很多种组合,基本可以排除。
    出问题的代码如下:String strSQLText = String.format("SELECT ID FROM %s LIMIT 1", TableName);
    SqliteConnection.createStatement().executeQuery(strSQLText);当TableName为全英文时,查询正常;
    当TableName包含中文符号时,查询就抛出java.lang.StringIndexOutOfBoundsException异常,且该异常无法被try捕获。
    实在想不通是什么原因了......
      

  6.   

    给数据表名|表字段取名时,用中文还是用英文好,这个讨论可能就超出一定的范畴了,呵呵。我纠结的只是:
    -----------------------------------------------------------------
    String strSQLText = String.format("SELECT ID FROM %s LIMIT 1", TableName);
    SqliteConnection.createStatement().executeQuery(strSQLText);当TableName为全英文时,查询正常;
    当TableName包含中文符号时,查询就抛出java.lang.StringIndexOutOfBoundsException异常,且该异常无法被try捕获。
    -----------------------------------------------------------------希望有遇过类似问题的同行能指点一二,不胜感谢。
      

  7.   

    这样写,试试看
    String strSQLText = String.format("SELECT ID FROM '%s' LIMIT 1", TableName);
    或者这样
    String strSQLText = String.format("SELECT ID FROM 、\"%s\" LIMIT 1", TableName);
      

  8.   

    请问楼主是怎么解决的 我也遇到一样的问题 在安卓中读取数据库,由于数据库原先是access的数据库,经过一个工具转成sqlite数据库,数据库中有部分表的名称和列的名称是中文的,在读取的时候访问不到。
    前段时间曾经出现这样的问题,数据库的表名及列名是英文的,但表中存储的内容是中文的,一开始用cur.getString()方法读出来的是乱码,后来我用string =  new String(cur.getBlob(Column),"GB18030")的方法解决了,成功读出中文。但是这次不一样了,表名和列名都是中文的,数据库查询语句中必须用
    cur = mSQLiteDatabase.rawQuery("SELECT * FROM 表名 where BDNM = ? ", new String[]{BDNM})的方法,请问楼主如何解决数据库中表名及列名是中文的问题?