12. Servlet中操作数据库
在servlet中操作数据库和java文件中操作数据库完全一致。
特别注意SQL注入漏洞。
加入数据库后,框架图如下图所示:
在Loginhandle中加入数据库操作代码:
首先加入SQL包:
import java.sql.*;
连接数据库:
// 连接数据库
Class.forName("com.mysql.jdbc.Driver");
// 获得连接
ct = DriverManager.getConnection("jdbc:mysql://localhost/spdb", "root", "root");
// 创建Statement
sm = ct.createStatement();
rs = sm.executeQuery("select * from users where username= '" + u + "' and passwd='" + p + "'");
// 判断结果集中是否有数据
if(rs.next())
{
// 进行数据操作
}
在try-catch语句的finally部分要将数据库的资源释放掉。如下代码:
finally
{
try
{
if(rs != null)
{
rs.close();
}
if(rs != null)
{
sm.close();
}
if(rs != null)
{
ct.close();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
注:如果使用SQL Server 2005,则连接语句可以使用如下的连接语句:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); ct=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=spdb", "sally", "sally");
在连接SQL Server 2000时,需要加入三个jar包:
msbase.jar、mssqlserver.jar和msutil.jar
连接MySQL时,则是用对应版本的MySQL的jar包即可。
连接SQL Server 2005时,则需要将其对应的sqljdbc4.jar包即可。
Jar包的放置目录有两个地方:
TOMCAT_HOME/commons/lib目录下,或者是自己的webapps目录下的WEB-INF目录下新建lib目录,将3个jar包放置到该目录下。
两者的区别是:放到commons/lib目录下,所有的webapps都可以使用这三个jar包[相当于公用的lib库],而第二种则只能供自己的webapps使用。
SQL注入的防止:
所谓SQL注入,这个是数据库本身存在的一个漏洞,例如如下的SQL语句,执行后可以将数据库中所有的记录返回:
select * from users where username='admin' and passwd = 'admin' or 1 = '1';
没有对SQL注入漏洞采取措施的网站,就会存在问题,如果在登录界面中,用户名随意输入,密码输入'admin' or 1 = '1',那么就可以登录到网站中,这个是一个错误,需要防止。
措施:
在用户验证时,使用用户名查询所有的记录,然后将所有记录的密码和用户提交密码进行比较,如果匹配则说明登录成功,否则登录失败。这样就可以放置SQL注入的发生。