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

Java 通过JDBC的俄语符号(SAP Netweaver 7.3.1,Oracle 12c),java,oracle,jdbc,utf-8,sap,Java,Oracle,Jdbc,Utf 8,Sap,我正在尝试通过SAP Java实例(SAP Netweaver 7.3.1)上的JDBC connect保存俄语文本。我正在使用下一个Java代码获取JDBC连接并保存数据: InitialContext ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("jdbc/DS_Test"); Connection conn = ds.getConnection(); Pr

我正在尝试通过SAP Java实例(SAP Netweaver 7.3.1)上的JDBC connect保存俄语文本。我正在使用下一个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参数添加到数据源URL以解决此问题。我已将useUnicode和characterEncoding参数添加到数据源URL:

jdbc:oracle:thin:@db_inst:1521:RR0?useUnicode=true&characterEncoding=UTF-8
但这并没有解决问题。如果使用参数,则根本无法建立到数据库的连接。同时,在没有参数的情况下,连接工作正常(但俄文符号未正确保存)

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

oracle版本是 Oracle数据库12c企业版12.1.0.2.0版-64位生产0

文本从UTF-8编码的HTML页面读取。使用javascript读取这些值,并将其传递到JavaServlet,JavaServlet将文本存储在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);      
}

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


下次尝试使用;)

回答您的问题?我已经尝试过了,但不幸的是,它没有解决我的问题。Java源文件的编码是UTF-8吗?我从html页面获取要存储的文本。html页面的字符集设置为UTF-8。您是否将UTF-8作为Java中的字符集来读取html?