|- Statement接口: 用于执行静态的sql语句
|- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML)
|- ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL)
|-PreparedStatement接口(Statement接口的子类):用于执行预编译sql语句
|- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML)
|-ResultSet executeQuery() : 执行预编译的查询sql语句(DQL)
代码:(用DDL语句中的创建来举例,其他的DDL语句,除了发送的sql语句不一样之外,都一样)
1 public class Statement_one { 2 3 // 数据库的信息 4 // URL 5 private static String url = "jdbc:mysql://localhost:3306/day1029"; 6 // 用户名和密码 7 private static String user = "root"; 8 private static String password = "root"; 9 10 // 执行DDL语句(创建表为例) 11 private static void DDL() { 12 // 为了在关闭连接,在这里创建对象 13 Connection conn = null; 14 Statement stsm = null; 15 16 try { 17 // 创建驱动注册对象 18 Class.forName("com.mysql.jdbc.Driver"); 19 20 // 获取连接的数据库对象 21 /* Connection */conn = DriverManager.getConnection(url, user, 22 password); 23 24 // 创建Statement对象 25 /* Statement */stsm = conn.createStatement(); 26 27 // 创建要执行的sql语句 28 String sql = "CREATE TABLE person(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),sex VARCHAR(5),age INT,psot VARCHAR(10),email VARCHAR(20),phone INT)"; 29 30 // 使用Statement发送该DDL语句,返回的时该sql语句所影响的行数,int类 31 int result = stsm.executeUpdate(sql); 32 } catch (Exception e) { 33 e.printStackTrace(); 34 } 35 // 最后关闭连接(后开启的先关闭) 36 finally { 37 if (stsm != null) { 38 try { 39 stsm.close(); 40 } catch (SQLException e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 throw new RuntimeException(e); 44 } 45 } 46 if (conn != null) { 47 try { 48 conn.close(); 49 } catch (SQLException e) { 50 // TODO Auto-generated catch block 51 e.printStackTrace(); 52 throw new RuntimeException(e); 53 } 54 } 55 } 56 }
代码:用DML的插入数据举例
1 private static void DML() { 2 3 Connection conn = null; 4 Statement stsm = null; 5 6 try { 7 // 创建驱动获取对象 8 Class.forName("com.mysql.jdbc.Driver"); 9 10 // 获取要连接的数据库对象 11 conn = DriverManager.getConnection(url, user, password); 12 13 // 创建Statement对象 14 stsm = conn.createStatement(); 15 16 // 准备要执行的sql语言 17 String sql = "INSERT INTO person (NAME,sex,age) VALUES ('小红','女',20);"; 18 19 // 执行语句 20 stsm.executeUpdate(sql); 21 } catch (Exception e) { 22 e.printStackTrace(); 23 } finally { 24 25 if (stsm != null) { 26 try { 27 stsm.close(); 28 } catch (SQLException e) { 29 // TODO Auto-generated catch block 30 e.printStackTrace(); 31 throw new RuntimeException(e); 32 } 33 } 34 if (conn != null) { 35 try { 36 conn.close(); 37 } catch (SQLException e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 throw new RuntimeException(e); 41 } 42 } 43 44 } 45 46 }
代价:执行DQL
1 //DQL(查询数据) 2 private static void DQL() { 3 Connection conn = null; 4 Statement stsm = null; 5 6 try{ 7 //创建驱动获取对象 8 Class.forName("com.mysql.jdbc.Driver"); 9 10 //创建要连接的数据库对象 11 conn = DriverManager.getConnection(url, user, password); 12 13 //创建Statement对象 14 stsm = conn.createStatement(); 15 16 //准备sql语言 17 String sql = "SELECT * FROM person;"; 18 19 //执行sql语言 20 //返回的是ResultSet,表示数据库结果集的数据表 21 ResultSet rs = stsm.executeQuery(sql); 22 23 //打印一行数据,例:打印第二行的数据 24 25 //一:移动光标到第二行,具体看API的ResultSet 26 rs.next(); 27 rs.next(); 28 //根据列名查询 29 int id = rs.getInt("id"); 30 String name = rs.getString("name"); 31 String sex = rs.getString("sex"); 32 //打印 33 System.out.println(id+","+name+","+sex); 34 35 36 //二:打印所有数据,利用迭代。具体查看API的ResultSet 37 /* while(rs.next()){ 38 //通过列名来查询,列名的英文字母不分大小写 39 int id = rs.getInt("id"); 40 String name = rs.getString("name"); 41 String sex = rs.getString("sex"); 42 System.out.println(id+","+name+","+sex); 43 44 }*/ 45 46 }