JDBC编程6步
- 注册驱动
- 获取连接(进程之间的通信,重量级,使用完之后一定要关闭)
- 获取数据库操作对象
- 执行sql语句
- 处理查询结果集
- 释放资源
1 import java.sql.*; 2 import java.util.*; 3 public class JDBCTest05{ 4 public static void main(String[] args){
//使用资源绑定器绑定配置文件
ResourceBundle bundle = ResourceBundle.getBundle("后缀为properties的配置文件文件名");
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
5 Connection conn = null; 6 Statement stmt = null;
7 ResultSet rs = null;
//
8 try{ 9 //1.注册驱动 10 Class.forName("com.mysql.cj.jdbc.Driver"); 11 12 //2.获取连接 13 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode?useSSL=false&serverTimezone=UTC","root","密码"); 14 15 //3.获取数据库操作对象 16 stmt = conn.createStatement(); 17 18 //4.执行sql语句 19 String sql = "select empno,ename,sal from emp"; 20 21 //int executeUpdate(insert/delete/update)//增删改返回数量 22 //ResultSet executeQuery(select)//查询语句返回结果集 23 //专门执行DQL语句的方法 24 rs = stmt.executeQuery(sql); 25 26 //5.处理查询结果集 27 28 /* 29 boolean flag1 = rs.next(); 30 if(flag1){ 31 String empno = rs.getString(1); 32 String enaem = rs.getString(2); 33 String sal = rs.getString(3); 34 System.out.println(empno+","+enaem+","+sal); 35 } 36 */ 37 38 //System.out.println(flag1); 39 40 while (rs.next()){ 41 //光标指向行有数据 42 //取数据 43 //getString()方法的特点是::不管数据库中的类型是什么,都以String的形式取出 44 //除了可以以String类型取出之外,还可以以特定的类型取出 45 //例如: 46 // getInt()、getDouble()…… 47 48 //参数是int,表示下标1就是第一列,2就是第二列…… 49 //除此之外参数还可以直接写字段名 50 //例如: 51 //String empno = rs.getString(empno);//建议使用这种方式 52 //重点注意:列名称为重命名后的名称,不是表中的列名称 53 String empno = rs.getString(1);//JDBC中所有下标从1开始,不是从0开始 54 String ename = rs.getString(2); 55 String sal = rs.getString(3); 56 System.out.println(empno+" |"+ename+" |"+sal); 57 } 58 59 60 }catch(SQLException e){ 61 e.printStackTrace(); 62 }catch(ClassNotFoundException e){ 63 e.printStackTrace(); 64 }finally{ 65 //释放资源 66 try{ 67 if(rs != null){ 68 rs.close(); 69 } 70 }catch(SQLException e){ 71 e.printStackTrace(); 72 } 73 try{ 74 if(stmt != null){ 75 stmt.close(); 76 } 77 }catch(SQLException e){ 78 e.printStackTrace(); 79 } 80 try{ 81 if(conn != null){ 82 conn.close(); 83 } 84 }catch(SQLException e){ 85 e.printStackTrace(); 86 } 87 } 88 89 } 90 }
关于Statement和PreparedStatement的区别:
1.Statement存在sql注入问题,PreparedStatement解决了sql注入,Statement编译一次执行一次
2.PreparedStatement的执行效率高,编译一次执行多次
3.PreparedStatement会在编译阶段做类型的安全检查
//把sql语句提前,并且把单引号里面的值改成问号,这里的问号称为占位符
//问号的部分只能填充值,注意:不能写单引号里面放问号
//一个问号接收一个值
String sql = "select * from t_user where loginName = ? and loginpwd = ?";//SQL语句框架
//3、获取预编译的数据库操作对象
//程序执行到此处会发送sql语句框子给DBMS,然后DBMS进行sql语句的预先编译
ps = conn.prepareStatement(sql);//需要先写sql语句的框架
//给占位符?传值(第一个问号下标是1,第二个问号下标是2,JDBC中所有下标从1开始)
//由于用户名和密码都是String,所以调用ps对象的setString();方法
ps.setString(1,loginName);
ps.setString(2,loginpwd);

浙公网安备 33010602011771号