Tener un error mySQL, columna desconocida where clause

Actualmente tengo un problema al seleccionar un determinado elemento de una base de datos mySQL. Mi programa está diseñado para pasar un parámetro de una aplicación de Android a un servlet que luego consulta la base de datos.

Sin embargo, aparece un error en la ventana de la consola: Columna desconocida '0102310c24' en 'where clause'

Sólo hay un error cuando el valor que quiero seleccionar contiene una letra.

Cuando consulta este número 0106172459, los datos que quiero se devuelven sin ningún problema.

Abajo está mi servlet.

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(); } } 

Y lo utilizo para enviar el valor al servlet.

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

Estaré agradecido si alguien pudiera ayudar

El valor x debe estar encerrado entre comillas, o un valor no numérico se supone que se refiere a una columna en lugar de una cadena literal.

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

Tenga en cuenta que su secuencia de comandos parece ser vulnerable a la inyección de SQL, ya que el valor x no se ha escapado pero se recibió de la Request . Sería mejor usar una declaración preparada aquí.

Intente utilizar PreparedStatement .

 PreparedStatement st = con.prepareStatement("SELECT * FROM items WHERE item=?"); st.setString(1,x); rs = st.executeQuery(); 

Si el elemento es de tipo Cadena, es necesario incluirlo entre comillas. Mejor aún, debe utilizar un PreparedStatement , para ejecutar la consulta.

Si el valor x es entero, utilice el código siguiente: – rs = stmt.executeQuery ("SELECT * FROM items WHERE item =" + x); Si el valor x es cadena, utilice el código siguiente: – rs = stmt.executeQuery ("SELECT * FROM items WHERE item = '" + x "'");

  • Enviando mensaje a la aplicación del servidor con GCM
  • Transferencia de datos enormes del servlet a la aplicación Android
  • ¿Cómo obtener InputStream de un https, Push Servlet fragmentado?
  • Llamar a servlet Java desde Android
  • Subir varios archivos de Android a AppEngine en 1 solicitud
  • Enviar arraylist de servlet a la aplicación de Android
  • Cómo comprimir un JSONObject enviarlo sobre Http en Android?
  • ¿Cómo puedo pasar varios parámetros en la URL?
  • Mantenimiento de la sesión HTTP al acceder a un servlet desde Android
  • Cómo pasar los datos del servlet a la aplicación android
  • Android: conexión HTTPS (SSL) mediante HttpsURLConnection
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.