Class SQLRunner

java.lang.Object
cool.scx.jdbc.sql.SQLRunner

public final class SQLRunner extends Object
SQLRunner 用于执行简单的 jdbc 查询
Version:
0.0.1
Author:
scx567888
  • Constructor Details

    • SQLRunner

      public SQLRunner(JDBCContext jdbcContext)
  • Method Details

    • autoTransaction

      public static void autoTransaction(Connection con, cool.scx.common.functional.ScxConsumer<Connection,Exception> handler) throws Exception
      自动事务
      Parameters:
      con - con
      handler - handler
      Throws:
      Exception - e
    • autoTransaction

      public static <T> T autoTransaction(Connection con, cool.scx.common.functional.ScxFunction<Connection,T,Exception> handler) throws Exception
      自动事务 (带返回值)
      Type Parameters:
      T - T
      Parameters:
      con - con
      handler - handler
      Returns:
      返回值
      Throws:
      Exception - e
    • query

      public <T> T query(Connection con, SQL sql, ResultHandler<T> resultHandler) throws SQLException
      query
      Type Parameters:
      T - T
      Parameters:
      con - con
      sql - sql
      resultHandler - resultHandler
      Returns:
      result
      Throws:
      SQLException - e
    • query

      public <T> T query(SQL sql, ResultHandler<T> resultHandler)
      query (自动管理连接)
      Type Parameters:
      T - T
      Parameters:
      sql - sql
      resultHandler - resultHandler
      Returns:
      result
    • execute

      public long execute(Connection con, SQL sql) throws SQLException
      execute
      Parameters:
      con - con
      sql - sql
      Returns:
      受影响的行数
      Throws:
      SQLException - e
    • execute

      public long execute(SQL sql)
      execute (自动管理连接)
      Parameters:
      sql - sql
      Returns:
      受影响的行数
    • update

      public UpdateResult update(Connection con, SQL sql) throws SQLException
      update
      Parameters:
      con - con
      sql - sql
      Returns:
      UpdateResult
      Throws:
      SQLException - e
    • update

      public UpdateResult update(SQL sql)
      update (自动管理连接)
      Parameters:
      sql - sql
      Returns:
      UpdateResult
    • updateBatch

      public UpdateResult updateBatch(Connection con, SQL sql) throws SQLException
      updateBatch
      Parameters:
      con - con
      sql - sql
      Returns:
      UpdateResult
      Throws:
      SQLException - e
    • updateBatch

      public UpdateResult updateBatch(SQL sql)
      updateBatch (自动管理连接)
      Parameters:
      sql - sql
      Returns:
      UpdateResult
    • autoTransaction

      public void autoTransaction(cool.scx.common.functional.ScxRunnable<?> handler)
      自动处理事务并在产生异常时进行自动回滚 注意 其中的操作会在另一个线程中执行 所以需要注意线程的操作 当抛出异常时 请使用 ScxExceptionHelper.getRootCause(Throwable) 来获取真正的异常 用法
      
            假设有以下结构的数据表
            create table test (
                name varchar(32) null unique,
            );
            在连接消费者中传入要执行的操作
            SQLRunner sqlRunner = xxx;
               try {
                   sqlRunner.autoTransaction(() -> {
                       // 这句代码会正确执行
                       sqlRunner.execute(NoParametersSQL.of("insert into test(name) values('uniqueName') "));
                       // 这句会产生异常 这时上一个语句会进行回滚 (rollback) 同时将异常抛出
                       sqlRunner.execute(NoParametersSQL.of("insert into test(name) values('uniqueName') "));
                   });
               } catch (Exception e) {
                   //这里会捕获 getConnection 可能产生的 SQLException 和 autoTransaction 代码块中产生的所有异常
                   //因为会进行多层包裹 所以建议使用 ScxExceptionHelper.getRootCause(e); 来获取真正的异常
                   ScxExceptionHelper.getRootCause(e).printStackTrace();
               }
        
      Parameters:
      handler - 连接消费者
    • autoTransaction

      public <T> T autoTransaction(Callable<T> handler)
      同上 autoTransaction(ScxRunnable) 但是有返回值
      Type Parameters:
      T - a
      Parameters:
      handler - a
      Returns:
      a