javaSE JDBC, PreparedStatement接口, 防SQL注入, 预编译SQL语句

MySql驱动(jar包)下载:https://pan.baidu.com/s/19BYnGbO3l5MOOic5K4Ooaw  密码:mwoh


Demo.java:

package cn.xxx.demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

/*
 *  防止SQL注入攻击
 *  Statement接口实现类。 该类对象用于执行SQL语句,返回结果集
 *  有一个子接口PreparedStatement (SQL语句可以预编译存储,多次高效的执行SQL;也可以防sql注入) 
 *  
 */
public class Demo {
	public static void main(String[] args)throws Exception {
		Class.forName("com.mysql.jdbc.Driver");
		String url = "jdbc:mysql://localhost:3306/mybase";
		String username = "root";
		String password = "123";
		Connection con = DriverManager.getConnection(url, username, password);
		Scanner sc = new Scanner(System.in);
		String user = sc.nextLine();
		String pass = sc.nextLine();
		
		String sql = "SELECT * FROM users WHERE username=? AND PASSWORD=?"; // ?表示占位符
		PreparedStatement pst = con.prepareStatement(sql);  // PreparedStatement可以防sql注入,也可以对sql语句预编译存储,多次高效的执行sql 
		
		pst.setObject(1, user);  //调用pst对象set方法,设置?占位符上的参数
		pst.setObject(2, pass);
		
		ResultSet rs = pst.executeQuery();  // 执行查询SQL语句;sql语句已经预编译,不需要再传sql语句。
		while(rs.next()){
			System.out.println(rs.getString("username")+"   "+rs.getString("password"));
		}
		
		rs.close();
		pst.close();
		con.close();
	}
}


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80771810