mencius 2009-04-14 22:41
浏览 231
已采纳

jdbc连接数据库的困惑

1>public class DBmanager{
private finale static string classname="com.mysql.jdbc.Driver";
private finale static conStr="jdbc:microsoft:sqlserver://localhost:3306/test";
private finale static String dbUser="root";
private finale static String dbPass="root";
private Connection con;
private preparedStatement ps;
private Connection getConnection() throws Exception{
Class.forName(className);
con=DriverManager.getConnection(constr,dbUser,dbPass);
return con;
}
}
2>
public class DBmanager{
private static Connection con=null;
public static Connection getInstance()
{

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
            "root", "root");
    } catch (Exception e) {

    }
    return con;
}

}
请问这两种jdbc连接数据库的方法哪个比较好?为什么好?请问还有什么好的写法不?

  • 写回答

3条回答 默认 最新

  • idealab 2009-04-14 22:59
    关注

    LZ提供的写法只是得到了Connection对象,数据库访问类应该提供访问数据库的全套功能,如连接、释放数据库,执行SQL语句,更加顾全的还需要实现事务管理。
    当然,但从获取Conn对象这点来看,LZ第二种方法或许更节省资源,因为每次载入类时不会像第一种方法那样载入如此多的static字段。
    以下提供一种数据库访问类,仅供参考:
    [code="java"]public class JdbcUtil {
    private final String driver = "com.mysql.jdbc.Driver";
    private final String url="jdbc:mysql://localhost:3306/ehr?autoReconnect=true&useUnicode=true&characterEncoding=utf-8";
    private final String user = "root";
    private final String pwd = "ideal";
    private Connection conn = null;
    private Statement st = null;

    public void openConn(){
        try{
            Class.forName(driver);
            conn = DriverManager.getConnection(url,user,pwd);
            conn.setAutoCommit(true);
        }catch(SQLException e){
            e.printStackTrace();
            System.out.println("数据库连接失败!");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public boolean executeUpdate(String sql)throws SQLException{ 
        try {
            /*判断必需的属性是否为空*/  
            if(conn==null || sql == null||sql.equals("")){   
                return true;   
            }
            st = conn.createStatement();
            int i = st.executeUpdate(sql); 
            System.out.println(i+"行受影响");
            return true;
        } catch (SQLException e) { 
            e.printStackTrace();
            System.out.println("更新失败!");
            return false;
        } 
    } 
    
    public ResultSet executeQuery(String sql){ 
        ResultSet rs = null;
        try { 
            st = conn.createStatement();
            rs = st.executeQuery(sql);
        } catch (SQLException e) { 
            e.printStackTrace(); 
            System.out.println("查询数据失败.未获得ResultSet!");
        }
        return rs;
    } 
    
    public void closeConn() { 
        try { 
            st.close(); 
            conn.close(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
            System.out.println("关闭数据库连接失败!");
        } 
    } 
    

    }[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料