如果是Statement的话,是用"++“的方式来字符串拼接的,那么外部就可以使用”+OR+"这样拼接方式来对SQL进行注入
使用PreparedStatement防止了sql注入的原因就是因为占位符已经设置规定的字段的值你不在再拼接判断条件了
package test;
import java.sql.*;
public class MyBase {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//第一步注册驱动
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8";
String username="root";
String password="root";
//现在已经java和数据库进行了连接
//这里的con就是我们和mysql进行连接成功以后返回的对象
Connection con = DriverManager.getConnection(url, username, password);
System.out.println(con);
//执行以后返回的stat我就可以用它来执行sql语句
Statement stat = con.createStatement();
stat.executeUpdate("insert into sort(sname,sprice,sdesc) values ('编程书',20,'打折')");
String sql="select * from sort";
ResultSet rs = stat.executeQuery(sql);
while (rs.next()){
System.out.println("sid:"+rs.getInt("sid"));
System.out.println("sname:"+rs.getString("sname"));
System.out.println("sprice:"+rs.getDouble("sprice"));
System.out.println("sdesc:"+rs.getString("sdesc"));
}
rs.close();//用来遍历数据库的对象
stat.close();//用来执行sql语句的对象
con.close();//用来连接数据库的对象
}
}
package test;
import java.sql.*;
import java.util.Scanner;
public class MyBase {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//第一步注册驱动
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8";
String username="root";
String password="root";
//现在已经java和数据库进行了连接
//这里的con就是我们和mysql进行连接成功以后返回的对象
Connection con = DriverManager.getConnection(url, username, password);
//执行以后返回的stat我就可以用它来执行sql语句
Scanner sc = new Scanner(System.in);
System.out.println("请输入名字:");
String sname=sc.next();
System.out.println("请输入价格:");
String sprice=sc.next();
String str="select * from sort where sname=? and sprice=?";
System.out.println(str);
PreparedStatement pst= con.prepareStatement(str);
pst.setObject(1,sname); //1表示的是第一个问号的数据为sname
pst.setObject(2,sprice);
ResultSet rs = pst.executeQuery(str);
while (rs.next()){
System.out.println("sname:"+rs.getString("sname"));
System.out.println("sprice:"+rs.getDouble("sprice"));
}
pst.close();//用来执行sql语句的对象
con.close();//用来连接数据库的对象
}
}