Running multiple SQL statements from Groovy

后端 未结 3 659
遇见更好的自我
遇见更好的自我 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();
        }
      }
    }
    

提交回复
热议问题