2017-06-29 39 views
0

我試圖通過SAP連接在SAP Java實例(SAP Netweaver 7.3.1)上保存俄語文本。我使用的下一個Java代碼來獲得JDBC連接並保存數據:通過JDBC的俄羅斯符號(SAP Netweaver 7.3.1,Oracle 12c)

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以解決問題。我在數據源URL中添加了使用Unicode和characterEncoding參數:

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

但它沒有解決問題。如果我使用參數,則根本無法建立與DataBase的連接。同時連接工作正常,但沒有參數(但俄羅斯符號未正確保存)

DataBase看起來是爲保存俄文文本而設置的,因爲我可以使用其他工具保存文本(例如查詢來自Netweaver Developer Studio)。

Oracle的版本是 Oracle數據庫12c的企業版發行12.1.0.2.0 - 64位生產0

的文章將從HTML頁面是UTF-8編碼讀取。這些值使用JavaScript讀取並傳遞到Java servlet中,該servlet將文本存儲在Oracle DataBase中。

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);  
} 
+0

https://stackoverflow.com/a/31113436/5471574回答您的問題? –

+0

我曾嘗試過,但不幸的是它沒有解決我的問題。 – Skalozub

+0

是Java源文件UTF-8的編碼嗎? –

回答

1

正如評論中所討論的那樣,問題在於數據管道上的字符編碼損壞。

下一次嘗試使用duckie;)