Skip to main content

PreparedStatement

// 获取链接
String url = "jdbc:mysql:///test?useSSL=true";
String username = "root";
String password = "547118";
Connection conn = DriverManager.getConnection(url, username, password);

// 接受用户输入,用户名和密码
String name = "zhangsan";
String pwd = "123";

String sql = "select * from tb_user where username = '"+ name +"' and '"+ pwd +"'";

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

if (rs.next()) {
System.out.println("登陆成功");
} else {
System.out.println("登录失败");
}

rs.close();
stmt.close();
conn.close();

SSL加密

String url = "jdbc:mysql:///test?useSSL=true";

SSL协议提供服务主要:
1)认证用户服务器,确保数据发送到正确的服务器;    .
2)加密数据,防止数据传输途中被窃取使用;
3)维护数据完整性,验证数据在传输过程中是否丢失;
当前支持SSL协议两层:
SSL记录协议(SSL Record Protocol):建立靠传输协议(TCP)高层协议提供数据封装、压缩、加密等基本功能支持
SSL握手协议(SSL Handshake Protocol):建立SSL记录协议用于实际数据传输始前通讯双进行身份认证、协商加密
算法、 交换加密密钥等。

开启预编译功能

String url = "jdbc:mysql:///test?&useServerPrepStmts=";

作用

1.预编译SQL语句并执行:预防SQL注入问题

// 获取PreparedStatement对象
// SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";
// 通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

// 设置参数值
PreparedStatement对象:setXxx(参数1,参数2):给?赋值
Xxx:数据类型;如setlnt(参数1,参数2)
参数:
参数1:?的位置编号,从1开始
参数2:?的值

// 执行SQL
executeUpdate();/executeQuery; : 不需要再传递sql

SQL注入

​ SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

String name = "ahslja";  // 乱写
String pwd = "' or '1' = '1";