Hola, me preguntaba si es posible ejecutar algo como esto usando JDBC, ya que actualmente proporciona una excepción a pesar de que es posible en el navegador de consultas MySQL.
"SELECT FROM * TABLE;INSERT INTO TABLE;"
Si bien me doy cuenta de que es posible dividir la cadena de consulta SQL y ejecutar la declaración dos veces, me preguntaba si hay un enfoque único para esto.
String url = "jdbc:mysql://localhost:3306/";
String dbName = "databaseinjection";
String driver = "com.mysql.jdbc.Driver";
String sqlUsername = "root";
String sqlPassword = "abc";
Class.forName(driver).newInstance();
connection = DriverManager.getConnection(url+dbName, sqlUsername, sqlPassword);

allowMultiQueries=true.Respuestas:
Me preguntaba si es posible ejecutar algo como esto usando JDBC.
Sí, es posible. Hay dos formas, hasta donde yo sé. Son
Los siguientes ejemplos demuestran las dos posibilidades anteriores.
Ejemplo 1 : (para permitir múltiples consultas):
Al enviar una solicitud de conexión, debe agregar una propiedad de conexión
allowMultiQueries=truea la URL de la base de datos. Esto es propiedad de conexión adicionales a los que ya existe, si algunos, comoautoReConnect=true, etc .. Los valores aceptables paraallowMultiQueriesla propiedad sontrue,false,yes, yno. Cualquier otro valor se rechaza en tiempo de ejecución con unSQLException.A menos que se apruebe tal instrucción,
SQLExceptionse lanza un.Debe usar
execute( String sql )o sus otras variantes para obtener resultados de la ejecución de la consulta.Para iterar y procesar los resultados, necesita los siguientes pasos:
Ejemplo 2 : Pasos a seguir:
selectyDML.CallableStatement.ResultSetelectrónico ejecutados en el procedimiento.Los resultados de DML no se pueden capturar, pero pueden emitir otro
selectpara averiguar cómo se ven afectadas las filas en la tabla.
Tabla de muestra y procedimiento :
Procedimiento de llamada desde Java :
fuente
Puede utilizar la actualización por lotes, pero las consultas deben ser consultas de acción (es decir, insertar, actualizar y eliminar)
fuente
Sugerencia: si tiene más de una propiedad de conexión, sepárelas con:
Para darte algo como:
Espero que esto ayude a alguien.
Saludos,
Glyn
fuente
Según mis pruebas, la marca correcta es "allowMultiQueries = true"
fuente
¿Por qué no intentas escribir una
Stored Procedurepara esto?Puedes sacar la
Result Setsalida y en la mismaStored Procedurepuedes hacerInsertlo que quieras.Lo único es que es posible que no obtenga las filas recién insertadas en el
Result SetsiInsertdespués delSelect.fuente
Creo que esta es la forma más fácil de realizar múltiples selecciones / actualizar / insertar / eliminar. Puede ejecutar tantas actualizaciones / insertar / eliminar como desee después de la selección (primero debe hacer una selección (una ficticia si es necesario)) con executeUpdate (str) (solo use new int (count1, count2, ...)) y si necesita una nueva selección, cierre 'declaración' y 'conexión' y haga nuevas para la próxima selección. Como ejemplo:
Espero que ayude
fuente