从Oracle数据库使用Java-JDBC读取数据时的字符编码

时间:2010-07-31 15:29:50

标签: java encoding jdbc utf-8 oracle10g

我们在oracle 10g db中存储了包含法语字符集的数据。要求是使用Java读取数据并生成输出文件。

我通过SQL * plus检查了Oracle数据库中数据的有效性,看起来很不错。

来自windows:

set NLS_LANG=AMERICAN.AL32UTF8
sqlplus scott/tiger
sql>  select billing_address from MYTABLE t where ADDRESS_ID=1 ;
billing_address
-----------------------
MONTRÉAL QUÉ

现在,当我从Java读取表格以生成输出文件时,该字符全部出现乱码,我看到问号代替É。

当我尝试用Java读取/写入数据时,是否需要设置任何特殊编码。

使用ojdbc14.jar并将编码设置为UTF-8。


更新:这是我的java代码段。

        Charset cs1 = Charset.forName("UTF-8");
        PreparedStatement pStmt = conn.prepareStatement("select * from talbe where address_id=1");
        ResultSet rs = pStmt.executeQuery();
        Writer w = null;
        FileOutputStream fos = null;
        if(rs.next()) {

            String billingaddress = rs.getString("BILLING_ADDRESS");

            fos = new FileOutputStream(new File("myout.dat"));
            w = new BufferedWriter(new OutputStreamWriter(fos,cs1));
            w.write(billingaddress);
        }

2 个答案:

答案 0 :(得分:4)

要检查的几件事......

  1. 您的jdbc网址应该在某处 ?useUnicode=true&characterEncoding=utf8
  2. 您的JVM应该安装了您需要的所有不同的字符集
  3. 可能在代码中发生了写入文件/从文件读取的内容
    • 如果您的问题仍然存在,您可以发布一些Java代码吗?

答案 1 :(得分:1)

实际上问题在于将数据加载到oracle数据库时设置的初始字符集。我们在sql * loader控制文件中更改了charset,现在工作正常。