Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中将重音插入sqlite表?_Android_Sql_Sqlite_Diacritics - Fatal编程技术网

如何在android中将重音插入sqlite表?

如何在android中将重音插入sqlite表?,android,sql,sqlite,diacritics,Android,Sql,Sqlite,Diacritics,我正在用Android创建一个数据库,一切都很顺利,但是当我测试检索正确数据的查询时,我遇到了一个错误 E/AndroidRuntime(14126): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 我知道这意味着没有与查询匹配的数据,但事实是我按查询插入了数据,它实际上有一个匹配项。同样的查询适用于所有没有重音的代码 这些是用于插入行的查询 INSERT INTO "codigo" VALUES('A','PE

我正在用Android创建一个数据库,一切都很顺利,但是当我测试检索正确数据的查询时,我遇到了一个错误

E/AndroidRuntime(14126): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
我知道这意味着没有与查询匹配的数据,但事实是我按查询插入了数据,它实际上有一个匹配项。同样的查询适用于所有没有重音的代码

这些是用于插入行的查询

INSERT INTO "codigo" VALUES('A','PEATÓN');
INSERT INTO "codigo" VALUES('B','PEATÓN');
INSERT INTO "codigo" VALUES('C','PEATÓN');
所以我做了一个查询,获取我要替换的字段的值,如下所示:

String selectCode = "select distinct c.tipo from codigo c";
Cursor cursor = database.rawQuery(selectCodigo, new String[] {});
      cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
          String codigo= cursor.getString(0);
          codigos.add(codigo);        
          System.out.println(codigo);
          cursor.moveToNext();
        } 
        cursor.close();
      return codigos;
结果是:

10-14 16:40:32.140: I/System.out(13716): PEAT�N
我将文本文件放在/raw文件夹中,并从Eclipse中进行了编辑,因此我确保它不是我所做的表导出,但我得到了相同的结果

这是读取文件的代码:

 public int insertFromFile(SQLiteDatabase db,Context context, int resourceId) throws IOException {
            // Reseting Counter
            int result = 0;
            // Open the resource
            InputStream insertsStream = context.getResources().openRawResource(resourceId);
            BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream));

            // Iterate through lines (assuming each insert has its own line and theres no other stuff)
            while (insertReader.ready()) {
                String insertStmt = insertReader.readLine();
                db.execSQL(insertStmt);
                result++;
            }
            insertReader.close();

            // returning number of inserted rows
            return result;
        } 
我怎么能让那种口音起作用呢? 我用了很多,所以,替换这个词不是一个出路。 请帮忙,这是我完成这个项目唯一需要的

更新: 后来又有两次同样的问题。第一个问题是,我使用cp1525中编码的.sql文件修复了它,并在Eclipse中使用默认编辑器打开它,然后查找/替换错误的字符

上一次我遇到这个错误时,我采取了正确的方法,发现如果使用SQLItemManager,它会导入UTF-8编码的文件,但会导出ANSI格式的文件,因此我用记事本++打开了该文件,将.sql文件的编码从ANSI更改为UTF-8,效果很好,所有字符都显示得很好。

在中的
InputStream
上构造一个新的
InputStreamReader
。此构造函数将字符转换器设置为“file.encoding”属性中指定的编码,如果该属性不存在,则返回ISO 8859_1(ISO-Latin-1)

如果文件是用UTF-8编码的,您必须告诉读者这一点。

说明:

中的
InputStream
上构造一个新的
InputStreamReader
。此构造函数将字符转换器设置为“file.encoding”属性中指定的编码,如果该属性不存在,则返回ISO 8859_1(ISO-Latin-1)


如果文件是用UTF-8编码的,您必须告诉读者这一点。

在您的SQLQueryString中,请在前面添加

PRAGMA encoding = "UTF-8";
范例

"PRAGMA encoding = \"UTF-8\"; INSERT INTO MYTABLE (mytablefield) VALUES ('value'); "

在SQLQueryString中,只需在

PRAGMA encoding = "UTF-8";
范例

"PRAGMA encoding = \"UTF-8\"; INSERT INTO MYTABLE (mytablefield) VALUES ('value'); "

SQLite总是使用UTF-8编码的字符串,如果需要,Android库会自动将Java
String
s从/转换为。您的源代码的编码是什么?编译器认为它是什么编码?日志文件的编码是什么?文件查看器认为它是什么编码?我的源代码的编码是UTF-8。我在应用程序中有其他文本(数据库中没有字符串值),它们显示时没有问题。日志文件也是UTF-8,显示特殊字符。我不明白你的第二个也是最后一个问题:“编译器认为它是什么编码?文件查看器认为它是什么编码?”你能说得更具体一些吗?将
插入codigo值('A',CAST(x'50454154C3934E'作为文本))
会发生什么?它可以工作!非常感谢你。但正如我所说,我有一些类似这样的大字符串:“没有对卡尔扎达斯中间商协会的游行和游行的详细说明,也没有对泥炭地公园的尊重。”还有其他方法可以做到这一点吗?或者我必须得到每个字符串的代码?(它们是281个这样大的字符串,大多数带有重音)。这些
INSERT
语句是您的Java源代码的一部分,还是从另一个文件读取的?SQLite总是使用UTF-8编码的字符串,Android库会根据需要自动将Java
String
s从/转换为。您的源代码的编码是什么?编译器认为它是什么编码?日志文件的编码是什么?文件查看器认为它是什么编码?我的源代码的编码是UTF-8。我在应用程序中有其他文本(数据库中没有字符串值),它们显示时没有问题。日志文件也是UTF-8,显示特殊字符。我不明白你的第二个也是最后一个问题:“编译器认为它是什么编码?文件查看器认为它是什么编码?”你能说得更具体一些吗?将
插入codigo值('A',CAST(x'50454154C3934E'作为文本))
会发生什么?它可以工作!非常感谢你。但正如我所说,我有一些类似这样的大字符串:“没有对卡尔扎达斯中间商协会的游行和游行的详细说明,也没有对泥炭地公园的尊重。”还有其他方法可以做到这一点吗?或者我必须得到每个字符串的代码?(它们是其中的281个,大多数都有重音)。这些
INSERT
语句是Java源代码的一部分,还是从另一个文件读取的?