使用JDBC访问MySql的一个公共方法的解决方案

Mysql  /  houtizong 发布于 3年前   212

本来项目都是用到例如Hibernate这些工具的,可是因为现在项目要求现在又丫的回到基于JDK的解决方案了。

这个方法很简单,但是对于数据的连接使用连接池,连接池也是直接初始化的。

package com;import java.sql.*;import java.util.*;import org.apache.commons.dbcp.BasicDataSource;/** * @说明 数据库连接管理 * @author cuisuqiang */public class ConnectionManager {/** * @说明 执行一条SQL */@SuppressWarnings("unchecked")public static List<Object[]> excuteQuery(String sql) {Connection conn = null;PreparedStatement psta = null;ResultSet resultSet = null;List<Object[]> relist = new ArrayList<Object[]>(); // 总数据Object[] objects = null; // 每行数据try {conn = ConnectionManager.getConn(); // 得到链接if(null != conn){psta = conn.prepareStatement(sql);resultSet = psta.executeQuery(); // 执行查询,返回结果接集合int count = resultSet.getMetaData().getColumnCount(); // 一共有多少列数据// 循环行while (resultSet.next()) {objects = new Object[count];// 数据集索引从 1 开始,而数组存放时是从 0 开始for (int i = 1; i <= count; i++) {objects[i - 1] = resultSet.getObject(i);}relist.add(objects);}}} catch (Exception e) {e.printStackTrace();relist = null;} finally {try {if(null != resultSet)resultSet.close();if(null != psta)psta.close();if(null != conn)conn.close();} catch (Exception e2) {}}return relist;}private static org.apache.commons.dbcp.BasicDataSource ds = null;static {ds = new BasicDataSource(); // 组建数据源对象int initialSize = 1; // 连接池启动时的初始值int maxActive = 10;  // 连接池的最大值int maxIdle = 1;     // 最大空闲值int minIdle = 1;     // 最小空闲值ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://192.168.154.128:3306/t2?useUnicode=true&characterEncoding=gbk");ds.setUsername("root");ds.setPassword("123456");ds.setInitialSize(initialSize);ds.setMaxActive(maxActive);ds.setMaxIdle(maxIdle);ds.setMinIdle(minIdle);}/** * 从数据源中取得数据库连接 */public static Connection getConn() {try {return ds.getConnection();} catch (SQLException e) {e.printStackTrace();}return null;}}

 

我使用的是BasicDataSource,你可能需要两个Jar包,commons-pool.jar,commons-dbcp.jar,连接mysql的话需要mysql-connector-java-3.1.13-bin.jar。

写一个mian方法直接测试:

package com;import java.util.List;public class T {@SuppressWarnings("unchecked")public static void main(String[] args) {try {List<Object[]> list = ConnectionManager.excuteQuery("select * from t");for (int i = 0; i < list.size(); i++) {Object[] os = list.get(i);for(Object o : os){if (o instanceof String) {String s = (String) o;String newStr = new String(s.getBytes("ISO-8859-1"),"GBK");System.out.print("字符串:" + newStr + "\t\t");}else if(o instanceof Long){Long s = (Long) o;System.out.print("浮点值:" + s + "\t\t");}else if(o instanceof Integer){Integer s = (Integer) o;System.out.print("整形值:" + s + "\t\t");}else{System.out.print("未知型:" + o + "\t\t");}}System.out.println();}} catch (Exception e) {e.printStackTrace();}}}

我返回的是一个List集合,里面包含了一个Object数组。调用者在收到这个返回集合后可以根据实际情况进行解析,公共方法只是执行SQL,然后得到数据连接进行数据访问。

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客