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
-
Creo que necesitas concatenar tu cadena ('Select ... ') con tu variable para hacer lo que quieres.
--
Intervengo principalmente en VB6 y VB.NET, con un poco de C#, pero la moderación me lleva a menudo a otros lenguajes.
En VB.NET piensa en activar "Option Explicit" y "Option Strict".-
-
-
Atención: la concatenación permite realizar inyecciones SQL, ¡por lo tanto, debe evitarse!
Ejemplo:String nom = "'); DROP javadb; --";
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!
-
-
Hola,
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) -
Tienes:
at com.mysql.jdbc.Statement.executeUpdate
es 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.*! -
-