我被困了几天,我搜索了所有可能的答案,但没有......
我正在尝试将java api中的希腊字符值存储到SQLServer 2014中 但是我得到了这个???????
我使用N前缀和NsetString方法,但我仍然得到这个????这里的任何想法都是我的代码。
我的应用程序使用按钮将数据从文本插入到sqlserver ...我的所有数据都存储在ecxept的5列Περιγραφη_Υλικου
中,其中包含希腊字符
public void g(){
Statement st;
ResultSet rs;
Connection con = getConnection();
try {
st = con.createStatement();
String query = "INSERT INTO ektupotiko(Αριθμος_ΔΔΥ,Ημερομηνια,Αριθμος_Ονομαστικου,Ποσοτητα,Περιγραφη_Υλικου,Μοναδα_παραλαβες,Τυλ,Δχση,Μοναδα_μετρησης) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
//rs = st.executeQuery(query);
PreparedStatement preparedStatement = con.prepareStatement(query);
ArrayList<data> listdata = getListdataFromTextFile("C:\\textdata.txt");
for(int i = 0; i < listdata.size(); i ++) {
preparedStatement.setString(1, listdata.get(i).getαριθμος_ΔΔΥ());
System.out.println("test");
preparedStatement.setString(2, listdata.get(i).getημερομηνια());
System.out.println("test");
preparedStatement.setString(3, listdata.get(i).getαριθμος_Ονομαστικου());
System.out.println("test");
preparedStatement.setString(4, listdata.get(i).getποσοτητα());
System.out.println("test");
preparedStatement.setNString(5, listdata.get(i).getπεριγραφη_Υλικου());
System.out.println("OK");
preparedStatement.setString(6, listdata.get(i).getμοναδα_παραλαβες());
System.out.println("test");
preparedStatement.setString(7, listdata.get(i).getτυλ());
System.out.println("test");
preparedStatement.setString(8, listdata.get(i).getδχση());
System.out.println("test");
preparedStatement.setString(9, listdata.get(i).getμοναδα_μετρησης());
System.out.println("test");
preparedStatement.executeUpdate();
System.out.println("Insert success record:" + (i + 1));
System.out.println(listdata.size());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static ArrayList<data> getListdataFromTextFile(String filePath) {
FileInputStream fis = null;
InputStreamReader isr = null;
BufferedReader bReader = null;
ArrayList<data> listResult = new ArrayList<data>();
try {
fis = new FileInputStream(filePath);
isr = new InputStreamReader(fis);
bReader = new BufferedReader(isr);
//String save line get from text file
String line = null;
//Array save product
String[]strdata = null;
//Loop and get all data in text file
while(true) {
//Get 1 line
line = bReader.readLine();
//Check line get empty, exit loop
if(line == null) {
break;
} else {
strdata = line.split(",");
listResult.add(new data((strdata[0]),(strdata[1]),(strdata[2]),(strdata[3]),(strdata[4]),(strdata[5]),(strdata[6]),(strdata[7]),strdata[8]));
}
}
} catch (Exception e) {
System.out.println("Read file error");
e.printStackTrace();
} finally {
//close file
try {
bReader.close();
isr.close();
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return listResult;
}
答案 0 :(得分:0)
如果您在txt文件中使用UTF-8编码,请替换代码行(使用getListdataFromTextFile(String filePath)
方法):
isr = new InputStreamReader(fis);
到
isr = new InputStreamReader(fis, "UTF-8");
或(如果您使用的是1.7 JDK或更新版本):
isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
还要确保表中的列设置为正确的数据类型,该数据类型支持UTF-8字符(NCHAR,NVARCHAR,NTEXT类型)。