1、掌握JDBC的基本使用与工具类的封装
2、掌握Statement对象与Result对象的使用

3、掌握PreparedStatement对象的使用(重点学习,在JDBC中使用很频繁的一个对象)

ORM编程思想

  1. package com.bzcxy.jdbc;
  2. import java.io.IOException;
  3. import java.lang.reflect.Field;
  4. import java.sql.*;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. /**
  8. * ORM(Object Relational Mapping对象关系映射)编程思想
  9. * --一个数据表对应一个Java类
  10. * --表中的一条记录对应Java类的一个对象
  11. * --表中的一列对应Java类的一个属性
  12. *
  13. * 针对User表通用查询设计
  14. */
  15. public class PreparedStatement_test2 {
  16. public static void main(String[] args) throws Exception {
  17. String sql = "select * from user where id <?";
  18. List<User> users = PreparedStatement_test2.UserQuery(sql, 7);
  19. for (User u:users){
  20. System.out.println(u);
  21. }
  22. }
  23. public static List<User> UserQuery(String sql,Object...args) throws Exception{
  24. List<User> users = new ArrayList<>();
  25. //1.获取数据库连接
  26. Connection conn = JDBC_utils.getConnection();
  27. //2.预编译sql语句,返回PreparedStatement对象
  28. PreparedStatement ps = conn.prepareStatement(sql);
  29. //3.填充?
  30. for (int i = 0;i<args.length;i++){
  31. ps.setObject(i+1,args[i]);//小心参数声明错误
  32. }
  33. //4.执行
  34. ResultSet rs = ps.executeQuery();
  35. //5.获取结果集元数据
  36. ResultSetMetaData metaData = rs.getMetaData();
  37. //6.通过元数据获取结果集中的列数
  38. int columnCount = metaData.getColumnCount();
  39. //7.保存(数据库每条记录)至(List<User>)中
  40. while(rs.next()){
  41. //创建User对象,用于保存每行记录
  42. User user = new User();
  43. //处理结果集中的列,将每列的值保存到user对象中对应的属性中
  44. for (int i=0;i<columnCount;i++){
  45. //获取该列的值
  46. Object columnValue = rs.getObject(i + 1);
  47. //获取该列的列名
  48. String columnName = metaData.getColumnName(i + 1);
  49. //通过反射将User的ColumnName赋值为ColumnValue
  50. //获取该字段相关属性
  51. Field field = user.getClass().getDeclaredField(columnName);
  52. //提升权限
  53. field.setAccessible(true);
  54. //赋值
  55. field.set(user,columnValue);
  56. }
  57. //将赋值后的user添加进List
  58. users.add(user);
  59. }
  60. return users;
  61. }
  62. }

SQL注入攻击

  • 是什么:SQL注入是指利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入的数据中注入了非法SQL语句段或者命令,从而利用SQL引擎完成恶意行为的做法
  • 根本原因(Statement)用户提供的信息包含SQL关键字,并且这些关键字参与SQL编译过程
  • 解决方法:(通过PreparedStarement预编译),将用户提供的信息作为一个整体的字符串参数设置到SQL中,那么即使含有SQL关键字,仍然不起作用
  • 典型场景:Web系统用户登录功能,根据用户输入的用户名和密码,我们需要去后端数据库核实信息

4、掌握JDBC的事务处理、项目的应用程序分层与基类的封装