SQL注入问题(在拼接sql语句时会出现此问题)
什么是sql注入问题?就是在拼接sql语句时,有一些sql的特殊关键字参与字符串拼接,会咋总成安全问题
例如:输入用户民名和密码时拼接sql语句(用户名任意,密码为一个恒等式)
select * from user where usernamr='sadfasfa(任意)' and password = 'a' or 'a'='a'
以上语句一直为true,造成安全问题
那么问题来了,怎么解决sql注入问题?
使用PreparedStatement对象来解决,PreparedStatement时预编译的sql
参数使用?作为占位符
步骤:
1.导入驱动jar包
2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
3.获取数据库连接对象
Connection coon=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名","数据库用户名","数据库密码");
4.定义sql语句(注意:sql的参数使用 ? 作为占位符)
//例如
String sql="select * from user where usernamr= ? and password = ?;
5.获取执行sql的对象PreparedStatement(注意:要将sql语句传入方法中)
PreparedStatement pstmt=coon.preparedStatement(sql);
6.给?赋值(参数1:第几个?;参数二:值)
pstmt.setString(1,username);
pstmt.setString(2,password);
7.执行sql(注意:不需要传递sql语句了)
stmt.executeQuery();//执行DQL(select)语句,返回ResultSet结果集对象,.next方法遍历结果集,根据索引或字段名获取到数据库数据。
8.释放资源
coon.close();
pstmt.close();