一、创建外部文件
url=jdbc:mysql:///qy66 use=root password=root driver=com.mysql.jdbc.Driver
二、创建工具类
package cn.zhouzhou; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /* * jdbc2.0? * * 一、配置文件 * 1.在SRC下创建文件 格式为properties jdbc.properties 2.写入 url=jdbc:mysql:///qy66 注意【这里的qy66】 是自己的数据库中有的 库! use=root password=root driver=com.mysql.jdbc.Driver 3.好处? 这样写 可以直接在外部文件改变驱动、用户名、或是连接地址 二、获得路径的方式? 1.读取文件 Properties pro01=new Properties(); 2.获取文件路径 ClassLoader class01=工具类存在硬编码问题.class.getClassLoader(); classloader()类加载器! 3.通过getPath(); 提供文件路径 4.load(Reader reader) 以简单的线性格式从输入字符流读取属性列表(关键字和元素对) 5.getProperty(String key) 使用此属性列表中指定的键搜索属性。 三、获取连接对象? 四、释放资源? */ public class 工具类存在硬编码问题 { private static String driver; private static String url; private static String use; private static String password; //文件的读取? static{ try { Properties pro01=new Properties(); //读取文件?proerties ClassLoader class01=工具类存在硬编码问题.class.getClassLoader();//获取SRC路径?classloader()类加载器! 作用 将class文件加载到jvm虚拟机中去,程序就可以正确运行了 URL res=class01.getResource("jdbc.properties"); //getResource? 获得SRC目录下的jdbc.properties文件 String path=res.getPath(); //getpath()? 提供文件路径 pro01.load(new FileReader(path)); url=pro01.getProperty("url"); use=pro01.getProperty("use"); password=pro01.getProperty("password"); driver=pro01.getProperty("driver"); } catch (Exception e) { e.printStackTrace(); } } //获取连接对象? public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, use, password); } //释放资源? public static void close(Statement stmt,Connection conn){ if (stmt!=null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } //还要释放资源? 方法的重载。 public static void close(ResultSet rs,Statement stmt, Connection conn){ if (rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt!=null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
三、测试类
package cn.zhouzhou; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /* * 测试?执行写的工具类? * */ public class Text01 { public static void main(String[] args) throws SQLException { Connection con=工具类存在硬编码问题.getConnection(); //1.注册 String string="select * from shop"; //2.查询 PreparedStatement start=con.prepareStatement(string); //3.设置 执行语句 ResultSet rs=con.prepareStatement(string).executeQuery(); while (rs.next()) { System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getDouble(3)); } 工具类存在硬编码问题.close(rs, start, con); //4.关闭资源 } /* * 输出结果! 2 打牌支出 200.0 3 衣服支出 100.0 4 工资收入 200100.0 5 商品收入 2000.0 6 张三 2000.0 7 工资收入 0.0 12 003 5000.0 * */ }