2015-11-04 5 views
1

Я не могу выполнить запрос здесь. Это говорит о вышеупомянутой ошибке. Я попытался с запросом «Выбрать * из клиента», и он работает. Я не могу понять, где я Неправильно. Пожалуйста, помогите и спасибо заранее.Исключение ошибки синтаксиса MySQL

Полный запрос: SELECT CUSTOMER_ID, FIRST_NAME, LAST_NAME, COUNTRY, AGE, GENDER, EMAIL_ADDRESS ОТ КЛИЕНТА, WHERE FIRST_NAME = 'SHIVAM';

Сообщение об ошибке com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErr orException IS-: Неизвестный coloumn 'Шивам' в 'где п'

DefaultTableModel model; 
model=(DefaultTableModel)tblSearchCustomer.getModel(); 
try{ 
Class.forName("java.sql.Driver"); 
Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/divign","root","password"); 
Statement stmt=con.createStatement(); 

String sfld=(String) searchfldCB.getSelectedItem(); 
//this stands for Search Field(ComboBox) 
String op=(String) opCB.getSelectedItem(); 
//this stands for operator(ComboBox) 
String crit=criteriaTF.getText(); 
//this stands for criteria 
String query="SELECT CUSTOMER_ID,FIRST_NAME,LAST_NAME,COUNTRY,AGE,GENDER,EMAIL_ADDRESS FROM CUSTOMER WHERE" + sfld+""+op+""+crit+" ;"; 
//This Query is not Executing 
ResultSet rs=stmt.executeQuery(query); 
while(rs.next()) { 
    model.addRow (new Object[ ] { 

     rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getInt(5), 
     rs.getString(6),rs.getInt(7) 
    }); 

} 
rs.close(); 
stmt.close(); 
con.close(); 
} 
catch(Exception e){ 
JOptionPane.showMessageDialog(null,e.toString()); 
} 
+0

Можете ли вы предоставить полный запрос и ошибок? –

+1

Пожалуйста, опубликуйте сгенерированный запрос и сообщение об ошибке. Как угадать, вы почти наверняка не хватает некоторых пробелов в 'WHERE "+ sfld + "" + оп + "" + крит +";' –

+0

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErr orException: Неизвестный coloumn «Шивам 'in' where where ' – Yashw

ответ

1

Так вот это скорректированное query-

Строка запроса = "SELECT CUSTOMER_ID, FIRST_NAME, LAST_NAME, ПАРОЛЬ, адрес, страна, возраст, пол, EMAIL_ADDRESS, PHONE_NUMBER ОТ клиентов, где" + sfld +»," + оп + '"+ крит +' ; ";

Обратите внимание на Кавычки вокруг крит .... Теперь, если я типа Шивам в JTextField (criteriaTF) имя будет выполняться в MySQL с кавычками т.е. «Шивам»

0

Строка запроса = "SELECT CUSTOMER_ID, FIRST_NAME, LAST_NAME, СТРАНА, ВОЗРАСТ, ГЕНДЕР, EMAIL_ADDRESS ОТ КЛИЕНТА ГДЕ «+ sfld +» «+ op +» «+ crit +»; »;

В том случае, когда вы не указали имя столбца для присвоения значения sfld + "" + op + "" + crit.

Вы должны указать имя столбца рядом с предложением where.

2

При создании вашего запроса, нет одинарных кавычек в вашем где заявлении, которое означает, что вы получите WHERE FIRST_NAME=SHIVAM, поэтому он пытается сравнить first_name в колонку под названием Шивы, который не существует

+0

Это лучший ответ до сих пор, только потому, что он не предлагает «решение», которое продолжает использовать динамический SQL. Было бы намного лучше ответить, если бы упоминалось, что использование * параметризованного запроса * во избежание проблемы в первую очередь и что все другие «решения» по-прежнему уязвимы для SQL-инъекции. –

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