为什么服务和dao的JDBC连接是一样的?

时间:2018-06-06 13:32:15

标签: java jdbc

只是一个简单的MVC演示。

  1. 在Service类中,有一个

    JDBCutil db=new JDBCutil();
    db.beginTransation();
    UserinfoDao dao=new UserinfoDao();
    
  2. 在UserinfoDao课程中,还有一个

    JDBCutil db=new JDBCutil();
    
  3. 我认为有两个new JDBCutil,但实际上只存在一个连接。

    为什么呢?因为db.beginTransation();?为什么?

    我很抱歉这是我的错,不发布JDBCutil(感谢提及评论),它可能是“静态连接”(看起来像Singleton)一个连接,虽然有两个新的。代码

    private static Connection conn=null;
    private PreparedStatement pst;
    //获取Connection连接
    public Connection getConnection(){
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            System.out.println("加载Oracle驱动成功");
            String url="jdbc:oracle:thin:@10.25.39.252:1521:orcl";
            String userName="cccda";
            String pwd="123456";
            if(conn==null){
                conn=DriverManager.getConnection(url, userName, pwd);
            }
            System.out.println("获取Connection连接成功");
    
        } catch (ClassNotFoundException e) {
            System.out.println("加载Oracle驱动失败");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("获取Connection连接失败");
            e.printStackTrace();
        }
        return conn;
    }
    

1 个答案:

答案 0 :(得分:0)

您正在获取新的JDBCutil实例,但这不是实际的JDBC Connection。它可能会将单例连接与每用户实例类包装起来。没有代码,我们无法分辨。

此外,由于您看到单词new两次,JDBCutil个实例不一样,但这并不意味着它们不同时使用相同的JDBC Connection

赔率是内部db.beginTransaction()调用代码映射回同一连接。如果没有,我想你会遇到更大的问题。