package com.zhangbz.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCDemo1 { public static void main(String[] args) { Connection conn = null; //局部变量没有默认的初始化,类的成员变量才有 Statement stat = null; ResultSet rs = null; try { //1.注册数据库驱动 //--由于mysql在Driver类的实现中自己注册了一次,而我们又注册了一次,于是会导致mysql驱动被注册两次 //--创建mysqldeDriver对象时,导致了程序和具体的mysql驱动绑死在了一起,在切换数据库时需要修改代码 //DriverManager.registerDriver(new Driver()); //反射 Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day10", "root", "root"); stat = conn.createStatement(); rs = stat.executeQuery("select * from user"); //5.遍历结果集获取查询对象 while(rs.next()){ String name = rs.getString("name"); System.out.println(name); } } catch(Exception e) { e.printStackTrace(); } finally { //6.关闭资源//异常处理 if (rs != null) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { rs = null; } } if (rs != null) { try { stat.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { rs = null; } } if (rs != null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { rs = null; } } } } }
1.局部变量没有默认的初始化,类的成员变量才有。
2.Class.forName("com.mysql.jdbc.Driver");利用反射解决重复注册的问题,并且降低程序和数据库类型的耦合,需要切换数据库时,由原先的需要改变导入的变成修改字符串,而后者可以在配置文件中完成。
3.嵌套的异常处理和if判断确保资源的释放没有问题。