1.数据访问层:com.java.dao;
先在BookDao里面写图书查询的方法:
//图书查询方法
public ResultSet list(Connection con,Book book) throws Exception{
//动态结合,用StringBuffer比较好
StringBuffer sb=new StringBuffer("select * from t_book b,t_bookType bt where b.bookTypeId=bt.id");
//sql语句查询,当条件有多个时,就用and暂时替代where
if(StringUtil.isNotEmpty(book.getBookName())){
sb.append(" and b.bookName like '%"+book.getBookName()+"%'");
}
if(StringUtil.isNotEmpty(book.getAuthor())){
sb.append(" and b.author like '%"+book.getAuthor()+"%'");
}
if(book.getBookTypeId()!=null && book.getBookTypeId()!=-1){
sb.append(" and b.bookTypeId ="+book.getBookTypeId());
}
//调用replaceFirst方法将and替换掉
PreparedStatement pstmt=con.prepareStatement(sb.toString().replaceFirst("and", "where"));
return pstmt.executeQuery();
}
2.视图层:com.java.view;
然后在视图层里写图书查询的界面:
将三个框进行修改别名:
图书名称框改为:s_bookName_Txt;
图书作者框改为:s_author_Txt;
图书类别修改为:s_bookType_Jcb;
然后在主界面中关联一下图书查询的界面即Book_Manage_InterFrm;
其后,我们写一下界面中图书类别的下拉框方法:
/**
* 初始化下拉框
* @param type 下拉框类型
*/
private void fillBookType(String type){
Connection con=null;
try{
con=dbUtil.getCon();
ResultSet rs=bookTypeDao.list(con, new BookType());
if("search".equals(type)){
BookType bookType=new BookType();
bookType.setBookTypeName("请选择...");
bookType.setId(-1);
this.s_bookType_Jcb.addItem(bookType);
}
while(rs.next()){
BookType bookType=new BookType();
bookType.setBookTypeName(rs.getString("bookTypeName"));
bookType.setId(rs.getInt("id"));
if("search".equals(type)){
this.s_bookType_Jcb.addItem(bookType);
}else if("modify".equals(type)){
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.close(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意在界面中有两个下拉框,我们加一个参数type来区分是查询的下拉框还是修改的下拉框;
然后在主方法里调用方法fillBookType;
这个时候运行,下拉框就被数据内容填充了!
接下来写填充表格内容的方法:
/**
* 初始化表格数据
* @param book
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private void fillTable(Book book){
DefaultTableModel dtm=(DefaultTableModel) bookTable.getModel();
//清空表格
dtm.setRowCount(0);
//连接数据库
Connection con=null;
try {
con=dbUtil.getCon();
ResultSet rs=bookDao.list(con, book);
while(rs.next()){
Vector v=new Vector();
v.add(rs.getString("id"));
v.add(rs.getString("bookName"));
v.add(rs.getString("author"));
v.add(rs.getString("sex"));
v.add(rs.getFloat("price"));
v.add(rs.getString("bookDesc"));
v.add(rs.getString("bookTypeName"));
dtm.addRow(v);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
dbUtil.close(con);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
这样运行之后表格自然就有了数据库表t_book里面的内容了,如图所示:
最后写查询方法,这和之前的图书类别查询是一样的:
最后测试:
可以看到查询成功!