防止注入攻击
package myJDBC;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
/**
* 防止注入攻击
* statement接口实现类,执行SQL语句,返回执行结果
* 有一个子接口preparestatement(用于SQL预编译存储,多次高效的执行SQL语句)
* preparestatement的实现类在数据库的驱动中,获取接口实现类
*
* 是connection数据库连接对象的方法
*
*
*
*/
public class myjdbc04 {
public static void main(String[] args)throws Exception{
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/mydata?serverTimezone=GMT%2B8";
String user="root";
String password="123456";
Connection con=DriverManager.getConnection(url,user,password);
// Statement stat=con.createStatement();
Scanner sc=new Scanner(System.in);
String users=sc.next();
String passwords=sc.next();
//进行预编译
String st="select * from users where username=? and password=?";
PreparedStatement ps= con.prepareStatement(st);
ps.setObject(1, users);
ps.setObject(2, passwords);
System.out.println(st);
ResultSet rs=ps.executeQuery();
while(rs.next()) {
System.out.println(rs.getString("username")+" "+rs.getString("password"));
}
rs.close();
ps.close();
con.close();
}
}
使用statement接口的子接口preparedstatement进行预编译实现。