java连接数据库的时候,我想把连接库的代码封装在一个方法中,然后把执行SQL的代码封装在另一个方法中,该怎么做,自己试着写了但是发现有错误自己也感觉思路不对,谢谢各位前辈?

解决方案 »

  1.   

    把获取数据库连接和关闭连接的代码放在一个类中,执行SQL的DAO,借助这个类来得到连接,并在finally中关闭连接。
      

  2.   


    不是封装到一个方法里面而是类,比如 DBUtils类, 里面写方法 getConnection(); close(conn)方法等;操作数据库方法可以写到另外一个类比如Dao类: 方法:
    delete();
    insert();
    update();
    findById();
    findAll();
    等。
      

  3.   

    如同2楼所说,可以自己写一个DBUtil的工具类,在里面写一个静态的方法getConnection()然后把你的得到连接的代码放到这个方法里,然后你就可以在想要得到连接的地方引用这个方法。
      

  4.   

    学生时代我就是这样做的。。public class DB
    {
        public DB() {
            Class.forname(xxx);
            con = DriverManager.getConnect(xxxx);
        }
        public boolean executeUpdate(String sql);
        public ResultSet executeQuery(String hql);
        //分页
        public ResultSet executeQuery(int pageId,int pageSizeString hql);
    }
      

  5.   

      以前写过,送你一个util类。
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;public class DBUtil {
    public static Connection getConn() throws ClassNotFoundException, SQLException{
    Class.forName("oracle.jdbc.driver.OracleDriver");
    String url = "jdbc:oracle:thin:@localhost:1521:orcl";
    String user = "scott";
    String password = "tiger";
    Connection conn = DriverManager.getConnection(url,user,password);
    return conn;
    }
    public static void close(Connection conn,Statement stmt,ResultSet rs) throws SQLException{
    if(conn!=null)
    conn.close();
    if(rs!=null)
    rs.close();
    if(stmt!=null)
    stmt.close();
    }
    }
      

  6.   

    仅供参考:http://blog.csdn.net/hzc543806053/article/details/7395998
      

  7.   

    设计的方法中返回值是个connection应该就可以了
      

  8.   

    直接上代码
    public class JdbcUtils {
    private static Connection conn = null;
    private static String url = "jdbc:mysql://localhost:3306/myweb";
    private static String user = "root";
    private static String password = "root";
    private JdbcUtils() {
    } static {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    public static Connection getConnection() {
    try {
    conn = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return conn;
    }

    public static void free(ResultSet rs, PreparedStatement ps, Connection conn) {
    if (rs != null) {
    try {
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    if (ps != null)
    try {
    ps.close();
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    if (conn != null)
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    } }


    }
      

  9.   

    你先正常的用JDBC连接,然后在多个页面进行数据操作,你会发现有许多相同的代码 每次都要写
    这是你可以 一步步 把相同的代码 提取出来 封装到一个方法中 很简单 自己多试试
      

  10.   

    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    public class JDBConnection {
        public Connection conn = null; // 声明Connection对象的实例
        public Statement stmt = null; // 声明Statement对象的实例
        public ResultSet rs = null; // 声明ResultSet对象的实例
        
        private static String dbClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";//定义保存数据库驱动的变量
        private static String dbUrl = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DB_ATM";
        private static String dbUser = "sa";
        private static String dbPwd = "sa";    public JDBConnection(String propertyFileName) {// 带属性文件名的构造方法
            Properties prop = new Properties();// 属性集合对象
            InputStream is = null;
            try {
                is = JDBConnection.class.getClassLoader().getResourceAsStream(
                        propertyFileName);// 属性文件输入流
                // is = new FileInputStream("src/" + propertyFileName);
                prop.load(is);// 将属性文件流装载到Properties对象中
                is.close();// 关闭流
                dbClassName = prop.getProperty("dbClassName");
                dbUrl = prop.getProperty("dbUrl");
                dbUser = prop.getProperty("dbUser");
                dbPwd = prop.getProperty("dbPwd");
            } catch (Exception e) {
                System.out.println("属性文件  " + propertyFileName + " 打开失败!");
            }
            try {            Class.forName(dbClassName);// 1.注册驱动
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }    public JDBConnection() {// 默认的不带参数的构造函数
            try {            Class.forName(dbClassName);// 1.注册驱动
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }    public static Connection getConnection() {
            Connection conn = null;
            try {
                // Class.forName(dbClassName);// 1.注册驱动
                conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);//2.建立与数据库的链接
            } catch (Exception ee) {
                ee.printStackTrace();
            }
            if (conn == null) {
                System.err
                        .println("警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:"
                                + dbClassName
                                + "\r\n链接位置:"
                                + dbUrl
                                + "\r\n用户/密码"
                                + dbUser + "/" + dbPwd);
            }
            return conn;
        }    /*
         * 功能:执行查询语句
         */
        public ResultSet executeQuery(String sql) {
            try { // 捕捉异常
                conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,//3.创建语句
                        ResultSet.CONCUR_READ_ONLY);
                rs = stmt.executeQuery(sql);//4.执行查询
            } catch (SQLException ex) {
                System.err.println(ex.getMessage()); // 输出异常信息
            }
            return rs; // 返回结果集对象 5.结果处理
        }    /*
         * 功能:执行更新操作
         */
        public int executeUpdate(String sql) {
            int result = 0; // 定义保存返回值的变量
            try { // 捕捉异常
                conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                        ResultSet.CONCUR_READ_ONLY);
                result = stmt.executeUpdate(sql); // 执行更新操作
            } catch (SQLException ex) {
                result = 0; // 将保存返回值的变量赋值为0
            }
            return result; // 返回保存返回值的变量
        }    /*
         * 功能:关闭数据库的连接
         */
        public void close() {//6.释放资源
            try { // 捕捉异常
                try {
                    if (rs != null) { // 当ResultSet对象的实例rs不为空时
                        rs.close(); // 关闭ResultSet对象
                    }
                } finally {
                    try {
                        if (stmt != null) { // 当Statement对象的实例stmt不为空时
                            stmt.close(); // 关闭Statement对象
                        }
                    } finally {
                        if (conn != null) { // 当Connection对象的实例conn不为空时
                            conn.close(); // 关闭Connection对象
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace(System.err); // 输出异常信息
            }
        }}
    看能不能从中学到些什么!