JDBC和数据库连接池

JDBC:
Java Database Connectivity
JDBC实际上就是用于访问各种关系型数据库的一组API。
这个API不是数据库厂商定制的,而是Java统一进行定制的,各个数据库的厂商都来支持这个API,这样的话,我们使用同样的一组API,我们就可以通过Java程序访问各个关系型数据库了。

使用JDBC的步骤:
1.加载驱动
JDBC只是一个访问数据库的标准,它本身是不能访问数据库的,我们想要访问数据库必须使用数据库厂商给我们封装好的API,也就是说给我们封装好的一些类,而这些类都封装在JDBC的驱动之中,我们想要使用,我们就需要去加载JDBC的驱动。
2.连接数据库
3.操作数据库
4.关闭数据库连接
为了方便,我们一般会创建一个DBTools


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DBTools {




    private static Connection conn = null;
    private static final String URL = "jdbc:mysql://localhost:3306/数据库名";
    private static final String USER = "root";//数据库用户名称
    private static final String PASSWORD = "root";//密码
    private static PreparedStatement pstat = null;
    private static ResultSet rs = null;
    static{
        //加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //编写一个方法获取数据库的连接对象
    public static Connection getConn(){
        if(conn==null){
            try {
                conn = DriverManager.getConnection(URL, USER, PASSWORD);
                conn.setAutoCommit(false);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return conn;
    }
    public static void execute(String sql,Object...objs){
        conn = getConn();
        try {
            pstat = conn.prepareStatement(sql);
            if(objs!=null){
                for(int i=0;i<objs.length;i++){
                    pstat.setObject(i+1, objs[i]);
                }
            }
            pstat.execute();
            commit();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            rollback();
        }

    }
    public static List<Object[]> executeQuery(String sql,Object...objs){
        List<Object[]> list = new ArrayList<Object[]>();
        conn = getConn();
        try {
            pstat = conn.prepareStatement(sql);
            if(objs!=null){
                for(int i=0;i<objs.length;i++){
                    pstat.setObject(i+1, objs[i]);
                }
            }
            rs = pstat.executeQuery();
            while(rs.next()){
                Object[] obj = new Object[rs.getMetaData().getColumnCount()];
                for(int i=0;i<obj.length;i++){
                    obj[i] = rs.getObject(i+1);
                }
                list.add(obj);
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            close();
        }
        return list;
    }
    public static void commit(){
        if(conn!=null){
            try {
                conn.commit();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                close();
            }
        }
    }
    public static void rollback(){
        if(conn!=null){
            try {
                conn.rollback();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                close();
            }
        }
    }
    public static void close(){
        if(pstat!=null){
            try {
                pstat.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                conn = null;
            }
        }

    }
}
全部评论

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
2025-12-29 20:37
已编辑
清华大学附属小学 Java
哇哇的菜鸡oc:1.为什么要写这么多内容呀 2.什么叫做简历 3.什么样的内容可以写到简历上 4.项目可以包装,但是要有理有据呀,不能乱包装呀,比如 跨境能达到日均120万订单的在国内都是能叫的上名字的,而且这些工作也基本上不太会交给一个实习生去做 建议友友可以去网上或者找同学的简历看看,他们的简历是怎么写的,去找找上面的那四个问题的答案吧,然后要记住的是Java是服务于业务的,而不是服务于微服务或者技术的
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务