package utils;

import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties; import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties; /**
* edit by lxj 2016-10-19
* 采用tomcat7的最新数据库连接池技术进行处理参考以下网址
* https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Introduction
* 需要引入tomcat-juli.jar和tomcat-jdbc.jar两个包
* @author Administrator
*
*/
public class MySqlHelper {
private static DataSource datasource;
public MySqlHelper()
{
if(datasource==null)
{
Properties pro=new Properties();
try {
pro.load(this.getClass().getResourceAsStream("/dbinfo.properties"));
} catch (IOException e) {
e.printStackTrace();
}
String jdbcDriver=pro.getProperty("driver");
String dbUrl=pro.getProperty("url");
String dbUsername=pro.getProperty("userName");
String dbPassword=pro.getProperty("password");
PoolProperties p = new PoolProperties();
p.setUrl(dbUrl);
p.setDriverClassName(jdbcDriver);
p.setUsername(dbUsername);
p.setPassword(dbPassword);
p.setJmxEnabled(true);
p.setTestWhileIdle(false);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1");
p.setTestOnReturn(false);
p.setValidationInterval(30000);
p.setTimeBetweenEvictionRunsMillis(30000);
p.setMaxActive(100);
p.setInitialSize(3);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(60);
p.setMinEvictableIdleTimeMillis(30000);
p.setMinIdle(10);
p.setLogAbandoned(true);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors(
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
"org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
datasource = new DataSource();
datasource.setPoolProperties(p);
}
}
/**
* 查询
* @param sql
* @param lo
* @return
*/
public List<Map<String, Object>> search(String sql, Object[] lo) {
List<Map<String, Object>> lm = new ArrayList<Map<String, Object>>();
Connection con = null;
PreparedStatement ps =null;
ResultSet rs=null;
try {
con = datasource.getConnection();
ps = con.prepareStatement(sql);
if (lo != null) {
for (int i = 1; i <= lo.length; i++) {
ps.setObject(i, lo[i - 1]);
}
}
rs = ps.executeQuery();
ResultSetMetaData rm = rs.getMetaData();
int cont = rm.getColumnCount();
while (rs.next()) {
Map<String, Object> mp = new HashMap<String, Object>();
for (int c = 1; c <= cont; c++) {
Object o = rs.getObject(c);
mp.put(rm.getColumnName(c), o == null ? "" : o);
}
lm.add(mp);
}
} catch (SQLException e) {
e.printStackTrace();
}
finally {
if (rs!=null) try {rs.close();}catch (Exception ex) {}
if (ps!=null) try {ps.close();}catch (Exception ex) {}
if (con!=null) try {con.close();}catch (Exception ex) {}
}
return lm;
} /**
* 保存和修改和删除
* @param sql
* @param lo
* @return
*/
public int saveorupdate(String sql, Object[] lo) {
int p = 0;
Connection con = null;
PreparedStatement ps =null;
try {
con = datasource.getConnection();
ps = con.prepareStatement(sql);
if (lo != null) {
for (int i = 1; i <= lo.length; i++) {
ps.setObject(i, lo[i - 1]);
}
}
p = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
if (ps!=null) try {ps.close();}catch (Exception ex) {}
if (con!=null) try {con.close();}catch (Exception ex) {}
}
return p;
} /**
* 获取分页数据
* @param sqlmodel 查询模型
* @return
*/
public static List<Map<String, Object>> GetPageList(Model.Sql_PageList sqlmodel) {
List<Map<String, Object>> lm = new ArrayList<Map<String, Object>>();
Connection con = null;
ResultSet rs = null;
CallableStatement Callstmt=null;
try {
con = datasource.getConnection();
Callstmt = con.prepareCall("{call PageList(?,?,?,?,?,?,?,?)}");
Callstmt.setString("_fields", sqlmodel.getStrFieldShow());
Callstmt.setString("_tables", sqlmodel.getStrTableName());
Callstmt.setString("_where", sqlmodel.getStrWhere());
Callstmt.setString("_orderby", sqlmodel.getStrFieldOrder());
Callstmt.setInt("_pageindex", sqlmodel.getPageCurrent());
Callstmt.setInt("_pagesize", sqlmodel.getPageSize());
Callstmt.registerOutParameter("_totalcount",java.sql.Types.INTEGER);
Callstmt.registerOutParameter("_pagecount",java.sql.Types.INTEGER);
Callstmt.executeQuery();
rs = Callstmt.executeQuery();
int totalcount = Callstmt.getInt("_totalcount");
int pagecount = Callstmt.getInt("_pagecount"); sqlmodel.setInfoCount(totalcount);
sqlmodel.setPageCount(pagecount);
ResultSetMetaData rm = rs.getMetaData();
int cont = rm.getColumnCount();
while (rs.next()) {
Map<String, Object> mp = new HashMap<String, Object>();
for (int c = 1; c <= cont; c++) {
Object o = rs.getObject(c);
mp.put(rm.getColumnName(c), o == null ? "" : o);
}
lm.add(mp);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs!=null) try {rs.close();}catch (Exception ex) {}
if (Callstmt!=null) try {Callstmt.close();}catch (Exception ex) {}
if (con!=null) try {con.close();}catch (Exception ex) {}
}
return lm;
}
}

MySqlHelper的更多相关文章

  1. Net连接mysql的公共Helper类MySqlHelper.cs带MySql.Data.dll下载

    MySqlHelper.cs代码如下: using System; using System.Collections.Generic; using System.Linq; using System. ...

  2. MySqlHelper、CacheHelper

    MySqlHelper代码: using System; using System.Collections; using System.Collections.Generic; using Syste ...

  3. MysqlHelper 需要重写

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;u ...

  4. PHP简单封装MysqlHelper类

    MysqlHelper.class.php 1: <?php 2:  3: /** 4: * Mysql数据帮助类 5: */ 6: class MysqlHelper 7: { 8: func ...

  5. C# MySqlHelper

    1.MySql官方提供ADO.NET访问模式的MySql.Data.dll,下载地址:http://dev.mysql.com/downloads/connector/net/ 2.MySqlHelp ...

  6. 在.NET连接MySQL以及封装好的MySQLHelper.cs

    1.首先上MySQL网站下驱动:http://www.mysql.com/products/connector/ 2.安装下载的安装包 3.我们在Visual Studio里创建一个Web Appli ...

  7. MysqlHelper类

    连接方式:server=localhost;port=3306;userid=root;password=123456789;database=mysql;persist security info= ...

  8. 简洁的MysqlHelper

    把MySqlXXX的类更改为SqlXXX就可以成为sqlHelper. 另外C#也提供了MysqlHelper和sqlHelper,用起来也挺方便的. public class MySqlHelper ...

  9. Python学习笔记10-Python MysqlHelper ,MySql 辅助类

    自己写了一个MySql辅助类,有需要的拿走: #--encoding:utf-8-- # import MySQLdb class MySQLHelper: myVersion=0.1 def __i ...

随机推荐

  1. jquery仿淘宝规格颜色选择效果

    jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...

  2. Linux_10------Linux之shell编程------变量

    .-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...

  3. 阿里中间件——diamond

    一.前言 最近工作不忙闲来无事,仔细分析了公司整个项目架构,发现用到了很多阿里巴巴集团开源的框架,今天要介绍的是中间件diamond. 二.diamond学习笔记 1.diamond简介 diamon ...

  4. Jenkins+Jmeter+Ant接口持续集成

    修改时间 修改内容 修改人 2016.5.22 创建 刘永志 2016.6.15 完成 刘永志 前言: 为什么要用Jmeter做接口测试: 当选择这套方案的时候,很多人会问,为什么选择Jmeter做C ...

  5. linux 学习7 用户管理相关文件 r

    7.1.用户配置文件 7.2.用户管理相关文件 7.3.用户管理命令 7.4.用户组管理命令 删除用户userdel [root@localhost ~]# userdel [-r] 用户名 //一定 ...

  6. Linux文件查找

    Linux下查找文件的命令有两个; locate: find : locate这个命令对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了查 找文件速度很快,但是locate ...

  7. 【英语魔法俱乐部——读书笔记】 2 中级句型-复句&合句(Complex Sentences、Compound Sentences)

    [英语魔法俱乐部——读书笔记] 2 中级句型-复句&合句(Complex Sentences.Compound Sentences):(2.1)名词从句.(2.2)副词从句.(2.3)关系从句 ...

  8. 使用 Entity Framework Core 时,通过代码自动 Migration

    一 介绍 在使用 Entity Framework Core (下面就叫 EF Core 吧)进行开发时,如果模型有变动,我们要在用 EF Core 提供的命令行工具进行手工迁移,然后再运行程序.但是 ...

  9. jdk的内存设置

    堆(Heap)和非堆(Non-heap)内存按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.在JV ...

  10. python Day01

    Python Day01 Python 简介 介绍 Python 是一种面向对象.直译式的计算机程序设计语言,也是一种功能强大的通用型语言,已经有将近二十年的发展历史,成熟稳定.包含了一组完善而且容易 ...