【发布时间】:2016-10-13 16:10:07
【问题描述】:
我正在尝试使用 groovy.sql.Sql 在 MSSQL (Microsoft SQL Server) 服务器中创建数据库。似乎准备好的语句在中断查询的最后一个参数周围添加了额外的引号。
这个测试代码:
import groovy.sql.Sql
import com.microsoft.sqlserver.jdbc.SQLServerDataSource
def host = 'myhost'
def port = '1433'
def database = 'mydatabasename'
def usernameName = 'myusername'
def password = 'mypassword'
def dataSource = new SQLServerDataSource()
dataSource.setURL("jdbc:sqlserver://$host:$port")
dataSource.setUser(username)
dataSource.setPassword(password)
def connection new Sql(dataSource)
connection.execute(
'IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = ?) DROP DATABASE ?',
[ databaseName, databaseName ]
)
给出错误:
Failed to execute: IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = ?) DROP DATABASE ? because: Incorrect syntax near '@P1'.
如何使用准备好的语句而不在参数一周围添加单引号(DROP DATABASE ? 似乎被重写为 DROP DATABASE '?')或者我可以以不同的方式编写查询,以便添加的单引号不会产生语法错误?
如果有人能给我一个工作示例,我也可以使用其他框架。
【问题讨论】:
标签: sql-server database groovy sql-injection