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;
            }
        }

    }
}
全部评论

相关推荐

03-31 17:40
已编辑
门头沟学院 算法工程师
程序员牛肉:小牛肉来也! 也不要焦虑啦,你第一志愿还没有结束,只是回到人才库(泡大池子等待各个部门挑选)而已。仅仅代表你不符合这个组的用人标准,并不能够说明你在本次暑期实习中没机会加入美团了。 还是平复好心态,不断的复盘,等待下一次面试就好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务