Ich versuche, groovy.sql.SQL verwenden, um Datenbanken in einem MSSQL (Microsoft SQL Server) -Server zu erstellen. Es scheint so, als ob die vorbereitete Anweisung zusätzliche Anführungszeichen um den letzten Parameter hinzufügt, der die Abfrage unterbricht.Groovy, sichere Möglichkeit, MSSQL-Datenbank zu erstellen
Dieser Test Code:
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 ]
)
Gibt den Fehler:
Failed to execute: IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = ?) DROP DATABASE ? because: Incorrect syntax near '@P1'.
Wie kann ich vorbereitete Anweisungen verwenden, ohne es einfache Anführungszeichen um Parameter ein (DROP DATABASE scheinen hinzufügen zu müssen zu sein? umgeschrieben als DROP DATABASE '?') oder kann ich die Abfrage anders schreiben, so dass die hinzugefügten Hochkommata keinen Syntaxfehler erzeugen?
Ich würde auch mit anderen Frameworks gut, wenn mir jemand ein funktionierendes Beispiel geben könnte.
Danke und Sql.expand würde die Abfrage Injektion sicher machen? – Tirithen
Nein, nicht alleine, aber es würde die Abfrage funktionieren lassen. –
:) Okay, das war nicht was ich suchte, dann konnte ich auch Verkettungen machen, ich werde weiter suchen. – Tirithen