2012-04-14 5 views
0

Существует строка []; Этот массив хранит имя столбца таблицы базы данных динамически во время выполнения. И программа понимает размер вероятности во время выполнения. Теперь сделать это в SQL запросе .и использовать цикл для concatanation строкиСтрока Java интерпретируется неправильно в SQL

for(int k=0;k<likely.length;k++) 
    { 
     temp1="\"+likely["+k+"]+\"='Likely' AND "; 
     temp=temp.concat(temp1);     
    } 

если размер 3 конечная температура будет выглядеть

temp = " "+likely[0]+"='Likely' AND "+ 
    likely[1]+"='Likely' AND "+ 
    likely[2]+"='Likely' AND " 

Теперь я сформулировать запрос SQL, как

sql ="SELECT * FROM PUNE WHERE"+temp+"Arts_And_Museum='Yes'"; 

Но во время

ps = con.prepareStatement(sql); 

это утверждение скомпилирован как

SELECT * FROM PUNE 
WHERE [+likely[0]+]='Likely' 
AND [+likely[1]+]='Likely' 
AND [+likely[2]+]='Likely' AND Arts_And_Museum='Yes' 

После глубокого исследования, я пришел к выводу, что он интерпретирует \», как [или] попеременно ..

В результате я получаю сообщение об ошибке Как должен я решите эту проблему?

Я запустить цикл и подготовить строку Я пытаюсь написать синтаксис SQL

ответ

0

\ является зарезервированным характер. Если вы хотите вывести цитату в свою строку, вы используете \".

Таким образом, этот код:

temp1="\"+likely["+k+"]+\"='Likely' AND "; 

Вернется эту строку:

"+likely]+"='Likely' AND

Это кажется, что ваш SQL трансформирует " в [ или ]

0

Символ \ используется для экранирования. При этом вы избегаете всех передних символов.

Всякий раз, когда вы просите элемент в массиве вы можете получить доступ к нему с помощью likely[k] нет необходимости для likey["k"]

Вот как вы должны это сделать.

temp1="\\"+likely[k]+"\\='Likely' AND "; 
1

Именно поэтому вы должны использовать параметризованные входы при работе с SQL-запросами.

// conn refers to your database connection 
PreparedStatement stmnt = null; 
ResultSet rs = null; 
try { 
    stmnt = conn.prepareStatement("SELECT * FROM tbl WHERE col > '?'"); 
    stmnt.setInt(1, 300); //set first parameter to 300 
    rs = stmnt.executeQuery(); 
} catch(Exception ex) { 
    System.err.println("Database exception: " + ex.getMessage()); 
} 
+0

При параметризировать любое значение вставки не будет разобрано как SQL – Ozzy

0

Просто измените эту строку:

temp1="\"+likely["+k+"]+\"='Likely' AND "; 

Для этого:

temp1="\"" + likely[k] + "\"='Likely' AND "; 
+1

Спасибо большое Mosty Mostacho !! ! Вы спасатель жизни –

+0

@ ShwetaB.Patil Добро пожаловать ^.^Во всяком случае, нет необходимости благодарить, вот что принимает ответы: –

Смежные вопросы