JDBC编程6步

  1. 注册驱动
  2. 获取连接(进程之间的通信,重量级,使用完之后一定要关闭)
  3. 获取数据库操作对象
  4. 执行sql语句
  5. 处理查询结果集
  6. 释放资源

 

 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);
posted @ 2020-08-18 17:00  zhangteng333  阅读(386)  评论(0)    收藏  举报