I am stuck for days that I search all the potential answers but nothing ....
I am trying to store greek chars values from a java api to SQLServer 2014 but I am getting this ???????
I use the N prefix and the NsetString method but I am still getting this ???? any idea here is my code.
My app works with a button insert data from text to sqlserver...all my data stored well ecxept one the 5 column Περιγραφη_Υλικου
that have the greek characters
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;
}
If you are using UTF-8 encoding in your txt file, replace the lines of your code (in getListdataFromTextFile(String filePath)
method):
isr = new InputStreamReader(fis);
to
isr = new InputStreamReader(fis, "UTF-8");
or (if you are using 1.7 JDK or newer):
isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
Also make sure your column in the table is set to proper datatype, that supports UTF-8 chars (NCHAR, NVARCHAR, NTEXT types).