最近在学习做javaweb项目,要求为:
使用jsp+servlet+mysql完成一个学生信息的后台管理系统,数据表和前端页面自己设计,最少实现对数据表的增删改查,可进行扩展。
因为是在假期时间,所以学习效率低了不少(我反省),这也导致了项目进度慢了不少。所以现在我恶补有关此方面的知识并且对其逐渐的有了些了解。
jsp方面了解了一些标签及其使用方法,能够使用其做一些简单前端页面。
servlet方面学会了如何获取表单信息以及其基本的使用。
mysql方面知道了一些其基本语法,即增删改查语句。
最让我闹心的便是在用java连接到数据库这一点,我看了许多有关此方面的视频,查阅了不少大佬的博客,最后得到了以下六个步骤:
一:注册数据库的驱动。方法如下:
不过为了避免数据库驱动被重复注册,一般使用Class.forNmae()方法加载驱动类即可。
二:通过DriverManager()类连接数据库,如上图所示第二个方法:getConnection(url,user,pwd)。
三:通过Connection获取Statement对象。Connection接口常用方法如下
四:通过Statement对象执行sql语句,方法如下:
五:通过ResultSet对象操作结果集,
六:关闭资源
演示代码如下:
Connection conn=null;
Statement sta=null;
ResultSet res=null;
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
String url="jdbc:mysql://localhost:3306/studentbata";
conn=DriverManager.getConnection(url,"root","lmr001214..");
//获取Statement对象
sta=conn.createStatement();
String sql="select * from studenttable ";
//获取结果
res=sta.executeQuery(sql);
记住这几个步骤后便开始尝试写项目,于是便遇到了以下问题,源代码如下:
//判断账号是否重复
public boolean isRepet(String account) throws Exception
{
boolean flag = false;
System.out.println(flag);
initConn();
try {
Statement sta=null;
ResultSet res=null;
String sql="select * from student where account='"+account+"'";
sta=conn.createStatement();
res=sta.executeQuery(sql);
if(res==null)
{
flag= true;
System.out.println(flag);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
res.close();
sta.close()
conn.close();
}
return flag;
}
那么问题来了,经过测试,无论数据库中是否有输入的参数account,flag的结果都为false。我仔细检查了下,代码的逻辑是没有问题的,那么便只有一个结果,那便是res==null这个判断有问题。后来在看了看大佬们的博客,明白了!原来executeQuery(sql)方法返回包含给定查询所生成数据的 ResultSet 对象;永远不能为 null,如果没有查询到信息,返回一个next()为false的ResultSet 对象 。得知如此后,问题便迎刃而解了!