Добавление пробела между строками для Java и подготовка файла sql

#java #sql

Вопрос:

Я читаю из файла sql. Файл sql выглядит следующим образом

 SELECT * FROM ${schema}.${table_name}
WHERE FIRST_NAME = 'Shikhar';
 

Поэтому мой код делает это, который в основном считывает файл sql, и я передаю 1 в качестве параметра в функцию. После чего я создаю строковый буфер, а затем читаю файл sql и затем добавляю его в строковый буфер. После этого я затем считываю строковый буфер, а затем разделяю его ; потому что операторы sql могут разбиваться на отдельные строки.

 public static void SqlFileStep(Connection conn, String scriptname, Integer i) throws SQLException, InterruptedException{
    String sql_filepath = "./src/tempsqlStatements/"   scriptname   ".sql";
    java.io.File needed = new java.io.File(sql_filepath);
    while( !needed.exists() ){
        Thread.sleep(2000); 
    }
    //String sql_filepath = "./src/tempsqlStatements/insert.sql";
    //if 1 = select, if 0 = insert
    try {
        ScriptRunner sr = new ScriptRunner(conn);
        BufferedReader br = new BufferedReader(new FileReader(sql_filepath));
        StringBuffer sb = new StringBuffer();
        if(i==0){
            sr.runScript(br);
            br.close();
        }else {
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            br.close();
            String[] inst = sb.toString().split(";");
            for(int j = 0; j<inst.length; j  ){
                System.out.println(inst[j]);
                Statement stat = conn.createStatement();
                ResultSet res = stat.executeQuery(inst[j]);
                int rowIdx = 0;
                while(res.next())
                {
                    System.out.println("row "   rowIdx   ", column 0: "  
                    res.getString(2));
                }

            }


        }


    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        conn.close();
    }
 

но инструкция sql показывает, как когда я system.out.printlin

 SELECT * FROM PUBLIC.CRICKETERS_DATAWHERE FIRST_NAME = 'Shikhar'
 

Есть ли какой-нибудь способ решить эту проблему? Я вижу CRICKETERS_DATA и ГДЕ они соединены вместе, когда должно быть место?

Комментарии:

1. Где код, который считывает файл? Что такое inst ? Трудно понять контекст того, что здесь происходит. Пожалуйста, прочтите codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question и отредактируйте свой вопрос соответствующим образом.

2. привет, Джон, я редактировал свой вопрос, так как мой код не был скопирован должным образом. Я сделал это и добавил в комментарии.

3. Правильно — ваша while петля просто соединяет все линии вместе. На первой итерации цикла будет строка «ВЫБЕРИТЕ * ИЗ PUBLIC.CRICKETERS_DATA», а на второй — «ГДЕ FIRST_NAME = «Шихар»». Где в вашем коде вы ожидали добавления пробела? Было бы довольно просто использовать sb.append(line " ") , чтобы просто оставлять пробел после каждой строки. В конце у вас будет пробел, но это, вероятно, не имеет значения.