"35.172.217.40 - 35.172.217.40"

Имея ошибку mySQL, неизвестный столбец where clause

В настоящее время у меня проблема с выбором определенного элемента из базы данных mySQL. Моя программа предназначена для передачи параметра из приложения android в сервлет, который затем запрашивает базу данных.

Однако в окне консоли появляется ошибка: Неизвестный столбец "0102310c24" в разделе "where"

Есть только ошибка, когда значение, которое я хочу выбрать, содержит букву.

Когда я запрашиваю этот номер 0106172459, данные, которые я хочу, возвращаются без проблем.

Ниже мой сервлет.

import java.io.*;
import java.util.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBServlet extends HttpServlet {
public void service(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String x=request.getParameter("item");
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con =DriverManager.getConnection ("jdbc:mysql://IP/databasename", "username", "password");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM items WHERE item="+x);
// displaying records
while(rs.next()){
out.print(rs.getObject(1).toString());
out.print(",");
out.print(rs.getObject(2).toString());
out.print(",");
out.print(rs.getObject(3).toString());
out.print(",");
out.print(rs.getObject(4).toString());
out.print(",");
out.print(rs.getObject(5).toString());
out.print(",");
out.print(rs.getObject(6).toString());
out.print(",");
out.print(rs.getObject(7).toString());
out.print(",");
out.print(rs.getObject(8).toString());
out.print(",");
out.print("\n");
}
} catch (SQLException e) {
throw new ServletException("Servlet Could not display records.", e);
} catch (ClassNotFoundException e) {
throw new ServletException("JDBC Driver not found.", e);
} finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(stmt != null) {
stmt.close();
stmt = null;
}
if(con != null) {
con.close();
con = null;
}
} catch (SQLException e) {}
}
out.close();
}
}

и я использую это для отправки значения сервлету.

List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("item","List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("item","010238a2cc"));"));

Я буду благодарен, если кто-нибудь сможет помочь

+4
источник поделиться
4 ответа

Значение x должно быть заключено в кавычки или предполагается, что нечисловое значение относится к столбцу, а не к строковому литералу.

rs = stmt.executeQuery("SELECT * FROM items WHERE item='"+x + "'");

Обратите внимание, что ваш script оказывается уязвимым для SQL-инъекции, поскольку значение x не было экранировано, но получено из Request. Было бы лучше использовать подготовленное выражение здесь.

+11
источник

Попробуйте использовать PreparedStatement.

PreparedStatement st = con.prepareStatement("SELECT * FROM items WHERE item=?");
st.setString(1,x);
rs = st.executeQuery();
+2
источник

Если элемент имеет тип String, вам необходимо заключить его в кавычки. Еще лучше, вы должны использовать PreparedStatement для выполнения запроса.

0
источник

Если значение x является целым числом, используйте следующий код: rs = stmt.executeQuery( "SELECT * FROM items WHERE item =" + x); Если значение x является строкой, используйте следующий код: rs = stmt.executeQuery( "SELECT * FROM items WHERE item = '" + x "'" );

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос