1、掌握JDBC的基本使用与工具类的封装
2、掌握Statement对象与Result对象的使用
3、掌握PreparedStatement对象的使用(重点学习,在JDBC中使用很频繁的一个对象)
ORM编程思想
package com.bzcxy.jdbc;import java.io.IOException;import java.lang.reflect.Field;import java.sql.*;import java.util.ArrayList;import java.util.List;/*** ORM(Object Relational Mapping对象关系映射)编程思想* --一个数据表对应一个Java类* --表中的一条记录对应Java类的一个对象* --表中的一列对应Java类的一个属性** 针对User表通用查询设计*/public class PreparedStatement_test2 {public static void main(String[] args) throws Exception {String sql = "select * from user where id <?";List<User> users = PreparedStatement_test2.UserQuery(sql, 7);for (User u:users){System.out.println(u);}}public static List<User> UserQuery(String sql,Object...args) throws Exception{List<User> users = new ArrayList<>();//1.获取数据库连接Connection conn = JDBC_utils.getConnection();//2.预编译sql语句,返回PreparedStatement对象PreparedStatement ps = conn.prepareStatement(sql);//3.填充?for (int i = 0;i<args.length;i++){ps.setObject(i+1,args[i]);//小心参数声明错误}//4.执行ResultSet rs = ps.executeQuery();//5.获取结果集元数据ResultSetMetaData metaData = rs.getMetaData();//6.通过元数据获取结果集中的列数int columnCount = metaData.getColumnCount();//7.保存(数据库每条记录)至(List<User>)中while(rs.next()){//创建User对象,用于保存每行记录User user = new User();//处理结果集中的列,将每列的值保存到user对象中对应的属性中for (int i=0;i<columnCount;i++){//获取该列的值Object columnValue = rs.getObject(i + 1);//获取该列的列名String columnName = metaData.getColumnName(i + 1);//通过反射将User的ColumnName赋值为ColumnValue//获取该字段相关属性Field field = user.getClass().getDeclaredField(columnName);//提升权限field.setAccessible(true);//赋值field.set(user,columnValue);}//将赋值后的user添加进Listusers.add(user);}return users;}}
SQL注入攻击
- 是什么:SQL注入是指利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入的数据中注入了非法SQL语句段或者命令,从而利用SQL引擎完成恶意行为的做法
- 根本原因:(Statement)用户提供的信息包含SQL关键字,并且这些关键字参与SQL编译过程
- 解决方法:(通过PreparedStarement预编译),将用户提供的信息作为一个整体的字符串参数设置到SQL中,那么即使含有SQL关键字,仍然不起作用
- 典型场景:Web系统用户登录功能,根据用户输入的用户名和密码,我们需要去后端数据库核实信息
4、掌握JDBC的事务处理、项目的应用程序分层与基类的封装
