JAVA 基础 JDBC(Java DataBase Connection)

  • 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();
		
	}
	
	
	
	
	
}




猜你喜欢

转载自blog.csdn.net/alexzt/article/details/80267803