Search code examples
javasql-serversql-server-2014

'N' prefix for insert data to sqlserver


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;
    }

Solution

  • 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).