1、创建school数据库、departments表

mysql> create  database  school  charset  utf8mb4  collate  utf8mb4_bin;
mysql> use  school;
mysql> create  table  departments  (
  department_id  int(11)  not  null  auto_increment,
  department_name  varchar(30)  default  null,
  location_id  int(11)  not  null,
  primary  key(department_id),
  unique  key  department_name(department_name)
)  engine=innodb  auto_increment=6  default  charset=utf8;


2、创建java项目

a、使用eclipse创建一个java project项目


b、在项目下,创建lib文件夹,并向lib文件夹中,添加 mysql-connector-java-5.1.47.jar


c、将mysql-connector-java-5.1.47.jar导入,即Build Path添加


3、在src目录下,创建  jdbc.properties  文件(连接MySQL数据库的配置文件)

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://10.1.1.76:3306/school?useUnicode=true&characterEncoding=utf-8

userName=root

passwd=jin51-123


4、工具类JdbcUtil

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
/** jdbc的工具类 */
public class JdbcUtil {
	private static String driver;
	private static String url;
	private static String userName;
	private static String passwd;
	
	static {
		/** 读取properties文件 */
		ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
		driver = bundle.getString("driver");
		url = bundle.getString("url");
		userName = bundle.getString("userName");
		passwd = bundle.getString("passwd");
		
		try { //注册驱动
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static Connection getConn() {
		Connection conn = null;
		try { //创建连接
			conn = DriverManager.getConnection(url, userName, passwd);
		} catch (SQLException e) {
			e.printStackTrace();
		}	
		return conn;
	}
	
	public static void closeResult(ResultSet result) {
		try {
			if (result != null) {
				result.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void closeState(Statement state) {
		try {
			if (state != null) {
				state.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void closeConn(Connection conn) {
		try {
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/* 关闭资源 */
	public static void closeResource(
			ResultSet result, Statement state, Connection conn) {
		closeResult(result);
		closeState(state);
		closeConn(conn);
	}
}


5、测试SQL注入

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/** 测试jdbc连接mysql,SQL注入,查询数据 */
public class JdbcDemo {
	/* sql注入的方法*/
	public void sqlInject(String department_name, int location_id) {
		Connection conn = null;
		Statement state = null;
		ResultSet result = null;
		try {
			conn = JdbcUtil.getConn(); //创建连接
			state = conn.createStatement(); //创建Statement对象
			//SQL语句
			String sql = "select * from departments"
					+ " where department_name = '"+department_name+"'";
			System.out.println(sql);
			//执行SQL语句,返回查询结果
			result = state.executeQuery(sql);
			while (result.next()) {
				System.out.println(result.getInt("department_id") + "\t"
					+ result.getString("department_name"));
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtil.closeResource(result, state, conn);
		}
	}
	
	public static void main(String[] args) { //测试执行sql语句
		JdbcDemo demo = new JdbcDemo();
		demo.sqlInject("研发部' or 1 = 1 -- ", 8);
	}
}


6、测试结果

select  *  from  departments  where  department_name  =  '研发部'  or  1  =  1  -- '

8          研发部

9          市场部

10        人事部

11        售后部

12        国际发展部

13        国际人事部

15        国际市场部