Problema de consulta
Resuelto
Helene
-
Helene -
Helene -
Hola a todos,
Actualmente estoy trabajando en un proyecto en Java y para eso he creado mi base de datos en phpmyadmin. He conectado mi base de datos a Eclipse, pero el problema surge cuando quiero agregar un elemento dado como argumento de la función a mi tabla (que por ahora solo tiene una columna).
Puedo agregar cualquier cadena de caracteres, pero el problema es que no puedo usar una variable.
String sql = "INSERT INTO javadb (persona) VALUES ('j')";
Cuando reemplazo el 'j' por nom que es el nombre de mi variable, no funciona. También he probado:
.$nom.
$nom
"nom"
'nom'
Nada de esto funciona, no puedo encontrar la solución.
Cualquier ayuda sería muy apreciada.
Atentamente,
Hélène
Actualmente estoy trabajando en un proyecto en Java y para eso he creado mi base de datos en phpmyadmin. He conectado mi base de datos a Eclipse, pero el problema surge cuando quiero agregar un elemento dado como argumento de la función a mi tabla (que por ahora solo tiene una columna).
Puedo agregar cualquier cadena de caracteres, pero el problema es que no puedo usar una variable.
String sql = "INSERT INTO javadb (persona) VALUES ('j')";
Cuando reemplazo el 'j' por nom que es el nombre de mi variable, no funciona. También he probado:
.$nom.
$nom
"nom"
'nom'
Nada de esto funciona, no puedo encontrar la solución.
Cualquier ayuda sería muy apreciada.
Atentamente,
Hélène
2 respuestas
Hola,
Necesitas un Prepared Statement.
https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
--
La confianza no excluye el control.
Necesitas un Prepared Statement.
https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
String sql = "INSERT INTO javadb (persona) VALUES (?)"; PreparedStatement ps = con.prepareStatement(sql); ps.setString(1, nombre); // "nombre" es una variable de tipo String ps.executeUpdate();
--
La confianza no excluye el control.
Hola,
Gracias por tu respuesta, sin embargo, obtengo un error :/ :
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Tienes un error en tu sintaxis SQL; verifica el manual que corresponde a tu versión del servidor MySQL para la sintaxis correcta a usar cerca de '?)' en la línea 1
en com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
en com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
en com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
en com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
en com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
en com.mysql.jdbc.Statement.executeUpdate(Statement.java:1343)
en com.mysql.jdbc.Statement.executeUpdate(Statement.java:1260)
en com.objis.demojdbc.DemoJdbc.sauverEnBase(DemoJdbc.java:34)
en com.objis.demojdbc.DemoJdbc.main(DemoJdbc.java:12)
Gracias por tu respuesta, sin embargo, obtengo un error :/ :
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Tienes un error en tu sintaxis SQL; verifica el manual que corresponde a tu versión del servidor MySQL para la sintaxis correcta a usar cerca de '?)' en la línea 1
en com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
en com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
en com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
en com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
en com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
en com.mysql.jdbc.Statement.executeUpdate(Statement.java:1343)
en com.mysql.jdbc.Statement.executeUpdate(Statement.java:1260)
en com.objis.demojdbc.DemoJdbc.sauverEnBase(DemoJdbc.java:34)
en com.objis.demojdbc.DemoJdbc.main(DemoJdbc.java:12)
Tienes:
Si hubieras utilizado el código que puse, en caso de error deberías haber tenido:
Además, tu importación no debe ser correcta, has importado com.mysql.jdbc.* pero lo que hay que importar es java.sql.*!
at com.mysql.jdbc.Statement.executeUpdatees decir, que has ejecutado directamente la consulta con ""?" sin reemplazar el valor.
Si hubieras utilizado el código que puse, en caso de error deberías haber tenido:
at java.sql.PreparedStatement.executeUpdate()
Además, tu importación no debe ser correcta, has importado com.mysql.jdbc.* pero lo que hay que importar es java.sql.*!
Ejemplo:
Si concateno de esta manera:
String sql = "INSERT INTO javadb (personne) VALUES ('"+nom+"')";Esto da como resultado:
INSERT INTO javadb (personne) VALUES (''); DROP javadb; --')¡Y bam! ¡Eso elimina toda la tabla!