一起艳恶学习打造一个通用的JDBC

news/2024/5/19 0:21:08 标签: 数据库, jdbc, arraylist, 泛型, mybatis

前言:jdbc写的繁琐,mybatis要映射,hiberante配置太烦,好吧,就简单写个增删改查的jdbcUtil,以供学习,可以学到类的加载顺序,ResourceBundle加载资源文件,数据库三大核心接口,类的反射,泛型(特别是泛型方法),可变形参的使用,以及集合中的List,ArrayList等。当然还有很多不足,比如每次程序拿连接都要new,这样就给系统加大了负担,没有事务,没有dataSource等等,望大神补充。。。

util类的代码如下:

package com.yanhui.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;


/**
 * 数据库连接
 * @author colorbin
 *
 */
public class _jdbcUtil {
    private static String url = null;
    private static String user = null;
    private static String password = null;
    private static Connection conn;

    public static void main(String[] args) throws Exception {
        System.out.println(getConnection());
    }

    private _jdbcUtil(){}

    static {
        try{
            ResourceBundle res = ResourceBundle.getBundle("config");  
            Class.forName(res.getString("driverName"));
            url = res.getString("url");
            user = res.getString("user");
            password = res.getString("password");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        if(null == conn) {
            try {
                conn = DriverManager.getConnection(url, user, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return conn;
    }

    public static void closeResource(ResultSet rs, Statement st, Connection conn){
        if(null != rs) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                if(null != st) {
                    try {
                        st.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                        throw new RuntimeException(e);
                    } finally {
                        if(null != conn) {
                            try {
                                conn.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                                throw new RuntimeException(e);
                            }
                        }
                    }
                }
            }
        }
    }



    /**
     * 从数据库取得一个
     *
     * @param sql 执行的sql语句
     * @param row 对象赋值方法
     * @param params 填充sql中的?
     * @return
     */
    public static Object getOne(String sql, RowMapper row, Object... params){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        Object obj = null;
        try {
            conn = _jdbcUtil.getConnection();
            ps = conn.prepareStatement(sql);
            if(params != null){
                for (int i = 1; i <= params.length; i++) {
                    ps.setObject(i, params[i - 1]);
                }
            }
            rs = ps.executeQuery();
            if (rs.next()) {
                obj = row.mapRow(rs);
            }
            return obj;
        } catch (SQLException e) {
            throw new RuntimeException(e.getMessage(), e);
        } finally {
            _jdbcUtil.closeResource(rs, ps, conn);
        }
    }



    /**
     * 取出所有sql语句查询的结果
     *
     * @param sql sql语句
     * @param row 对象赋值方法
     * @param params 用来填充sql中的?
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> List<T> getSome(String sql, RowMapper row, Object... params){
        List<T> arrays = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        T obj = null;
        try {
            conn = _jdbcUtil.getConnection();
            ps = conn.prepareStatement(sql);
            if(params != null){
                for (int i = 1; i <= params.length; i++) {
                    ps.setObject(i, params[i - 1]);
                }
            }
            rs = ps.executeQuery();
            arrays = new ArrayList<T>();
            while (rs.next()) {
                obj = (T) row.mapRow(rs);
                arrays.add(obj);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e.getMessage(), e);
        } finally {
            _jdbcUtil.closeResource(rs, ps, conn);
        }
        return arrays;
    }


    /**
     * 执行更新操作
     * @param sql 执行的sql语句
     * @param params 用来填充sql语句中的?(若没有参数需要给null)
     */
    public static void update(String sql, Object... params){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = _jdbcUtil.getConnection();
            conn.setAutoCommit(false);
            ps = conn.prepareStatement(sql);
            if(params != null){
                for (int i = 1; i <= params.length; i++) {
                    ps.setObject(i, params[i - 1]);
                }
            }
            ps.executeUpdate();
            conn.commit();
        } catch (SQLException e) {
            try {
                conn.rollback();
            } catch (SQLException e1) {
                throw new RuntimeException(e1.getMessage(), e1);
            }
            throw new RuntimeException(e.getMessage(), e);
        } finally {
            _jdbcUtil.closeResource(rs, ps, conn);
        }
    }



}

源码下载地址:
链接:http://pan.baidu.com/s/1hrGyJkC 密码:yrma

别怕太快乐,别怕失去jdbc~~ 如果jdbc说用我没有如果 错过就过你是不是会难过 ~~

全CSDN的丰(好)色(se)博客,这里有书本看不到的Java技术,电影院禁播的电影,欢迎关注QQ群494808400


http://www.niftyadmin.cn/n/785652.html

相关文章

大数据零基础如何入门学习

我们学习一个新知识&#xff0c;第一步应该是给它个明确的定义。这样才能知道你学的是什么&#xff0c;哪些该学&#xff0c;哪些又可以先不用管。   然而&#xff0c;大数据虽然很火&#xff0c;但其实是个概念没那么清晰的东西&#xff0c;不同的人可能有不同的理解。   …

nodejs设置允许跨域

//设置服务器跨域权限app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header("Access-Control-Allow-M…

java实现爬虫改变人生!

写代码让你怀疑人生&#xff0c;那爬虫定会改变你人生&#xff0c;爬取你需要的torrent&#xff0c;当然高级点的网站都反爬虫。 下面就爬取一下电影的网站 http://www.xunleigang.net/html/aiqing/ 1、Elements linksdoc.select(".bcr_box dl");2、Elements link…

JSON 序列化

/// <summary>/// 将对象序列化为JSON格式/// </summary>/// <param name"o">对象</param>/// <returns>json字符串</returns>public static string SerializeObject(object o){string json JsonConvert.SerializeObject(o);re…

大数据架构五个顶级框架你知道几个

自从像AWS这样的公共云产品开辟了大数据分析功能以来&#xff0c;小企业通过挖掘大量的数据做到只有大企业才能做到的事情&#xff0c;至今大约有10年时间。这些事情其中包括网络日志、客户购买记录等&#xff0c;并通过按使需付费的方式提供低成本的商品集群。在这十年中&…

jxls实现多sheet的报表导出

大家都说软件工程就是吹水&#xff0c;水越高工程越大。项目越大&#xff0c;要写的文档就越多&#xff0c;特别是excel报表之类&#xff0c;然后就想定义一个excel模板&#xff0c;像写jsp那样&#xff0c;往里面传数据就可以&#xff0c;现在jxls完全可以轻松搞定&#xff0c…

Java反射理解

什么是Java反射机制 JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法&#xff1b;这种动态获取的以及动态调用对象的方法的功能称为Java的反射机制。 …

大数据入门选择python大数据么?现在程序员都是喜欢这个

Python是适合做大数据分析的计算机语言吗?如今是一个大数据时代&#xff0c;通过数据分析&#xff0c;我们可以得到任何我们想知道的事情&#xff0c;充分挖掘数据的价值。之前有人说过JAVA语言是最适合做数据分析的计算机编程语言之一&#xff0c;在这里&#xff0c;我想说其…