Foros del Web » Programación para mayores de 30 ;) » Java »

Problemas con el INSERT INTO - Comillas simples y dobles

Estas en el tema de Problemas con el INSERT INTO - Comillas simples y dobles en el foro de Java en Foros del Web. Hola Gente!! Les cuento que son nuevo en el Foro y en la programación, me estoy largando ahora a programar. Mi problema es al querer ...
  #1 (permalink)  
Antiguo 23/07/2012, 22:51
Avatar de mhdadamo  
Fecha de Ingreso: julio-2012
Mensajes: 2
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Problemas con el INSERT INTO - Comillas simples y dobles

Hola Gente!! Les cuento que son nuevo en el Foro y en la programación, me estoy largando ahora a programar.

Mi problema es al querer hacer un alta en mi base de datos MySQL. Tengo una tabla que consiste en 8 campos, a saber:

id (autonumerico)
descripción (String)
marca (smallint)
modelo (String)
detalle (String)
precio (double)
stock (smallint)
foto (String)



Para hacer el alta hago lo siguiente:

BaseDatos bd = new BaseDatos();

String desc = request.getParameter("des");
String marc = request.getParameter("mar");
String mode = request.getParameter("mod");
String prec = request.getParameter("pre");
String stoc = request.getParameter("sto");
String deta = request.getParameter("det");
String foto = request.getParameter("fot");

String sql = "insert into articulos values (0,'"+ desc +"',"+ marc +",'"+ mode +"',"+ prec +","+ stoc +",'"+ deta +"','"+ foto+ "')";
bd.querySql(sql);


Estoy seguro que estoy cometiendo algún error con las comillas simples y/o dobles y con las comas que separan los valores... No doy pié con bola... Así que... solicito ayuda!!

Desde ya, muchas gracias...
  #2 (permalink)  
Antiguo 24/07/2012, 00:57
 
Fecha de Ingreso: junio-2012
Ubicación: Paradas (Sevilla)
Mensajes: 13
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Hola. creo que deberías coger los parámetros como los tipos a los q representan, no todos como String. Por ejemplo, si marca es smallint, coge el parámetro así:

int marca = String.parseInt(request.getParameter("mar").toStri ng();

y precio así:
double precio = Double.parseDouble(request.getParameter("pre").toS tring();


en la sentencia sql lo has metido bien:

comillas_dobles + variable_numérica + comillas_dobles
comilla_simple comillas_dobles + variable_string + comillas_dobles comilla_simple

acaba así:
, '" + foto + "');";

String sql = "insert into articulos (campo1, campo2, ...) values (0,'"+ desc +"',"+ marc +",'"+ mode +"',"+ prec +","+ stoc +",'"+ deta +"','"+ foto+ "');";
  #3 (permalink)  
Antiguo 24/07/2012, 01:11
 
Fecha de Ingreso: junio-2012
Ubicación: Paradas (Sevilla)
Mensajes: 13
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

En cuanto a la conexión y eso, no sé cómo has declarado la clase BaseDatos, yo lo que hago es que me creo una clase conexión tal que así:


import java.sql.*;


public class Conexion {

public static Connection getConexion()
{
Connection con = null;
try{

Class.forName("com.mysql.jdbc.Driver").newInstance ();
con = DriverManager.getConnection("jdbc:mysql://localhost/nombre_basededatos", "root", "");
}
catch (Exception e){
System.out.println("Error al intentar abrir la conexion "+e.getMessage());
}
return con;
}

public static void cerrarConexion(Connection con)
{
try{
con.close();
}
catch(SQLException e)
{
System.out.println("Error al cerrar la conexion a la base de datos "+e.getMessage());
}
}
}



y después de esto me creo un objeto Connection y un Statement

public static int insertarProducto(Articulo articulo) {
//créate una clase de tipo artículo con sus atributos y se lo pasas en este método

Connection con = null;
Statement st = null;





try {
con = (Connection) Conexion.getConexion();
st = (Statement) con.createStatement();

String sql = tu_consulta
insertado = st.executeUpdate(sql);
//en insertado hay un 1 si se ejecutó correctamente y 0 si no lo hizo

} catch (Exception e) {
System.out.println("Error al insertar la consulta \n\n" + e.getMessage());
} finally {
Conexion.cerrarConexion(con);
}

return insertado;
}
  #4 (permalink)  
Antiguo 24/07/2012, 03:43
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Normalmente el driver JDBC lanza algún tipo de SQLException indicando la linea y columna en donde hay un error en la sintaxis sql, si prestás atención a esa exception vas a poder solucionar tu problema.
(Ya que no mostrás ni un fragmento de susodicha exception)
__________________
BadProgrammerException!
  #5 (permalink)  
Antiguo 24/07/2012, 10:49
Avatar de mhdadamo  
Fecha de Ingreso: julio-2012
Mensajes: 2
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Gracias gente por responder...
Explico...

Tengo una clase hecha llamada BaseDatos, que es la siguiente...

import java.sql.*;

public class BaseDatos {
private String base = "jdbc:mysql://localhost:3306/javamartes";
private String user = "root";
private String pass = "";
private Connection cn;
private Statement st;
private ResultSet rs;

private Connection conectar(){
try {
Class.forName("com.mysql.jdbc.Driver");
cn = DriverManager.getConnection(base, user, pass);
return cn;
} catch (SQLException e) {
System.out.println("Error SQL!");
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}

public boolean transacSql(String sql){
try {
cn = new BaseDatos().conectar();
st = cn.createStatement();
st.executeUpdate(sql);
desconectar();
return true;
} catch (SQLException e) {
System.out.println("Error en la SQL, Metodo transacSql: " + sql);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return false;
}

public ResultSet querySql(String sql){
try {
cn = new BaseDatos().conectar();
st = cn.createStatement();
rs = st.executeQuery(sql);
return rs;
} catch (SQLException e) {
System.out.println("Error en la SQL, Metodo ResulSet querySql: " + sql);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}

public void desconectar(){
try {
st.close();
} catch (SQLException e) {}
try {
cn.close();
} catch (Exception e) {}
}
}




por otro lado, parte del problema lo resolví, estaban mal ordenados los parámetros, pero el problema ahora es el siguiente, si yo ejecuto la query desde el MySQL, da el alta sin ningún problema, el problema surge cuando lo hago desde el html, dentro del Eclipse.

La query es la siguiente:
insert into articulos values (0 ,'Telefono ',1,'mot9000','bla',123,49,'foto.jpg');

Los campos son los mismos que están arriba...


La excepción que arroja es la siguiente:
Error en la SQL, Metodo ResulSet querySql: insert into articulos values (0 ,'Tel',1,'qwetqwe','qwerty',123,9,'foto.jpg')




Desde ya gracias...
  #6 (permalink)  
Antiguo 25/07/2012, 02:16
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Cuando FiruzzZ te dice que te fijes en el texto de la excepción, no se refiere al texto que tú has puesto para sustituir a la excepción, se refiere a la excepción.

Cuando capturas una excepción lo normal es pintar en consola/log la traza de la excepción, los mensajes propios quedan para mostrarle al usuario.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 25/07/2012, 07:14
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 8 meses
Puntos: 48
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Pon espacios detrás de las comas

String sql = "insert into articulos (campo1, campo2, ...) values (0, '"+ desc +"', "+ marc +", '"+ mode +"', "+ prec +", "+ stoc +", '"+ deta +"', '"+ foto+ "');";
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web
  #8 (permalink)  
Antiguo 26/07/2012, 01:42
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

1. Las variables java que uses deben equivaler a los tipos de dato de la BD
Ej: String para varchar e incluso clob, Short para smallint, Integer o Long para Number, etc.
2. Solo debes entrecomillar con comillas simples las variables String.

Si tienes cuidado con esas cosas debería funcionarte.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #9 (permalink)  
Antiguo 26/07/2012, 03:24
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 8 meses
Puntos: 48
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Cita:
Iniciado por Fuzzylog Ver Mensaje
1. Las variables java que uses deben equivaler a los tipos de dato de la BD
Ej: String para varchar e incluso clob, Short para smallint, Integer o Long para Number, etc.
¿Estas seguro de eso?

Si en base de datos esta como numero, a esta le da igual si yo el valor lo tengo en un String, siempre y cuando guarde un numero (por ejemplo. "7"). Si en el String hay texto, claro que falla.

Y lo mismo al revés, si en base de datos es un texto, le da igual que yo le meta el valor de una variable mía que sea un Integer, el guardara el numero como un texto y listo.

Cita:
Iniciado por Fuzzylog Ver Mensaje
2. Solo debes entrecomillar con comillas simples las variables String.
Correcto
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web
  #10 (permalink)  
Antiguo 26/07/2012, 04:33
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Que algo funcione o parezca funcionar no significa que sea lo correcto. Hay una serie de reglas o convenios que se deben seguir para evitar problemas como los que tienes, aunque no sea la única solución posible.

Piensa que igual dentro de un tiempo otros tendrán que tocar el código que hiciste, por tanto tu responsabilidad es dejar un código medianamente legible y mantenible.

Haciendo otras cosas lo único que se consigue es incrementar la confusión.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #11 (permalink)  
Antiguo 26/07/2012, 05:15
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 8 meses
Puntos: 48
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Cita:
Iniciado por Fuzzylog Ver Mensaje
Que algo funcione o parezca funcionar no significa que sea lo correcto. Hay una serie de reglas o convenios que se deben seguir para evitar problemas como los que tienes, aunque no sea la única solución posible.

Piensa que igual dentro de un tiempo otros tendrán que tocar el código que hiciste, por tanto tu responsabilidad es dejar un código medianamente legible y mantenible.

Haciendo otras cosas lo único que se consigue es incrementar la confusión.
Una cosa, es que es preferible trabajar con los mismos tipos de la base de datos para evitar problemas de que te llegue algún dato no compatible y porque queda más claro y más limpio. Pero eso ya es un consejo de buenas maneras de hacerlo. Aunque si luego cambia algún tipo en la base de datos, te lo comes por el código... pero bueno, eso ya es otro tema.

El tema es que el problema de la insert no es por los tipos. Creo que el problema, como ya he dicho antes, es no poner los espacios detrás de las comas.
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web
  #12 (permalink)  
Antiguo 26/07/2012, 06:32
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Vamos a ir un poco más en serio, que por ahora solo lo había visto por encima:

Wakka, ¿desde cuando es necesario poner espacios después de las comas?, yo he llegado a ejecutar inserts sin espacios y los resultados han sido correctos. Igual puede ser por el tipo de BD, pero no lo veo una condición tan restrictiva.

mhdadamo, Como bien dice Firuzzz, fijate en el texto completo de la excepcion, tiene que salir un error SQL numerado que te da una idea del fallo que se produce.

Otra cosa, La sentencia INSERT INTO TABLA VALUES (X,Y,Z...); te obliga a cubrir todos los campos de esa tabla, aunque sea con null. Para meter una serie de campos en concreto habría que usar INSERT INTO TABLA(campo1,campo2,campo3...) VALUES (X,Y,Z...);

Y si no va por ahi, lo que me escama es ese insert 0 del primer campo. ¿Que es? ¿Un id del elemento en la tabla? Ten en cuenta que ese tipo de elementos deben ser únicos, y en algún caso obliga a introducir un número mayor que cero. También existen los identificadores autogenerados con secuencia, así que no sé que es lo que pretendes añadir ahí.

Espero que con esto sea suficiente. O igual ya lo resolvió y no volvió a pasarse por aquí.... :S A saber.

Edito: Pues si que era un id, si es autonumérico, entonces no deberia tener que pasarlo en la query, aunque teniendo en cuenta que yo he trabajado con Oracle y DB2, igual en MySQL se le indica así... hasta ahí no llego.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Última edición por Fuzzylog; 26/07/2012 a las 06:38
  #13 (permalink)  
Antiguo 27/07/2012, 03:38
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 8 meses
Puntos: 48
Respuesta: Problemas con el INSERT INTO - Comillas simples y dobles

Cita:
Iniciado por Fuzzylog Ver Mensaje
Wakka, ¿desde cuando es necesario poner espacios después de las comas?, yo he llegado a ejecutar inserts sin espacios y los resultados han sido correctos. Igual puede ser por el tipo de BD, pero no lo veo una condición tan restrictiva.
Me ha pasado alguna vez, dependiendo de la configuración de la base de datos y había problemas porque si no ponías el espacio interpretaba que estabas intentando insertar un decimal. Lo que no recuerdo bien si me paso con MySql, pero me ha pasado y hasta que te das cuenta pasa un ratillo...

Cita:
Iniciado por Fuzzylog Ver Mensaje
Edito: Pues si que era un id, si es autonumérico, entonces no deberia tener que pasarlo en la query, aunque teniendo en cuenta que yo he trabajado con Oracle y DB2, igual en MySQL se le indica así... hasta ahí no llego.
En MySql le puedes pasar valor aunque sea autonumérico, aunque no se suele hacer porque no tiene sentido

Otra cosa que habría que mirar es si ha indicado una clave primaria y que no la este duplicando.
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:26.