日期:2014-05-16 浏览次数:20588 次
?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