📄 teacherdao.java
字号:
package Sys.dao;
import java.sql.*;
import java.io.*;
import javax.swing.*;
import java.util.*;
import Sys.db.*;
import Tools.Teacher;
public class TeacherDao {
private Connection conDB=null;
public TeacherDao(){
conDB=DatabaseTool.conDB();//所以这里的dao引用的是DatabaseTool的连接,所以我们可以通过DatabaseTool来关闭
}
public void addTeacher(Teacher teacher) {//这段代码写的好差
PreparedStatement ps=null;
if(teacher.getOLEPhoto()!=null){
try{
//ps=conDB.prepareStatement("insert into Teacher(teacherid,teachername,teacherkey" +
// ",title,sex,classid,photo) values(?,?,?,?,?,?,?)");
ps=conDB.prepareStatement("insert into Teacher(teacherid,teachername,teacherkey" +
",title,sex,classid,photo) values(?,?,?,?,?,?,?)");
ps.setString(1, teacher.getTeacherID());
ps.setString(2, teacher.getTeacherName());
ps.setString(3, teacher.getTeacherKey());
ps.setString(4, teacher.getTitle());
ps.setString(5, teacher.getSex());
ps.setString(6, teacher.getClassID());
ps.setBinaryStream(7, teacher.getOLEPhoto(), teacher.getOLEPhoto().available());
//上面没有捕抓异常,因为在它之前的类声明已经捕抓了,不再抛出异常
//ps.setString(8, teacher.getBlant());
ps.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,已经存在该老师ID,请重新输入!");
}catch(IOException ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,获取图片失败,由于选择路径不对,请重新选择!");
}finally{
DatabaseTool.closeStatement(ps);
}
}else{
try{
ps=conDB.prepareStatement("insert into Teacher(teacherid,teachername,teacherkey" +
",title,sex,classid) values(?,?,?,?,?,?)");
ps.setString(1, teacher.getTeacherID());
ps.setString(2, teacher.getTeacherName());
ps.setString(3, teacher.getTeacherKey());
ps.setString(4, teacher.getTitle());
ps.setString(5, teacher.getSex());
ps.setString(6, teacher.getClassID());
//上面没有捕抓异常,因为在它之前的类声明已经捕抓了,不再抛出异常
//ps.setString(8, teacher.getBlant());
ps.executeUpdate();
}catch(SQLException ew){
ew.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,已经存在该老师ID,请重新输入!");
}finally{
DatabaseTool.closeStatement(ps);
//连接conDB不应该在这里关闭,因为还没有提交
}
}
}
public void modifyClassTeacher(Teacher teacher,String classid) {
PreparedStatement ps=null;
if(teacher.getOLEPhoto()!=null){
try{
ps=conDB.prepareStatement("update Teacher set teacherid=?,teachername=?,teacherkey=?" +
",sex=?,title=?,classid=?,photo=? where classid=?");
ps.setString(1, teacher.getTeacherID());
ps.setString(2, teacher.getTeacherName());
ps.setString(3, teacher.getTeacherKey());
ps.setString(4, teacher.getTitle());
ps.setString(5, teacher.getSex());
ps.setString(6, teacher.getClassID());
ps.setBinaryStream(7, teacher.getOLEPhoto(), teacher.getOLEPhoto().available());
ps.setString(8, classid);
ps.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,已经存在该老师ID,请重新输入!");
}catch(IOException ep){
ep.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,获取图片失败,由于选择路径不对,请重新选择!");
}finally{
DatabaseTool.closeStatement(ps);
}
}else{
try{
ps=conDB.prepareStatement("update Teacher set teacherid=?,teachername=?,teacherkey=?" +
",sex=?,title=?,classid=? where classid=?");
ps.setString(1, teacher.getTeacherID());
ps.setString(2, teacher.getTeacherName());
ps.setString(3, teacher.getTeacherKey());
ps.setString(4, teacher.getTitle());
ps.setString(5, teacher.getSex());
ps.setString(6, teacher.getClassID());
ps.setString(7, classid);
ps.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,已经存在该老师ID,请重新输入!");
}finally{
DatabaseTool.closeStatement(ps);
}
}
}
public void delClassTeacher(int teacherid){
PreparedStatement ps=null;
try{
ps=conDB.prepareStatement("delete from Teacher where teacherid=?");
ps.setInt(1, teacherid);
ps.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,该学号不存在,可能已删除!");
}finally{
DatabaseTool.closeStatement(ps);
}
}
//我一开始是将下面的参数设为teacherid,后面发现错了
public Teacher getTeacher(String classid){
byte[] by=new byte[1000*1024];
PreparedStatement ps=null;
ResultSet rs=null;
Teacher teacher=null;
try{
ps=conDB.prepareStatement("select * from Teacher where classid=?");
ps.setString(1, classid);
rs=ps.executeQuery();
if(rs.next()){
teacher=new Teacher();
teacher.setTeacherID(rs.getString("teacherid"));
teacher.setTeacherName(rs.getString("teachername"));
teacher.setTeacherKey(rs.getString("teacherkey"));
//这里很神奇,下面两行代码我是调换了的,发现错了,因为跟数据库放置顺序不同
teacher.setTitle(rs.getString("title"));
teacher.setSex(rs.getString("sex"));
//我还想为什么这里会错了,如果之前没有插入图片就会错,因为Input会是null,所以加多一个判断
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
int ch;
InputStream input=rs.getBinaryStream("photo");
if(input!=null){
while ((ch = input.read()) != -1)
bytestream.write(ch);
by=bytestream.toByteArray();
teacher.setOLEPhoto(new ByteArrayInputStream(by));
}
teacher.setClassID(rs.getString("classid"));
}
}catch(SQLException e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,获取老师资料失败,可能该班级老师已经给删除!");
}catch(IOException ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "对不起,获取老师相片失败,文件可能损坏!");
}finally{
DatabaseTool.closeResultSet(rs);
DatabaseTool.closeStatement(ps);
}
return teacher;
}
public Teacher getTeacherid(String teacherid){
byte[] by=new byte[1000*1024];
PreparedStatement ps=null;
ResultSet rs=null;
Teacher teacher=null;
try{
ps=conDB.prepareStatement("select * from Teacher where teacherid=?");
ps.setString(1, teacherid);
rs=ps.executeQuery();
if(rs.next()){
teacher=new Teacher();//为什么在这里才分配空间,因为如果查询老师不成功也可以返回null,进行判断,如登录时
teacher.setTeacherID(rs.getString("teacherid"));
teacher.setTeacherName(rs.getString("teachername"));
teacher.setTeacherKey(rs.getString("teacherkey"));
teacher.setTitle(rs.getString("title"));
teacher.setSex(rs.getString("sex"));
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
int ch;
InputStream input=rs.getBinaryStream("photo");
if(input!=null){
while ((ch = input.read()) != -1)
bytestream.write(ch);
by=bytestream.toByteArray();
teacher.setOLEPhoto(new ByteArrayInputStream(by));
}
teacher.setClassID(rs.getString("classid"));
}
}catch(SQLException e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "没有该用户");
}catch(IOException ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "获取图片出错");
}finally{
DatabaseTool.closeResultSet(rs);
DatabaseTool.closeStatement(ps);
}
return teacher;
}
public List<Teacher> getAllTeacher(){
PreparedStatement ps=null;
ResultSet rs=null;
List<Teacher> teacherlist=null;
try{
ps=conDB.prepareStatement("select * from Teacher");
rs=ps.executeQuery();
teacherlist=new ArrayList<Teacher>();
Teacher teacher=null;
while(rs.next()){
teacher=new Teacher();
teacher.setTeacherID(rs.getString("teacherid"));
teacher.setTeacherName(rs.getString("teachername"));
teacher.setTeacherKey(rs.getString("teacherkey"));
teacher.setSex(rs.getString("sex"));
teacher.setTitle(rs.getString("title"));
teacher.setOLEPhoto(rs.getBinaryStream("photo"));
teacher.setClassID(rs.getString("classid"));
teacher.setBlant(rs.getString("blant"));
teacherlist.add(teacher);
}
}catch(SQLException e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "获取老师列表失败");
}finally{
DatabaseTool.closeResultSet(rs);
DatabaseTool.closeStatement(ps);
}
return teacherlist;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -