Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
SQLite/Android-使用重音从SQL文件插入值_Android_Database_Sqlite - Fatal编程技术网

SQLite/Android-使用重音从SQL文件插入值

SQLite/Android-使用重音从SQL文件插入值,android,database,sqlite,Android,Database,Sqlite,我正在尝试用SQLite数据库设置我的应用程序,并用一些值填充同一个数据库。要填充表格,我有两种方法: 使用我的对象DAO中的.insert()方法(值在Java代码中定义) 读取放置在Assets文件夹中的.sql文件,并使用以下命令执行每一行: execSQL(新字符串(缓冲区,“UTF-8”) 使用第一个选项,我可以插入像“sé”、“são”、“ç”这样的值,当我从DB中检索到相同的值时,我完全按照我编写它们的方式得到它们 使用第二个选项(从文件读取),该值将插入符号“?”,例如:“s?”

我正在尝试用SQLite数据库设置我的应用程序,并用一些值填充同一个数据库。要填充表格,我有两种方法:

  • 使用我的对象DAO中的.insert()方法(值在Java代码中定义)
  • 读取放置在Assets文件夹中的.sql文件,并使用以下命令执行每一行:

    execSQL(新字符串(缓冲区,“UTF-8”)

  • 使用第一个选项,我可以插入像“sé”、“são”、“ç”这样的值,当我从DB中检索到相同的值时,我完全按照我编写它们的方式得到它们

    使用第二个选项(从文件读取),该值将插入符号“?”,例如:“s?”、“s?o”和“?”

    这是我的.sql文件:

    PRAGMA encoding = "UTF-8";
    INSERT INTO [DEPARTMENT] ([depID], [DEP_NAME]) VALUES (111, 'Informática');
    INSERT INTO [DEPARTMENT] ([depID], [DEP_NAME]) VALUES (222, 'Cívil');
    
    这是我读取文件的方法:

    private void insertValues(boolean fromFile) throws IOException {
            if (!fromFile) {
                 // option one working...
            } else {
    
            InputStream script = this.getAssets().open("sql_script.sql");
    
            byte[] buffer = new byte[1024];
    
            for (int byteRead = script.read(); byteRead != -1; byteRead = script
                    .read()) {
                // resets the buffer
                Arrays.fill(buffer, (byte) 0);
    
                // reads a SQL statement to the buffer
                for (int i = 0; byteRead != -1 && i != 1024; byteRead = script
                        .read(), i++) {
                    buffer[i] = (byte) byteRead;
    
                    if (byteRead == ';')
                        break;
                }
    
                // execute the SQL statement from the buffer
                if (byteRead != -1)
                    db.execSQL(new String(buffer, "UTF-8"));
            }
        }
    }
    

    我试图使用
    新字符串(buffer,“UTF-8”)
    ,但也不起作用

    .sql文件中使用的编码是什么?我的sql文件以:PRAGMA encoding=“UTF-8”开头;不指定文件保存的编码;它只是告诉sqlite。您不需要自己指定它。让Android SQLLite API为您处理编码设置。好的,所以我将我的文件编码为UTF-8,但我得到的结果与之前相同:“?”而不是重音字母。@laalto您是对的,我检查了,甚至我在一些编辑器(记事本++)中将编码文件修改为UTF-8,它作为默认编码导入eclipse(Cp1252)。我转到.sql文件内的资产->属性->文本文件编码->其他->UTF-8。解决了我的问题!谢谢