Java中JDBC连接,封装版

来源:互联网 发布:手机淘宝商品历史价格 编辑:程序博客网 时间:2024/06/14 23:20

JDBC连接完美封装版:

import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 数据库连接类 说明:封装了 无参,有参,存储过程的调用 *  * @author liqing *  */public class JDBCUtil {/** * 数据库驱动类名称 */private static final String DRIVER = "com.mysql.jdbc.Driver";/** * 连接字符串 */private static final String URLSTR = "jdbc:mysql://localhost:3306/test";/** * 用户名 */private static final String USERNAME = "root";/** * 密码 */private static final String USERPASSWORD = "root";/** * 创建数据库连接对象 */private Connection connnection = null;/** * 创建PreparedStatement对象 */private PreparedStatement preparedStatement = null;/** * 创建CallableStatement对象 */private CallableStatement callableStatement = null;/** * 创建结果集对象 */private ResultSet resultSet = null;static {try {// 加载数据库驱动程序Class.forName(DRIVER);} catch (ClassNotFoundException e) {System.out.println("加载驱动错误");System.out.println(e.getMessage());}}/** * 建立数据库连接 *  * @return 数据库连接 */public Connection getConnection() {try {// 获取连接connnection = DriverManager.getConnection(URLSTR, USERNAME, USERPASSWORD);} catch (SQLException e) {System.out.println(e.getMessage());}return connnection;}/** * insert update delete SQL语句的执行的统一方法 *  * @param sql *            SQL语句 * @param params *            参数数组,若没有参数则为null * @return 受影响的行数 */public int executeUpdate(String sql, Object... params) {// 受影响的行数int affectedLine = 0;try {// 获得连接connnection = this.getConnection();// 调用SQLpreparedStatement = connnection.prepareStatement(sql);// 参数赋值if (params != null) {for (int i = 0; i < params.length; i++) {preparedStatement.setObject(i + 1, params[i]);}}// 执行affectedLine = preparedStatement.executeUpdate();} catch (SQLException e) {System.out.println(e.getMessage());} finally {// 释放资源closeAll();}return affectedLine;}/** * SQL 查询将查询结果直接放入ResultSet中 *  * @param sql *            SQL语句 * @param params *            参数数组,若没有参数则为null * @return 结果集 */private ResultSet executeQueryRS(String sql, Object... params) {try {// 获得连接connnection = this.getConnection();// 调用SQLpreparedStatement = connnection.prepareStatement(sql);// 参数赋值if (params != null) {for (int i = 0; i < params.length; i++) {preparedStatement.setObject(i + 1, params[i]);}}// 执行resultSet = preparedStatement.executeQuery();} catch (SQLException e) {System.out.println(e.getMessage());}return resultSet;}/** * SQL 查询将查询结果:一行一列 *  * @param sql *            SQL语句 * @param params *            参数数组,若没有参数则为null * @return 结果集 */public Object executeQuerySingle(String sql, Object... params) {Object object = null;try {// 获得连接connnection = this.getConnection();// 调用SQLpreparedStatement = connnection.prepareStatement(sql);// 参数赋值if (params != null) {for (int i = 0; i < params.length; i++) {preparedStatement.setObject(i + 1, params[i]);}}// 执行resultSet = preparedStatement.executeQuery();if (resultSet.next()) {object = resultSet.getObject(1);}} catch (SQLException e) {System.out.println(e.getMessage());} finally {closeAll();}return object;}/** * 获取结果集,并将结果放在List中 *  * @param sql *            SQL语句 * @return List 结果集 */public List<Object> excuteQuery(String sql, Object... params) {// 执行SQL获得结果集ResultSet rs = executeQueryRS(sql, params);// 创建ResultSetMetaData对象ResultSetMetaData rsmd = null;// 结果集列数int columnCount = 0;try {rsmd = rs.getMetaData();// 获得结果集列数columnCount = rsmd.getColumnCount();} catch (SQLException e1) {System.out.println(e1.getMessage());}// 创建ListList<Object> list = new ArrayList<Object>();try {// 将ResultSet的结果保存到List中while (rs.next()) {Map<String, Object> map = new HashMap<String, Object>();for (int i = 1; i <= columnCount; i++) {map.put(rsmd.getColumnLabel(i), rs.getObject(i));}list.add(map);}} catch (SQLException e) {System.out.println(e.getMessage());} finally {// 关闭所有资源closeAll();}return list;}/** * 存储过程带有一个输出参数的方法 *  * @param sql *            存储过程语句 * @param params *            参数数组 * @param outParamPos *            输出参数位置 * @param SqlType *            输出参数类型 * @return 输出参数的值 */public Object excuteQuery(String sql, int outParamPos, int SqlType, Object... params) {Object object = null;connnection = this.getConnection();try {// 调用存储过程callableStatement = connnection.prepareCall(sql);// 给参数赋值if (params != null) {for (int i = 0; i < params.length; i++) {callableStatement.setObject(i + 1, params[i]);}}// 注册输出参数callableStatement.registerOutParameter(outParamPos, SqlType);// 执行callableStatement.execute();// 得到输出参数object = callableStatement.getObject(outParamPos);} catch (SQLException e) {System.out.println(e.getMessage());} finally {// 释放资源closeAll();}return object;}/** * 关闭所有资源 */private void closeAll() {// 关闭结果集对象if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {System.out.println(e.getMessage());}}// 关闭PreparedStatement对象if (preparedStatement != null) {try {preparedStatement.close();} catch (SQLException e) {System.out.println(e.getMessage());}}// 关闭CallableStatement 对象if (callableStatement != null) {try {callableStatement.close();} catch (SQLException e) {System.out.println(e.getMessage());}}// 关闭Connection 对象if (connnection != null) {try {connnection.close();} catch (SQLException e) {System.out.println(e.getMessage());}}}}


0 0
原创粉丝点击