日期:2014-05-16  浏览次数:20588 次

利用JDBC访问数据库的步骤

?步骤

?1)调用Class类的forName()方法,加载并注册数据库驱动。


?2)调用DriverManager类的getConnection()方法,建立到数据库的连接


?3)调用Connection对象的createStatement()方法,访问数据库


?4)调用Statement对象的executeQuery()方法得到ResultSet对象。


?5) 调用ResultSet对象的getObject()方法,处理结果。


?6)释放资源(连接应该尽可能晚建立,释放资源应尽可能早释放。)

?

下面是初始代码:

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *利用JDBC连接数据库
 * @author Haowang
 */
public class Base {
    public static void main(String[] args) throws Exception{
        prime();
    }

    /**
     * 初始代码,了解连接数据库的基本步骤
   * @throws ClassNotFoundException
     * @throws SQLException
     */
    private static void prime() throws ClassNotFoundException, SQLException {
        //1.注册驱动
       Class.forName("com.mysql.jdbc.Driver");     //推荐使用这种方式,不会对具体的驱动类产生依赖
//        DriverManager.registerDriver(new Driver());     //会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖
//        System.setProperty("jdbc.Drivers", "com.mysql.jdbc.Driver");      //虽然不会对具体的驱动类产生依赖,但注册不太方便,所以很少使用

        //2.建立连接(Connection)
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, user, password);

        //3.创建语句(Statement)
        Statement st = conn.createStatement();

        //4.执行语句
        ResultSet rs = st.executeQuery("Select * from Students;");

        //5.处理结果
        while(rs.next()) {
            System.out.println(rs.getObject(1)+"\t"+rs.getObject(2)+"\t"+rs.getObject(3)+"\t"+rs.getObject(4));
        }

        //6.释放资源
     rs.close();
        st.close();
        conn.close();
    }
}

?上面代码有很多缺陷,在实际使用过程中应进行优化:

? 释放资源时应该保证即使前面代码出现异常也能正常释放资源;
??驱动只注册一次,采用单例模式(采用静态代码块也可以);
??新建一个工具类JdbcUtils,通过这个工具类来访问数据库;

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *Jdbc工具类
 * @author HaoWang
 */
public class JdbcUtils {
    private static String url = "jdbc:mysql://localhost:3306/test";
    private static String user = "root";
    private static String password = "123456";

    private JdbcUtils() {    }
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(url, user, password);
    }
    public static void free(Connection conn, Statement st, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                if(st!=null) {
                    st.close();
                }
            } catch (SQLException ex) {
                System.out.println(ex.toString());
            } finally {
                try {
                    if(conn!=null){
                        conn.close();
                    }
                } catch (SQLException ex) {
                    System.out.println(ex.toString());
                }
            }
        }
    }
}

?

package jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author Haowa