scala数据库工具类
scala的数据库连接池,基于mysql
import java.util.concurrent.ConcurrentHashMap
import com.jolbox.bonecp.{ BoneCPConfig, BoneCP }
import java.util.ResourceBundle
import java.util.LinkedList
import java.sql.DriverManager
import java.sql.Connection /**
* 数据库连接池工具类
* 语言:scala
* 时间:2016-07-09
*/
object DBConnectionPool {
private val reader = ResourceBundle.getBundle("connection")
private val max_connection = reader.getString("jeecg.max_connection") //连接池总数
private val connection_num = reader.getString("jeecg.connection_num") //产生连接数
private var current_num = 0 //当前连接池已产生的连接数
private val pools = new LinkedList[Connection]() //连接池
private val driver = reader.getString("jeecg.driver")
private val url = reader.getString("jeecg.url")
private val username = reader.getString("jeecg.username")
private val password = reader.getString("jeecg.password")
/**
* 加载驱动
*/
private def before() {
if (current_num > max_connection.toInt && pools.isEmpty()) {
print("busyness")
Thread.sleep(2000)
before()
} else {
Class.forName(driver)
}
}
/**
* 获得连接
*/
private def initConn(): Connection = {
val conn = DriverManager.getConnection(url, username, password)
conn
}
/**
* 初始化连接池
*/
private def initConnectionPool(): LinkedList[Connection] = {
AnyRef.synchronized({
if (pools.isEmpty()) {
before()
for (i <- 1 to connection_num.toInt) {
pools.push(initConn())
current_num += 1
}
}
pools
})
}
/**
* 获得连接
*/
def getConn():Connection={
initConnectionPool()
pools.poll()
}
/**
* 释放连接
*/
def releaseCon(con:Connection){
pools.push(con)
} }
配置文件
#数据库连接池配置文件
jeecg.driver=org.gjt.mm.mysql.Driver
jeecg.url=jdbc\:mysql\://0.0.0.0\:3306/jeecg?useUnicode=true&characterEncoding=utf-8
jeecg.username=root
jeecg.password=****
jeecg.max_connection=8
jeecg.connection_num=10
dao类
import java.sql.ResultSet
import java.sql.PreparedStatement
import java.sql.Connection
import java.sql.Statement
/**
* 数据操作工具类
* 语言:scala
* 时间:2016-07-09
*/
private[org] abstract class BaseDao[T](conn: Connection) {
/**
* 插入数据
* @param sql SQL语句
* @param params 参数列表
* @param convert 主键转换方法
* @return 转换结果
*/
protected def insert[T](sql: String, params: Array[Any])(convert: ResultSet => T) = {
val pstmt = conn prepareStatement (sql, Statement.RETURN_GENERATED_KEYS)
setParameters(pstmt, params)
pstmt.executeUpdate
val rs = pstmt.getGeneratedKeys
rs.next
convert(rs)
} /**
* 更新数据
* @param sql SQL语句
* @param params 参数列表
* @return 影响行数
*/
protected def update(sql: String, params: Array[Any]) = createStatement(sql, params).executeUpdate /**
* 查询对象
* @param sql SQL语句
* @param params 参数列表
* @param convert 结果集转换方法
* @return 泛型对象
*/
protected def queryForObject[T](sql: String, params: Array[Any])(convert: ResultSet => T) = {
val rs = query(sql, params)
if (rs.next) {
val result = convert(rs)
if (rs.next) {
val ex = new ResultsTooManyException
throw ex
} else Some(result)
} else None
} /**
* 查询对象列表
* @param sql SQL语句
* @param params 参数列表
* @param convert 结果集转换方法
* @return 泛型对象列表
*/
protected def queryForList[T](sql: String, params: Array[Any])(convert: ResultSet => T) = {
val rs = query(sql, params)
var results = List[T]()
while (rs.next) { results = results :+ convert(rs) }
results
} /**
* 查询对象映射
* @param sql SQL语句
* @param params 参数列表
* @param convert 结果集转换方法
* @return 泛型对象映射
*/
protected def queryForMap[K, V](sql: String, params: Array[Any])(convert: ResultSet => (K, V)) = {
val rs = query(sql, params)
var results = Map[K, V]()
while (rs.next) { results += convert(rs) }
results
} /**
* 查询
* @param sql SQL语句
* @param params 参数列表
*/
private def query(sql: String, params: Array[Any]) = createStatement(sql, params).executeQuery /**
* 创建声明
* @param sql SQL语句
* @param params 参数列表
*/
private def createStatement(sql: String, params: Array[Any]) = {
val pstmt = conn prepareStatement sql
setParameters(pstmt, params)
pstmt
} /**
* 插入参数
* @param pstmt 预编译声明
* @param params 参数列表
*/
private def setParameters(pstmt: PreparedStatement, params: Array[Any]) {
for (i <- 1 to params.length) { pstmt setObject (i, params(i - 1)) }
} } /**
* 结果值读取器
*/
object ResultValueGetter { /**
* 查询结果值
* @param rs 结果集
* @param getResult 获得单个值结果的方法
* @return 值
*/
def getResultValue[T](rs: ResultSet)(getResult: ResultSet => T) = {
val result = getResult(rs)
if (rs.wasNull) None else Some(result)
} /**
* 获得字符串结果的值
* @param rs 结果集
* @param colNum 列号
*/
def getStringValue(rs: ResultSet, colNum: Int) = getResultValue(rs) { _ getString colNum } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colNum 列号
*/
def getIntValue(rs: ResultSet, colNum: Int) = getResultValue(rs) { _ getInt colNum } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colNum 列号
*/
def getLongValue(rs: ResultSet, colNum: Int) = getResultValue(rs) { _ getLong colNum } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colNum 列号
*/
def getDoubleValue(rs: ResultSet, colNum: Int) = getResultValue(rs) { _ getDouble colNum } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colNum 列号
*/
def getBooleanValue(rs: ResultSet, colNum: Int) = getResultValue(rs) { _ getBoolean colNum } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colNum 列号
*/
def getTimestampValue(rs: ResultSet, colNum: Int) = getResultValue(rs) { _ getTimestamp colNum } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colName 列名
*/
def getStringValue(rs: ResultSet, colName: String) = getResultValue(rs) { _ getString colName } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colName 列名
*/
def getIntValue(rs: ResultSet, colName: String) = getResultValue(rs) { _ getInt colName } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colName 列名
*/
def getLongValue(rs: ResultSet, colName: String) = getResultValue(rs) { _ getLong colName } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colName 列名
*/
def getDoubleValue(rs: ResultSet, colName: String) = getResultValue(rs) { _ getDouble colName } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colName 列名
*/
def getBooleanValue(rs: ResultSet, colName: String) = getResultValue(rs) { _ getBoolean colName } /**
* 获得字符串结果的值
* @param rs 结果集
* @param colName 列名
*/
def getTimestampValue(rs: ResultSet, colName: String) = getResultValue(rs) { _ getTimestamp colName } } /**
* 结果太多异常
*/
class ResultsTooManyException extends Exception("Returned too many results.") {}
scala数据库工具类的更多相关文章
- MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...
- MinerDB.java 数据库工具类
MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...
- 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类
一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...
- Python数据库工具类MySQLdb使用
MySQLdb模块用于连接mysql数据库. 基本操作 # -*- coding: utf-8 -*- #mysqldb import time, MySQLdb ...
- 工具类之数据库工具类:DBUtil(採用反射机制)
常常操作数据库的码农们一定知道操作数据库是一项非常复杂的工作.它不仅要解决各种乱码的问题还要解决各种数据表的增删改查等的操作. 另外每次操作数据库都要用到数据库连接.运行SQL语句.关闭连接的操作.所 ...
- JDBC-自定义数据库工具类(DBService)
写在前面的话: (1)使用JDBC,必须要使用对应的jar包,该笔记中使用jar包:mysql-connector-java-5.1 .6-bin.jar (2)使用连接池,一定 ...
- Java课程设计---创建数据库工具类
1.传统的数据库操作 package com.java.mysql; import java.sql.Connection; import java.sql.DriverManager; import ...
- 数据库工具类 JdbcUtils
什么时候自己创建工具类 如果一个功能经常用到 我们建议把这个功能做成工具类 创建JdbcUtils包含三个方法 1: 把几个字符串 定义为常量 2:得到数据库连接getConnection(); 3 ...
- JDBC操作数据库工具类(使用阿里Druid原生API创建数据源)
1.数据库配置类 package com.zdlt.auth.api.common.druid; import java.util.Properties; import static com.alib ...
随机推荐
- win10装系统--笔记
U盘安装WIN10时显示 windows无法安装到这个磁盘 选中的磁盘采用GPT分区形式 一.原因分析 win8/win10系统均添加快速启动功能,预装的win8/win10电脑默认都是UEFI引导和 ...
- win8.1弹框
在winform或者wp8中用MessageBox.Show()弹框,但是wp8.1中已经不存在了 private async void btn_Click(object sender, Routed ...
- 【angular5项目积累总结】文件下载
download() { const token = localStorage.getItem('token'); let headers: HttpHeaders = new HttpHeaders ...
- jquery操作字符串常用方法总结及工作代码
1.javascript数组用法 方法 描述 FF IE concat() 连接两个或更多的数组,并返回结果. 1 4 join() 把数组的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. 1 ...
- c#基础学习(0629)之导出Excel方法
给予NPOI插件的方法,所以首先要下载NPOI插件:vs项目中点击“项目”==>“管理NoGet程序包”==>搜索“NPOI”然后下载==>using引入Controller代码: ...
- C#中const 和 readonly 修饰符的用法详解
1.const是不变常量,在编译的时候就需要有确定的值,只能用于数值和字符串,或者引用类型只能为null.(这里为什么要把字符串单独拿出来?是因为字符串string是引用类型,但是使用的时候却感觉是值 ...
- SQLServer数据库循环表操作每一条数据(游标的使用)
DECLARE @FunctionCode VARCHAR(20)--声明游标变量DECLARE curfuntioncode CURSOR FOR SELECT FunctionalityCode ...
- ASP.NET Core2,通过反射批量注入程序集
public void ConfigureServices(IServiceCollection services) { string strValue = Con ...
- Struts2 学习笔记--Action Method--接收参数
struts2中的路径问题 注意:在jsp中”/”表示tomcat服务器的根目录,在struts.xml配置文件中”/”表示webapp的根路径,即MyEclipse web项目中的WebRoot路径 ...
- Java Swing实战(五)表格组件JTable(1)
dbPanel面板的配置告一段落. 接下来配置taskPanel 面板. /** * @author: lishuai * @date: 2018/11/26 13:51 */ public clas ...