美文网首页
scala 封装jdbc的常用操作,自动关闭数据库的连接资源

scala 封装jdbc的常用操作,自动关闭数据库的连接资源

作者: NikolasNull | 来源:发表于2018-07-26 17:50 被阅读169次

Scala中貌似没有try-with的概念,在Java中则可以使用try-with自动释放连接资源,如:输入输出流、数据库连接。
在Scala中如果想要实现自动释放数据库的连接资源时,需要自己封装。借鉴网上大神的博客,给大家分享一下我自己的Scala jdbc操作工具类。

case class CloseAble[A <: {def close() : Unit}](a: A) {
  def map[B](f: A => B): B =
    try f(a)
    finally {
      if (a != null){
        a.close()
      }
    }

  def flatMap[B](f: A => B): B = map(f)
}

初始化数据库连接对象

  private def initConnection(): Unit = {
    try {
      Class.forName(this._driverClassName).newInstance()
      this.conn = DriverManager.getConnection(this._url, this._user, this._password)
    } catch {
      case e: Exception => {
        e.printStackTrace()
      }
    }
  }

查询模型函数

 def queryModel[A](sql: String)(implicit f: ResultSet => List[A]): List[A] = {
    initConnection()
    CloseAble(this.conn).flatMap {
      conn =>CloseAble(conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY))
          .flatMap {
            stmt =>CloseAble(stmt.executeQuery()).map {
                rs => f(rs)
              }
          }
    }
  }

测试

object Test {


  implicit def f1(rs: ResultSet): List[Int] = {
    val data: ListBuffer[Int] = ListBuffer()
    while (rs.next()) {
      data.append(rs.getInt("id"))
    }
    return data.toList
  }

  def main(args: Array[String]): Unit = {
    val dbHelper = RelationDbHelper()
    for (i <- 1 to 1000) {
      val data = dbHelper.queryModel[Int]("select * from etl_new_banner_store")(f1)
      println(i)
      println(data)
    }
  }
}

感谢大神[吐思圈] https://www.jianshu.com/u/a019e1b214c9
https://www.jianshu.com/p/fbd3cd650fe9

相关文章

  • scala 封装jdbc的常用操作,自动关闭数据库的连接资源

    Scala中貌似没有try-with的概念,在Java中则可以使用try-with自动释放连接资源,如:输入输出流...

  • Mybatis基础

    一 jdbc问题总结 1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率 解决:在SqlMapC...

  • JAVA总结(四)

    阐述JDBC操作数据库的步骤 加载驱动 创建连接 创建语句 执行语句 处理结果 关闭资源 Statement和Pr...

  • 简介

    什么是mybatis mybatis是对jdbc技术的封装,简化数据库操作代码。 封装以下功能:--封装了建立连接...

  • jdbc学习代码

    从基本连接==》配置文件连接==》连接后操作数据库(更改操作和查询操作)封装了 连接、关闭连接的方法

  • Mybatis

    1、原生JDBC缺点(1)数据库连接,使用时创建,不使用立即释放,对数据库进行频繁的连接开启和关闭,造成数据库资源...

  • 高级应用--JDBC(二)

    封装JDBC抽取DBUtils JDBC事务 数据库连接池讲解 7.封装JDBC抽取DBUtils 为了使得编辑参...

  • mybatis学习第一天

    1.JDBC问题总结 1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源...

  • 2019-08-25

    jdbc连接数据库,并封装成数据库工具类

  • mybatis-1

    JDBC到Mybatis的优化 1、连接获取和释放 问题:数据库连接频繁的开启和关闭本身就造成了资源的浪费,影响系...

网友评论

      本文标题:scala 封装jdbc的常用操作,自动关闭数据库的连接资源

      本文链接:https://www.haomeiwen.com/subject/tmabmftx.html