Problema de consulta

Resuelto
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

2 respuestas

NHenry Mensajes publicados 15235 Fecha de registro   Estado Moderador Última intervención   387
 
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".
0
Solène
 
Gracias por su respuesta. El problema es que mi variable no está almacenada en el array, en realidad es una variable en Java. Al final, no estoy segura de haber entendido lo que quiere decir...
0
NHenry Mensajes publicados 15235 Fecha de registro   Estado Moderador Última intervención   387
 
Agregar el contenido de una variable a una cadena se llama concatenar.
0
KX Mensajes publicados 19031 Estado Moderador 3 020
 
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!
0
KX Mensajes publicados 19031 Estado Moderador 3 020
 
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.
0
Helene
 
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)
0
KX Mensajes publicados 19031 Estado Moderador 3 020
 
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.*!
0
Helene
 
Genial, funciona, no había eliminado la declaración y me hice un lío. Gracias :)
0