通过 JDBC 的俄语符号(SAP Netweaver 7.3.1、Oracle 12c)

Posted

技术标签:

【中文标题】通过 JDBC 的俄语符号(SAP Netweaver 7.3.1、Oracle 12c)【英文标题】:Russian symbols via JDBC (SAP Netweaver 7.3.1, Oracle 12c) 【发布时间】:2017-06-29 09:00:58 【问题描述】:

我正在尝试通过 SAP Java 实例 (SAP Netweaver 7.3.1) 上的 JDBC 连接保存俄语文本。我正在使用下一个 Java 代码来获取 JDBC 连接并保存数据:

    InitialContext ctx = new InitialContext();      
    DataSource ds = (DataSource) ctx.lookup("jdbc/DS_Test");
    Connection conn = ds.getConnection();
    PreparedStatement stmt = conn.prepareStatement("INSERT INTO Z_TEST_TAB VALUES(?, ?, ?)");
    stmt.setString(1, "KEY_LINE");
    stmt.setString(2, "Текст2");
    stmt.setString(3, "Текст3");
    stmt.execute();
    stmt.close();       

查询中的数据已插入,但俄语文本未正确保存。

通常建议将 UTF-8 参数添加到 DataSource URL 以解决此问题。我已将 useUnicode 和 characterEncoding 参数添加到 DataSource URL:

jdbc:oracle:thin:@db_inst:1521:RR0?useUnicode=true&characterEncoding=UTF-8

但它并没有解决问题。如果我使用参数,则根本无法建立与数据库的连接。同时没有参数连接也能正常工作(但是俄罗斯符号没有正确保存)

数据库似乎是为保存俄语文本而设置的,因为我可以使用其他工具(例如来自 Netweaver Developer Studio 的查询)来保存文本。

oracle 版本是 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0

文本是从 UTF-8 编码的 html 页面读取的。这些值使用 javascript 读取并传递到 Java servlet,后者将文本存储在 Oracle 数据库中。

function save() 
  var texts = document.querySelectorAll('.text_fields'); 
  var text1 = texts[0].textContent; 
  var text2 = texts[1].textContent;
  var text3 = texts[2].textContent;
  var body = 'TEXT1='+encodeURIComponent(text1)+'&TEXT2='+encodeURIComponent(text2)+'&TEXT3='+encodeURIComponent(text3);

  var xmlHttp = new XMLHttpRequest();
  xmlHttp.open( "POST", "DBClassSave", true );
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlHttp.onload = function() 
  if (xmlHttp.readyState == 4) 
        if (xmlHttp.status == 200) 
            alert("Data have been saved");
            location.reload();              
         else 
            alert("An exception has been occurred: "+xmlHttp.status+xmlHttp.responseText); 
        
    
       
xmlHttp.send(body);      

【问题讨论】:

***.com/a/31113436/5471574 回答您的问题? 我试过了,但不幸的是它没有解决我的问题。 Java源文件的编码是UTF-8吗? 我正在从 html 页面中获取要存储的文本。 html 页面字符集设置为 UTF-8。 您是否阅读了使用 UTF-8 作为 Java 字符集的 HTML? 【参考方案1】:

正如 cmets 中所讨论的,问题在于数据管道中的字符编码损坏。

下次尝试使用duckie ;)

【讨论】:

以上是关于通过 JDBC 的俄语符号(SAP Netweaver 7.3.1、Oracle 12c)的主要内容,如果未能解决你的问题,请参考以下文章

通过带有参数的 JDBC 从 SAP HANA 数据库中选择

JDBC + SAP云平台 = 运行在云端的数据库应用

JDBC + SAP云平台 = 运行在云端的数据库应用

源窗口中的随机符号,而不是RStudio中的俄语字符

带有俄语语言的 Grails 2.4 中的 UTF-8 问题

使用JDBC操作SAP云平台上的HANA数据库