嗨,我想知道是否有可能使用jdbc执行类似的操作,因为它目前提供了一个异常,即使在mysql查询浏览器中也是可能的。
"SELECT FROM * TABLE;INSERT INTO TABLE;"
虽然我确实意识到将sql查询字符串拆分并将语句执行两次是可能的,但是我想知道是否有一种一次性的方法来实现这一点。
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);
6条答案
按热度按时间wxclj1h51#
可以使用批更新,但查询必须是操作(即插入、更新和删除)查询
wgxvkvu92#
你为什么不试着写一封信呢
Stored Procedure
为了这个?你可以得到
Result Set
内外兼修Stored Procedure
你可以Insert
你想要什么。唯一的问题是您可能无法在
Result Set
如果你Insert
之后Select
.cnwbcb6i3#
我想知道是否有可能使用jdbc执行这样的操作。
是的,这是可能的。据我所知,有两种方法。他们是
通过将数据库连接属性设置为允许多个查询,默认情况下以分号分隔。
通过调用返回游标隐式的存储过程。
下面的例子说明了上述两种可能性。
示例1:(允许多个查询):
发送连接请求时,需要附加连接属性
allowMultiQueries=true
到数据库url。这是附加的连接属性,如果已经存在的话,比如autoReConnect=true
等等。。可接受值allowMultiQueries
财产是true
,false
,yes
,和no
. 任何其他值在运行时都会被SQLException
.除非该指示获得通过,否则
SQLException
被抛出。你必须使用
execute( String sql )
或者它的其他变体来获取查询执行的结果。要遍历和处理结果,需要执行以下步骤:
示例2:要遵循的步骤:
使用一个或多个
select
,和DML
查询。用java调用
CallableStatement
.您可以捕获多个
ResultSet
按程序执行。无法捕获dml结果,但可以发布另一个结果
select
查找表中的行是如何受到影响的。样品表和程序:
java调用过程:
byqmnocz4#
根据我的测试,正确的标志是“allowmultiqueries=true”
dddzy1tm5#
我认为这是多选择/更新/插入/删除的最简单方法。在使用executeupdate(str)(只需使用new int(count1,count2,…))选择之后,您可以根据需要运行任意多个update/insert/delete(您必须首先进行选择(如果需要,可以使用伪选择)),如果您需要新的选择,请关闭“statement”和“connection”,并为下一次选择进行新的选择。例如:
希望对你有帮助
km0tfn4u6#
提示:如果您有多个连接属性,请使用以下分隔:
给你这样的东西:
我希望这对别人有帮助。
当做,
格林