2016-06-13 10 views
0

を作成するための安全な方法は、私は、MSSQL(Microsoft SQL Serverの)サーバーでデータベースを作成するためにgroovy.sql.Sqlを使用しようとしています。準備されたステートメントは、最後のパラメータを引用符で囲み、クエリを分割しているようです。Groovyの、MSSQLデータベース

このテストコード:?私はあるように見えることは、パラメータ1(DROPデータベース周りの単一引用符を追加することなく、プリペアドステートメントを使用するにはどうすればよい

Failed to execute: IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = ?) DROP DATABASE ? because: Incorrect syntax near '@P1'. 

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 ] 
) 

はエラーになりますDROP DATABASE '?')として書き直すか、追加した一重引用符で構文エラーが発生しないように別の方法でクエリを書き込むことはできますか?

誰かが私に作業例を与えることができれば、私はまた、他のフレームワークと罰金になります。

答えて

0

あなたは試すことができます:

connection.execute(
    "IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = $databaseName) DROP DATABASE ${Sql.expand(databseName)}" 
) 
+0

ありがとう、そしてSql.expandは、クエリの注入は安全になるだろうか? – Tirithen

+0

いいえ、単独ではありませんが、クエリが機能するようになります。 –

+0

:)さて、それは私が探していたものではなかった、そして私は連結をも行うことができた、私は見続けるだろう。 – Tirithen

関連する問題