1.1Statement ,测试SQL注入问题
package com.king.lesson02;
import com.king.lesson02.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//SQL注入的问题:
//
public class SQL {
public static void main(String[] args) {
//login("king","123456");
login("'or'2>1","'or'1=1");//sql注入本质:sql被拼接,导致数据泄露,只要保证or后面的为true就会有
}
//登陆业务
public static void login(String username,String password){
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try {
conn = JdbcUtils.getConnection();//获取数据库
st=conn.createStatement();//获得SQL执行对象
//SELECT * from users WHERE `NAME`='king' AND `PASSWORD`='123456'
String sql="SELECT * from users where `NAME`='"+username+"'AND `password`='"+password+"'";//SQL语句
rs=st.executeQuery(sql);//获得返回的所有数据
while(rs.next()){
System.out.println(rs.getString("NAME"));
System.out.println(rs.getString("PASSWORD"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);//释放资源,本质xxx.close()
}
}
}
1.2 PreparedStatement(测试)
package com.king.lesson03;
import com.king.lesson02.utils.JdbcUtils;
import java.sql.*;
//SQL注入测试(PreparedStatement)
public class SQL {
public static void main(String[] args) {
//经过测试PreparedStatement,完美的解决了SQL注入问题
login("king","123456");
//login("'or'2>1","'or'1=1");//sql注入本质:sql被拼接,导致数据泄露,只要保证or后面的为true就会有
}
//登陆业务
public static void login(String username,String password){
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn = JdbcUtils.getConnection();//获取数据库
//SELECT * from users WHERE `NAME`='king' AND `PASSWORD`='123456'
String sql="SELECT * from users where `NAME`= ? AND `password`= ? ";//SQL语句
st=conn.prepareStatement(sql);//预编译
st.setString(1,username);
st.setString(2,password);
rs=st.executeQuery();//执行
while(rs.next()){
System.out.println(rs.getString("NAME"));
System.out.println(rs.getString("PASSWORD"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);//释放资源,本质xxx.close()
}
}
}