Hi I was wondering if it is possible to execute something like this using JDBC as it currently provides an exception even though it is possible in the MySQL query browser.
"SELECT FROM * TABLE;INSERT INTO TABLE;"
While I do realize that it is possible with having the SQL query string being split and the statement executed twice but I was wondering if there is a one time approach for this.
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);
I was wondering if it is possible to execute something like this using JDBC.
Yes it is possible. There are two ways, as far as I know. They are
separated by a semi-colon by default.
Following examples demonstrate the above two possibilities.
Example 1: ( To allow multiple queries ):
While sending a connection request, you need to append a connection property
allowMultiQueries=trueto the database url. This is additional connection property to those if already exists some, likeautoReConnect=true, etc.. Acceptable values forallowMultiQueriesproperty aretrue,false,yes, andno. Any other value is rejected at runtime with anSQLException.Unless such instruction is passed, an
SQLExceptionis thrown.You have to use
execute( String sql )or its other variants to fetch results of the query execution.To iterate through and process results you require following steps:
Example 2: Steps to follow:
select, andDMLqueries.CallableStatement.ResultSets executed in procedure.DML results can’t be captured but can issue another
selectto find how the rows are affected in the table.
Sample table and procedure:
Call Procedure from Java: