/**
  * {@link PreparedStatement}をカスタマイズします。
  *
  * @param ps
  */
 protected void configurePreparedStatement(PreparedStatement ps) {
   if (fetchSize != null) {
     StatementUtil.setFetchSize(ps, fetchSize.intValue());
   }
   if (maxRows != null) {
     StatementUtil.setMaxRows(ps, maxRows.intValue());
   }
   if (queryTimeout != null) {
     StatementUtil.setQueryTimeout(ps, queryTimeout.intValue());
   }
 }
 @Override
 public void createUser(String user, String password, String adminUser, String adminPassword)
     throws MojoExecutionException {
   DriverManagerUtil.registerDriver(DRIVER);
   Connection conn = null;
   Statement stmt = null;
   try {
     conn = DriverManager.getConnection(url, adminUser, adminPassword);
     stmt = conn.createStatement();
     if (existsUser(conn, user)) {
       return;
     }
     try {
       stmt.execute("DROP USER '" + user + "'");
     } catch (SQLException ignore) {
       // DROP USERに失敗しても気にしない
     }
     stmt.execute("CREATE USER '" + user + "' IDENTIFIED BY '" + password + "'");
     stmt.execute("GRANT ALL ON *.* TO '" + user + "'");
   } catch (SQLException e) {
     throw new MojoExecutionException("CREATE USER実行中にエラー", e);
   } finally {
     StatementUtil.close(stmt);
     ConnectionUtil.close(conn);
   }
 }
 /**
  * 準備されたステートメントを返します。
  *
  * @param jdbcContext JDBCコンテキスト
  * @return 準備されたステートメント
  */
 protected PreparedStatement getPreparedStatement(JdbcContext jdbcContext) {
   PreparedStatement ps = jdbcContext.getPreparedStatement(executedSql);
   if (queryTimeout > 0) {
     StatementUtil.setQueryTimeout(ps, queryTimeout);
   }
   return ps;
 }
 /**
  * 準備されたステートメントを返します。
  *
  * @param sql SQL
  * @return 準備されたステートメント
  */
 public PreparedStatement getPreparedStatement(String sql) {
   if (connection != null && preparedStatement != null) {
     StatementUtil.close(preparedStatement);
   }
   preparedStatement = ConnectionUtil.prepareStatement(connection, sql);
   return preparedStatement;
 }
 private boolean existsUser(Connection conn, String user) throws SQLException {
   PreparedStatement stmt = null;
   try {
     stmt = conn.prepareStatement("SELECT count(*) AS num FROM mysql.user WHERE User=?");
     stmt.setString(1, user);
     ResultSet rs = stmt.executeQuery();
     rs.next();
     return (rs.getInt("num") > 0);
   } finally {
     StatementUtil.close(stmt);
   }
 }
  public boolean isAutoIncrement(
      Connection connection,
      String catalogName,
      String schemaName,
      String tableName,
      String columnName)
      throws SQLException {
    String fullTableName = TableUtil.buildFullTableName(catalogName, schemaName, tableName);
    String sql = "select " + columnName + " from " + fullTableName + " where 1 = 0";
    logger.debug(sql);

    PreparedStatement ps = ConnectionUtil.prepareStatement(connection, sql);
    try {
      ResultSet rs = ps.executeQuery();
      try {
        ResultSetMetaData rsMetaData = rs.getMetaData();
        return rsMetaData.isAutoIncrement(1);
      } finally {
        ResultSetUtil.close(rs);
      }
    } finally {
      StatementUtil.close(ps);
    }
  }