这个开发模式,程序调试时间最长,但只有现在多犯错,以后犯的错就会少点。最后在MLDN 的BBS论坛上提问,中心的李祺老师帮助解答了,这里帮他们打打广告,MLDN,不错哦!
一、dao开发
/*===========删除数据库=============*/
drop database if exists zz;
/*===========创建数据库=============*/
create database zz;
/*===========使用数据库=============*/
use zz;
/*===========删除数据表=============*/
drop table if exists emp;
/*===========创建数据表=============*/
create table emp(empno int(8) primary key,ename varchar(20),job varchar(9),hiredate date,sal float(11,2)
);
Emp.java
package zz.vo;
import java.util.Date;
public class Emp{private int empno;private String ename;private String job;private Date hiredate;private float sal;public void setEmpno(int empno){ // 雇员编号pno = empno;}public int getEmpno(){pno;}public void setName(String ename){ // 雇员姓名ame = ename;}public String getName(){ame;}public void setJob(String job){ // 雇员职位this.job =job;}public String getJob(){return this.job;}public void setHiredate(Date hiredate){ // 雇员入职日期this.hiredate = hiredate;}public Date getHiredate(){return this.hiredate;}public void setSal(float sal){ // 雇员工资this.sal = sal;}public float getSal(){return this.sal;}
}
DatabaseConnetion.java
package zz.dbc;
import java.sql.DriverManager;
import java.sql.Connection;public class DatabaseConnection{public static final String DBDRIVER = "sql.Driver";public static final String DBURL = "jdbc:mysql://localhost:3306/zz";public static final String DBUSER = "root";public static final String DBPASSWORD = "mysql";private Connection conn = null; public DatabaseConnection() throws Exception{ // 在构造方法中连接数据库try{Class.forName(DBDRIVER); = Connection(DBURL,DBUSER,DBPASSWORD); }catch (Exception e){throw e;}} public Connection getConnection(){;}public void close() throws Exception{if (!=null){try {lose(); }catch (Exception e){throw e;}}}
}
IEmpDAO.java
package zz.dao;
import java.util.List;
import zz.vo.Emp;public interface IEmpDAO{/***数据的增加操作,一般以doXxx的方式命名*@param emp 要增加的数据对象*@return 是否增加成功的标记*@throws Exception 有异常交给被调用处处理*/public boolean doCreate(Emp emp) throws Exception;/**查询全部的数据,一般以finaXxx的方式命名*@param keyWord 查询的关键字*@return ,返回全部的查询结果,每一个Emp对象表示表的一行记录 *@throws Exception*/public List<Emp> findAll(String keyWord)throws Exception;/**根据雇员编号查询雇员信息*@param empno雇员编号*@return 雇员的VO对象 *@throws Exception*/public Emp findByNo(int empno)throws Exception;
}
EmpDAOImpl.java
package zz.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.List;
import java.util.ArrayList;
import java.sql.ResultSet;
import zz.vo.Emp;
import zz.dao.IEmpDAO;
public class EmpDAOImpl implements IEmpDAO{private Connection conn = null;private PreparedStatement pstmt = null;public EmpDAOImpl(Connection conn){ = conn;}public boolean doCreate(Emp emp)throws Exception{boolean flag = false;String sql = "INSERT INTO emp(empno, ename, job, hiredate, sal) VALUES (?,?,?,?,?)";this.pstmt = prepareStatement(sql);this.pstmt.setInt(1, Empno());this.pstmt.setString(2, Name());this.pstmt.setString(3, Job());this.pstmt.setDate(4, new java.sql.Hiredate().getTime()));this.pstmt.setFloat(5, Sal());if (uteUpdate() > 0){flag = true;}this.pstmt.close();return flag;}public List<Emp> findAll(String keyWord)throws Exception{List<Emp> all = new ArrayList<Emp>(); // 定义集合,接收全部数据String sql = "SELECT empno, ename, job, hiredate, sal FROM Emp WHERE ename LIKE ? OR job LIKE ?";this.pstmt = prepareStatement(sql);this.pstmt.setString(1, "%" + keyWord + "%"); // 设置关键字this.pstmt.setString(2, "%" + keyWord + "%"); // 设置关键字ResultSet rs = uteQuery(); // 执行查询操作Emp emp = null; // 定义Emp对象while (rs.next()){ // 依次取出每一条数据emp = new Emp();emp.Int(1)); // 设置empno内容emp.String(2));emp.String(3));emp.Date(4));emp.Float(5));all.add(emp); // 向集合中增加对象}this.pstmt.close();return all;}public Emp findByNo(int empno)throws Exception{Emp emp = null;String sql = "SELECT empno, ename, job, hiredate, sal FROM emp WHERE empno=?";this.pstmt = prepareStatement(sql);this.pstmt.setInt(1, empno); // 错误!设置雇员编号ResultSet rs = uteQuery(); // 执行查询操作if (rs.next()){emp = new Emp();emp.Int(1));emp.String(2));emp.String(3));emp.Date(4));emp.Float(5));}this.pstmt.close();return emp;}
}
EmpDAOProxy.java
package zz.dao.proxy;
import java.util.List;
import zz.vo.Emp;
import zz.dbc.DatabaseConnection;
import zz.dao.IEmpDAO;
import zz.dao.impl.EmpDAOImpl;public class EmpDAOProxy implements IEmpDAO {private DatabaseConnection dbc = null; // 定义数据库的连接private IEmpDAO dao = null; // 定义DAO对象public EmpDAOProxy()throws Exception{this.dbc = new DatabaseConnection();this.dao = new EmpDAOImpl(Connection());}public boolean doCreate(Emp emp) throws Exception{boolean flag = false;try{if (this.dao.Empno())==null){ // 错误!如果插入的雇员编号不存在 flag = this.dao.doCreate(emp); // 调用真实主题操作} }catch (Exception e){e.printStackTrace();}finally{this.dbc.close();}return flag;}public List<Emp> findAll(String keyWord)throws Exception{List<Emp> all = null;try{all = this.dao.findAll(keyWord);}catch (Exception e){e.printStackTrace();}finally{this.dbc.close();}return all;}public Emp findByNo(int empno)throws Exception{Emp emp = null;try{emp = this.dao.findByNo(empno);}catch (Exception e){e.printStackTrace();}finally{this.dbc.close();}return emp;}
}
TestDAOInsert.java
package st;
import zz.vo.Emp;
import zz.factory.DAOFactory;public class TestDAOInsert{public static void main(String args[])throws Exception{Emp emp = null;for (int x = 1; x <= 5; x++){emp = new Emp();emp.setEmpno(1007 + x);emp.setName("张三四-" + x);emp.setJob("清洁员-" + x);emp.setHiredate(new java.util.Date());emp.setSal(500 * x);IEmpDAOInstance().doCreate(emp); }}
}
二、JSP调用 DAO
D:ProgramFileswebdemo7_java_beanemp_insert.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>增加雇员</title></head>
<body>
<form action="emp_insert_do.jsp" method="post">雇员编号:<input type="text" name ="empno"><br>雇员姓名:<input type="text" name ="ename"><br>雇员职位:<input type="text" name ="job"><br>雇员日期:<input type="text" name ="hiredate"><br>雇员工资:<input type="text" name ="sal"><br><input type="submit" value="注册"><input type="reset" value="重置">
</form>
</body>
</html>
D:ProgramFileswebdemo7_java_beanemp_insert_do.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="zz.factory.*,zz.vo.*"%>
<%@ page import=*"%>
<html><head><title>完成增加雇员操作</title></head>
<% request.setCharacterEncoding("GBK");%>
<body>
<%Emp emp = new Emp();emp.setEmpno(Integer.Parameter("empno")));emp.Parameter("ename"));emp.Parameter("job"));emp.setHiredate(new SimpleDateFormat("yyyy-MM-dd").Parameter("hiredate")));emp.setSal(Float.Parameter("sal")));try {if (IEmpDAOInstance().doCreate(emp)){
%><h3>雇员信息添加成功</h3>
<%}else {
%><h3>雇员信息添加失败</h3>
<%}}catch(Exception e){e.printStackTrace();}
%>
</body>
</html>
D:ProgramFileswebdemo7_java_beanemp_search.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="zz.factory.*,zz.vo.*"%>
<%@ page import="java.util.*"%>
<html>
<head><title>完成增加雇员操作</title></head>
<% request.setCharacterEncoding("GBK");%>
<body>
<%try {String keyWord = Parameter("kw"); // 接收查询的关键字if (keyWord==null){ // 判断是否有传递的关键字参数keyWord=""; // 如果为空(没有关键字)表示查询全部!}List<Emp> all = IEmpDAOInstance().findAll(keyWord);Iterator<Emp> iter = all.iterator();
%><center>
<form action = "emp_search.jsp" method="post">请输入查询的关键字<input type="text" name = "kw"><input type="submit" value="百度">
</form>
<table border="1" width="80%"><tr><td>雇员编号</td><td>雇员姓名</td><td>雇员工作</td><td>雇佣日期</td><td>雇员工资</td></tr>
<%while (iter.hasNext()){Emp emp = ();%><tr><td><%Empno()%></td><td><%Name()%></td><td><%Job()%></td><td><%Hiredate()%></td><td><%Sal()%></td></tr>
<%}
%>
</table>
</center>
<%}catch(Exception e){e.printStackTrace();}
%>
</body>
</html>
问题:
编译错误:
Exception in thread "mainptions.jdbc4.CommunicationsExcepti
on: Communicationslink failure你的EmpDAOProxy中的添加方法写了死循环,应该是this.dao.doCreate(),你写成了this.doCreate()
问题解决:
1/端口号写错,3360 - - > 3306
2/
ResultSetrs = uteQuery(); //执行查询操作
if (rs.next()){ // 修改为if
编译后再出错:
java.lang.NullPointerException
atzz.dao.impl.EmpDAOImpl.findByNo(EmpDAOImpl.java:57)
atzz.dao.proxy.EmpDAOProxy.doCreate(EmpDAOProxy.java:19)
st.TestDAOInsert.main(TestDAOInsert.java:15)
解决:
56行: PreparedStatementpstmt pstmt= prepareStatement(sql);// 应该是this.pstmt,之前已经定义过
57行:this.pstmt.setInt(1,empno); // 编译提示这行错误!设置雇员编号
ResultSetrs = uteQuery(); //执行查询操作
本文发布于:2024-02-03 02:02:38,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170689695647907.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |