Good morning,
I am encountering a problem when performing the INSERT
command in java. One of the fields is the name of the game, and being in English there are some that include a quote ('), that is why if for example the name of the game you have to enter is Tom Clancy's Rainbow Six, java is only me taking Tom Clancy, and the program stops running because of the following error: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's Rainbow Six Siege'' at line 1
. That line corresponds to the line where I use INSERT
.
The code I'm using:
public class Conectate {
private String driver ="com.mysql.jdbc.Driver";
private String cadenaConexion ="jdbc:mysql://localhost/XboxOne";
private String pass = "";
private String usuario = "root";
public Connection con;
//public Conectate(Map<String, Map<String, Item>> gamesByCountry, Map<String, String> codesByTitle,Map<String, String> countries) {
public Conectate(ArrayList<Item> games) {
try {
Class.forName(driver);
con = DriverManager.getConnection(cadenaConexion, usuario, pass);
System.out.println("¡Conectado!");
//CREAMOS LA TABLA
Statement st = con.createStatement();
st.executeUpdate("CREATE TABLE IF NOT EXISTS info_XboxOne (id INT AUTO_INCREMENT, PRIMARY KEY(id), "
+ "Juego_vinculado VARCHAR(500), Juego VARCHAR(500), Tipologia VARCHAR (500), Pertenece VARCHAR (500), "
+ "Nota VARCHAR (10), Descripcion_Ingles TEXT(4000), Descripcion_Castellano TEXT(4000), Pegi VARCHAR(10), Descripcion_Pegi VARCHAR(200),"
+ "Lanzamiento VARCHAR (50))");
System.out.println( "Tabla creada!");
for (Item game : games) {
String titulo = game.getName();
ResultSet rs = st.executeQuery("SELECT * FROM info_XboxOne WHERE juego = '" + titulo + "'");
if (!rs.next()) { //si se cumple esta condicción significa que el juego no está incluido, con lo que lo metemos
PreparedStatement ps = con.prepareStatement("INSERT INTO info_XboxOne (Juego, Tipologia, Pertenece, "
+ "Nota, Descripcion_Ingles, Descripcion_Castellano, Pegi, Descripcion_Pegi"
+ ") VALUES (?,?,?,?"
+ ",?,?,?,?"
+ ")");
ps.setString(1,game.getName());
ps.setString(2,game.getValues().get(Constants.TIPOLOGIA));
ps.setString(3,game.getValues().get(Constants.PERTENECE));
ps.setString(4,game.getValues().get(Constants.NOTA));
ps.setString(5,game.getValues().get(Constants.DESCRIPCION_INGLES));
ps.setString(6,game.getValues().get(Constants.DESCRIPCION_CASTELLANO));
ps.setString(7,game.getValues().get(Constants.PEGI));
ps.setString(8,game.getValues().get(Constants.DESCRIPCION_PEGI));
ps.executeUpdate();
} else {
String query = "UPDATE info_XboxOne SET Tipologia = ?, Pertenece = ?, "
+ "Nota = ?, Descripcion_Ingles = ?, Descripcion_Castellano = ?, "
+ "Pegi = ?, Descripcion_Pegi = ? WHERE juego = " + titulo;
PreparedStatement ps = con.prepareStatement(query);
ps.setString(2,game.getValues().get(Constants.TIPOLOGIA));
ps.setString(3,game.getValues().get(Constants.PERTENECE));
ps.setString(4,game.getValues().get(Constants.NOTA));
ps.setString(5,game.getValues().get(Constants.DESCRIPCION_INGLES));
ps.setString(6,game.getValues().get(Constants.DESCRIPCION_CASTELLANO));
ps.setString(7,game.getValues().get(Constants.PEGI));
ps.setString(8,game.getValues().get(Constants.DESCRIPCION_PEGI));
ps.executeUpdate();
}
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "No se ha podido establecer la conexión con la DB" + e);
e.printStackTrace();
}
}
public String ConvertirObjectToString(Object Obj) {
String Str="";
if(Obj!=null){
Str = Obj.toString();
}
return Str;
}
}
Is there any way to prevent the name quotes from posing a problem for execution? It would also happen to me with another field, but this one that commented is the one that has skipped me first.