- 1 为eclipse工程导入驱动jar包
我用的是oxygen,右键工程选择properties->Java Build Path 选择Libaraies ->Add External JARs 选择你的jar包点击ok
在Package Explorer 中查看自己工程Referenced Libaries中是否有导入jar包。
- 2 注册驱动,链接数据库进行操作,详见代码:
package demo1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Random;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception {
//有注入漏洞的方法
// jdbcDemo();
//使用PreparedStatement对象处理注入漏洞的方法
jdbcDemo1();
}
private static void jdbcDemo1() throws Exception {
/*
* 使用PreparedStatement来避免出现注入漏洞
* 在控制台输入 xx'or 'a'='a 不会出现漏洞问题了
*
*/
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获得链接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day29","root","Aa123456");
//测试是否有链接成功。
System.out.println(conn);
Scanner scan = new Scanner(System.in);
String name = scan.nextLine();
//有占位符的sql语句
String sql = "SELECT * FROM test WHERE name=?";
PreparedStatement prestat = conn.prepareStatement(sql);
//第一个参数是占位符的位置
prestat.setString(1,name);
//executeQuery方法已经不用在填入sql语句了,因为获得PreparedStatement对象的时候已经传入
ResultSet set = prestat.executeQuery();
while (set.next()) {
System.out.println(set.getInt("id") + ":" + set.getString("name") + ":" + set.getInt("age"));
}
}
private static void jdbcDemo() throws Exception {
/*
* 有注入漏洞的方法
* 注意要导的包都是java.sql下的子包
* 当用户输入生成一下sql语句时时就出现了漏洞,会返回所有的数据。
* 输入 xx'or 'a'='a
* SELECT * FROM test WHERE name = 'xx' OR 'a'='a';
*/
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获得链接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day29","root","Aa123456");
//测试是否有链接成功。
System.out.println(conn);
//获得Statement对象
Statement stat = conn.createStatement();
Random ran = new Random();
int ranInt = ran.nextInt(1000);
// //insert update delete 语句都用 executeupdate方法执行
// String sql = "insert into test(name,age) values('test_user"+ ranInt +"', "+ranInt+")";
// System.out.println(sql);
// //返回的是操作的行数
// int row = stat.executeUpdate(sql);
// //查看结果
// System.out.println("操作了" + row + "行。");
String sql= null;
// //漏洞测试代码
// Scanner scan = new Scanner(System.in);
// String name = scan.nextLine();
// //在控制台输入 xx'or 'a'='a 后sql语句如下
// //select * from test where name='a'or 'a'='a',并且获得所有结果集
// sql = "select * from test where name='"+ name+"'";
// System.out.println(sql);
// 正常的查询sql
//查询SQL语句
sql = "select * from test";
//执行sql查询语句
ResultSet set = stat.executeQuery(sql);
//查看结果
while(set.next()) {//检测是否还有结果
//输出结果
System.out.println(set.getInt("id") + ":" + set.getString("name") + ":" + set.getInt("age"));
}
//关闭资源
conn.close();
stat.close();
}
}