#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 " ")
, чтобы просто оставлять пробел после каждой строки. В конце у вас будет пробел, но это, вероятно, не имеет значения.