public class pr { public static void main(String[] args) { Connection conn = null; Statement st = null; ResultSet rs = null; try { // 加载驱动 // DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()); 不用这种方法加载,因为源码里面已经有static代码块加载驱动了,直接加载类进内存就行了 Class.forName("com.mysql.cj.jdbc.Driver"); // 连接到数据库 conn = DriverManager.getConnection("jdbc:mysql://localhost/meiduo_mall","root","xxxxxx"); // 创建Statement对象 st = conn.createStatement(); // 执行查询,得到结果集 String sql = "select * from tb_goods_category"; rs = st.executeQuery(sql); // 遍历查询每一条数据 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println(id + "---" + name); } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 JDBCutils.release(conn,st,rs); // 单独写一个工具类来释放资源 } } }
工具类:
public class JDBCutils { public static void release(Connection conn,Statement st,ResultSet rs){ closeConn(conn); closeSt(st); closeRs(rs); } private static void closeRs(ResultSet rs){ try { if (rs != null){ rs.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { rs = null; } } public static void closeSt(Statement st){ try { if (st != null){ st.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { st = null; } } public static void closeConn(Connection conn){ try { if (conn != null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { conn = null; } } }
上面的方法会有SQL注入的隐患。
解决方法:用PreparedStatement对象替换前面的Statement对象。PreparedStatement对象可以预先处理给定的SQL语句,在sql语句里面使用?占位符来替代后续要传递进来的变量。后面进来的变量值,将会被看成是字符串,不会产生任何的关键字。
public class pr2 { public static void main(String[] args) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); // 连接到数据库 conn = DriverManager.getConnection("jdbc:mysql://localhost/meiduo_mall","root","480916"); // 创建Statement对象 String sql = "select * from tb_goods_category where id=?"; ps = conn.prepareStatement(sql); ps.setInt(1,1); // 执行查询,得到结果集 rs = ps.executeQuery(); // 遍历查询每一条数据 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println(id + "---" + name); } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 JDBCutils.release(conn,ps,rs); // 单独写一个工具类来释放资源 } } }