四、数据绑定
将用户输入的数据,绑定到SQL中
1、字符串拼接
1.在需要使用用户数据的位置,通过对应变量替换
2.如果为非字符串类型:"+变量名+"
3.如果为字符串类型(包含日期及枚举):' "+变量名+" '
package com.bz.test; public class JDBCTest { public static void main(String[] args) throws Exception{ //1. 加载驱动 //2. 获取连接 //3. 准备发送SQL的工具,前三步省略 //往学生表中添加一条学生信息 //接收用户信息 Scanner sc = new Scanner(System.in); System.out.println("请输入你的姓名:"); String name=sc.next(); System.out.println("请输入你的年龄:"); int age=sc.nextInt(); System.out.println("请输入你的性别(男/女):"); String sex=sc.next(); System.out.println("请输入你的年级:"); String clazz=sc.next(); System.out.println("请输入你的地区:"); String place=sc.next(); //根据用户填写的信息,书写SQL String sql = "insert into t_student(stu_name,stu_age,stu_sex,stu_class,stu_place) VALUES('"+name+"',"+age+",'"+sex+"','"+clazz+"','"+place+"')"; //输出sql System.out.println(sql); PreparedStatement ps = conn.prepareStatement(sql); //4. 发送执行SQL int n = ps.executeUpdate();//执行SQL,增删改返回受影响条数 if(n>0){ System.out.println("添加成功"); }else{ System.out.println("添加失败"); } //5. 结果集 略 //6. 释放资源 略 } }
2、 ?占位符
是JDBC中的一种特殊语法,作用为进行数据绑定
使用方法:
1.在需要使用用户数据的位置,通过?代替(占位)
2.在发送SQL之前,给占位符依次赋值
3.setXxx(占位符的序号(从1开始),占位符对应的值)
package com.bz.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.Scanner; public class JDBCTest { public static void main(String[] args) throws Exception{ //1. 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2. 获取连接 //用户名 String username = "root"; //密码 String pwd = "root"; //连接的url String url = "jdbc:mysql://localhost:3306/2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"; Connection conn = DriverManager.getConnection(url, username, pwd); //3. 准备发送SQL的工具 //往学生表中添加一条学生信息 //接收用户信息 Scanner sc = new Scanner(System.in); System.out.println("请输入你的姓名:"); String name=sc.next(); System.out.println("请输入你的年龄:"); int age=sc.nextInt(); System.out.println("请输入你的性别(男/女):"); String sex=sc.next(); System.out.println("请输入你的年级:"); String clazz=sc.next(); System.out.println("请输入你的地区:"); String place=sc.next(); //根据用户填写的信息,书写SQL String sql = "insert into t_student(stu_name,stu_age,stu_sex,stu_class,stu_place) VALUES(?,?,?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); //给占位符赋值 ps.setString(1,name); ps.setInt(2,age); ps.setString(3,sex); ps.setString(4,clazz); ps.setString(5,place); //4. 发送执行SQL int n = ps.executeUpdate();//执行SQL,增删改返回受影响条数 if(n>0){ System.out.println("添加成功"); }else{ System.out.println("添加失败"); } //5. 结果集 略 //6. 释放资源 ps.close(); conn.close(); } }
两种数据绑定的区别
SQL注入攻击:利用填写数据巧妙使SQL语句中的某些判断条件失效
五、面对异常
可能出现的异常:
1.类加载问题:Driver的路径不对
2.数据库、用户名、密码不对
3.sql语法错误:在sql下方打印该语句,查看语法问题
4.数据绑定不对:字符串拼接错误、?占位符赋值有误
5.获取结果集字段值时有误:检查字段顺序、字段名、数据类型
解决方案1:
6.先查看控制台的异常日志,锁定实际抛出异常的代码位置
7.结合报错的详细信息,分析出错原因
8.复杂问题,尝试百度
解决方案2:
1.通过输出语句的位置,锁定实际抛出异常的代码位置
2.分析出错原因
实战建议:
方案1+方案2
1.观察异常日志,锁定出错位置
2.结合报错的详细信息+输出语句,确定出错的原因
3.复杂问题,尝试百度