JDBC对数据库操作的六个基本步骤:
//1.注册数据库驱动
//2.获取数据库连接
//3.获取传输器对象
//4.利用传输器传输SQL到数据库执行,获取结果集对象
//5.遍历结果集,获取结果数据
//6.关闭资源(这里低层是将连接还回数据源中)
Statement和PreparedStatement都可以作为执行sql语句的传输器。它们存在父子关系;PreparedStatement是Statement 父级。
在使用Statement传输器时容易被用户输入sql关键字后导致后台sql被破坏,即sql注入攻击。安全性并不高。
PreparedStatement优点:
(1)可以防止sql注入攻击, 采用预编译机制, 先将sql语句的主干发送数据库, 数据库编译后就确定了sql语句的语意, 如果后面参数中再包含sql关键字或者是特殊字符, 也只会当作普通的字符来处理!!!
(2)通过方法来设置参数, 省去了拼接sql语句的麻烦.
(3)能够尽最大可能来提高效率. PreparedStatement发送的sql语句编译后就被数据库缓存下来了, 再次执行时, 如果和缓存中的匹配就会使用缓存中的语句, 不再编译, 直接执行. statement发送的sql语句是先拼接好再发送给数据库, 由于参数不同整条sql语句也就不同, 所以每次都需要编译.
Statement对数据库的增删查改:
增加数据:
1 public static void add(Connection conn,Statement stat,ResultSet rs){ 2 try { 3 //注册mysql驱动 4 Class.forName("com.mysql.jdbc.Driver"); 5 //建立连接 6 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","admin"); 7 //创建传输器 8 stat = conn.createStatement(); 9 //操作数据 10 int rows = stat.executeUpdate("insert into account values(null,‘张三‘,88888888)"); 11 System.out.println("添加了"+rows+"条"); 12 } catch (Exception e) { 13 e.printStackTrace(); 14 }finally{ 15 JDBCutils.closeResou(conn, stat,rs); 16 } 17 }
查看数据:
1 public static void check(Connection conn,Statement stat,ResultSet rs){ 2 3 try { 4 //注册mysql驱动 5 Class.forName("com.mysql.jdbc.Driver"); 6 //建立连接 7 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","admin"); 8 //创建传输器 9 stat = conn.createStatement(); 10 //操作数据 11 rs = stat.executeQuery("select name 名字 from account where money = 500;"); 12 while(rs.next()){ 13 System.out.println(rs.getString("名字")); 14 } 15 16 } catch (SQLException e) { 17 e.printStackTrace(); 18 }finally{ 19 JDBCutils.closeResou(conn, stat, rs); 20 } 21 22 }
PreparedStatement对数据的增删查改:
增加数据:
public static void add(Connection conn,PreparedStatement ps){ //注册驱动 try { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin"); String sql = "insert into account values(null,?,?) "; ps = conn.prepareStatement(sql); ps.setString(1, "李达康"); ps.setDouble(2, 1000); int rows = ps.executeUpdate(); System.out.println("添加了:"+rows); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); }finally{ JDBCutils.closeResou(conn, ps, null); } }
删除数据:
public static void del(Connection conn,PreparedStatement ps){ try { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin"); String sql="delete from account where id=?"; ps = conn.prepareStatement(sql); ps.setInt(1, 10); int rows = ps.executeUpdate(); System.out.println("删除了"+rows); } catch (Exception e) { e.printStackTrace(); }finally{ JDBCutils.closeResou(conn, ps, null); } }
查数据:
public static void check(Connection conn,PreparedStatement ps,ResultSet rs){ try { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin"); String sql="select id from account where name=?"; ps = conn.prepareStatement(sql); ps.setString(1,"童旭平"); rs = ps.executeQuery(); while(rs.next()){ System.out.println(rs.getInt("id")); } } catch (Exception e) { e.printStackTrace(); }finally{ JDBCutils.closeResou(conn, ps, rs); } }
时间: 2024-11-05 22:18:25