Running multiple SQL statements from Groovy

后端 未结 3 628
遇见更好的自我
遇见更好的自我 2021-01-13 00:17

I\'m having problems running multiple SQL statements in one activaction from Groovy.

sql = Sql.newInstance(\"jdbc:mysql://localhost/\", \"usre\", \"pass\", \         


        
相关标签:
3条回答
  • 2021-01-13 00:57

    The problem is because groovy uses JDBC's Statement.execute(), which expects on statement. Here is a replacement class for Groovy's Sql that works around this problem (but lacks in functionality)

    /**
     * Not related to mysql, just to distinguish it from Groovy's Sql class
     * Created to solve this problem: http://stackoverflow.com/questions/4286483/running-multiple-sql-statements-from-groovy
     */
    public class MySql {
      private final String password;
      private final String connectionString;
      private final String user;
    
      public static newInstance(String connectionString, String user, String password, String driverName) {
        Class.forName(driverName).newInstance();
        return new MySql(connectionString, user, password);
      }
    
      public MySql(String connectionString, String user, String password) {
        this.connectionString = connectionString;
        this.user = user;
        this.password = password;
      }
    
      void execute(String query) {
        Connection conn = DriverManager.getConnection(connectionString, user, password);
        try {
          Statement statement = conn.createStatement();
          for (String subQuery : query.split(";"))
          {
            if (subQuery.trim() == '')
              continue;
    
            statement.addBatch subQuery
          }
          statement.executeBatch();
        }
        finally {
          conn.close();
        }
      }
    }
    
    0 讨论(0)
  • 2021-01-13 01:01

    Paul King, one of the Groovy developers, commented on the issue I opened that you can tell mysql to allow multiple statements (this is not necessarily supported by other RDBMS)

    0 讨论(0)
  • 2021-01-13 01:08

    You can simply augment the following jdbc url parameter to your connection string

    http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html#allowMultiQueries

    From the docs:

    Allow the use of ';' to delimit multiple queries during one statement (true/false), defaults to 'false'

    For example:

    Sql.newInstance("jdbc:mysql://localhost?allowMultiQueries=true", "usre", "pass", "com.mysql.jdbc.Driver")
    
    0 讨论(0)
提交回复
热议问题