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

开发 后端
JDBC访问MySQL的一个公共方法的解决方案,作者用了一个main方法直接测试,调用者在收到这个返回集合后可以根据实际情况进行解析,公共方法只是执行SQL,然后得到数据连接进行数据访问。

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

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

  1. package com;  
  2. import java.sql.*;  
  3. import java.util.*;  
  4. import org.apache.commons.dbcp.BasicDataSource;  
  5. /**  
  6.  * @说明 数据库连接管理  
  7.  * @author cuisuqiang  
  8.  */ 
  9. public class ConnectionManager {  
  10.     /**  
  11.      * @说明 执行一条SQL  
  12.      */ 
  13.     @SuppressWarnings("unchecked")  
  14.     public static List<Object[]> excuteQuery(String sql) {  
  15.         Connection conn = null;  
  16.         PreparedStatement psta = null;  
  17.         ResultSet resultSet = null;  
  18.         List<Object[]> relist = new ArrayList<Object[]>(); // 总数据  
  19.         Object[] objects = null// 每行数据  
  20.         try {  
  21.             conn = ConnectionManager.getConn(); // 得到链接  
  22.             if(null != conn){  
  23.                 psta = conn.prepareStatement(sql);  
  24.                 resultSet = psta.executeQuery(); // 执行查询,返回结果接集合  
  25.                 int count = resultSet.getMetaData().getColumnCount(); // 一共有多少列数据  
  26.                 // 循环行  
  27.                 while (resultSet.next()) {  
  28.                     objects = new Object[count];  
  29.                     // 数据集索引从 1 开始,而数组存放时是从 0 开始  
  30.                     for (int i = 1; i <= count; i++) {  
  31.                         objects[i - 1] = resultSet.getObject(i);  
  32.                     }  
  33.                     relist.add(objects);  
  34.                 }  
  35.             }  
  36.         } catch (Exception e) {  
  37.             e.printStackTrace();  
  38.             relist = null;  
  39.         } finally {  
  40.             try {  
  41.                 if(null != resultSet)  
  42.                     resultSet.close();  
  43.                 if(null != psta)  
  44.                     psta.close();  
  45.                 if(null != conn)  
  46.                     conn.close();  
  47.             } catch (Exception e2) {  
  48.                   
  49.             }  
  50.         }  
  51.         return relist;  
  52.     }  
  53.     private static org.apache.commons.dbcp.BasicDataSource ds = null;  
  54.     static {  
  55.         ds = new BasicDataSource(); // 组建数据源对象  
  56.         int initialSize = 1// 连接池启动时的初始值  
  57.         int maxActive = 10;  // 连接池的最大值  
  58.         int maxIdle = 1;     // 最大空闲值  
  59.         int minIdle = 1;     // 最小空闲值  
  60.         ds.setDriverClassName("com.mysql.jdbc.Driver");  
  61.         ds.setUrl("jdbc:mysql://192.168.154.128:3306/t2?useUnicode=true&characterEncoding=gbk");  
  62.         ds.setUsername("root");  
  63.         ds.setPassword("123456");  
  64.         ds.setInitialSize(initialSize);  
  65.         ds.setMaxActive(maxActive);  
  66.         ds.setMaxIdle(maxIdle);  
  67.         ds.setMinIdle(minIdle);  
  68.     }  
  69.     /**  
  70.      * 从数据源中取得数据库连接  
  71.      */ 
  72.     public static Connection getConn() {  
  73.         try {  
  74.             return ds.getConnection();  
  75.         } catch (SQLException e) {  
  76.             e.printStackTrace();  
  77.         }  
  78.         return null;  
  79.     }  
  80. }  

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

写一个mian方法直接测试:

  1. package com;  
  2. import java.util.List;  
  3. public class T {  
  4.     @SuppressWarnings("unchecked")  
  5.     public static void main(String[] args) {  
  6.         try {  
  7.             List<Object[]> list = ConnectionManager.excuteQuery("select * from t");  
  8.             for (int i = 0; i < list.size(); i++) {  
  9.                 Object[] os = list.get(i);  
  10.                 for(Object o : os){  
  11.                     if (o instanceof String) {  
  12.                         String s = (String) o;  
  13.                         String newStr = new String(s.getBytes("ISO-8859-1"),"GBK");  
  14.                         System.out.print("字符串:" + newStr + "\t\t");  
  15.                     }else if(o instanceof Long){  
  16.                         Long s = (Long) o;  
  17.                         System.out.print("浮点值:" + s + "\t\t");  
  18.                     }else if(o instanceof Integer){  
  19.                         Integer s = (Integer) o;  
  20.                         System.out.print("整形值:" + s + "\t\t");  
  21.                     }else{  
  22.                         System.out.print("未知型:" + o + "\t\t");  
  23.                     }  
  24.                 }  
  25.                 System.out.println();  
  26.             }  
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.         }         
  30.     }  

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

原文链接:http://cuisuqiang.iteye.com/blog/1458557

【编辑推荐】

  1. Java通过SSH2协议运行远程程序
  2. Java Bean属性命名规范问题分析
  3. Java Socket编程:初识TCP Socket
  4. Java Socket编程:如何识别网络主机
  5. Java Socket编程:基本的术语和概念
责任编辑:林师授 来源: cuisuqiang的博客
相关推荐

2009-03-17 09:27:52

ITSMITIL解决方案

2023-09-21 23:08:36

MySQL数据库死锁

2009-08-04 15:18:11

C# Actor

2023-02-10 15:41:50

物联网物联网平台

2009-07-28 11:37:55

7类布线端口

2019-07-08 10:01:33

物联网IOT技术

2010-11-30 16:50:42

2011-08-05 13:41:18

mysql数据库数据库配置

2018-11-05 11:06:38

openmediavaNAS 方案

2020-08-10 08:30:23

开发软件开源

2013-08-26 09:18:52

2021-04-11 09:00:13

Fes.js前端

2018-03-14 19:39:31

数据库Oracle临时表

2010-05-17 09:49:46

MySQL中文问题

2012-09-06 11:25:46

IBMdw

2023-03-29 10:48:28

2010-05-28 19:39:28

MySQL 编码转换

2010-05-28 13:04:04

MySQL root

2011-07-25 09:32:28

2020-09-09 13:05:21

区块链技术智能
点赞
收藏

51CTO技术栈公众号