图书管理系统总结——数据库操纵(二):DML语句
这里以最基本的DML语句作为例子,其他各种复杂的DML语句可以根据这些基本JDBC语句得到。
一、查询表格
这里以两张表关联查询为例,采用动态方式,根据输入的条件在WHERE语句后面接上相应的各种条件
/** * 图书信息查询 * @param con * @param book * @return * @throws Exception */ public ResultSet list(Connection con,Book book)throws Exception{ StringBuffer sb=new StringBuffer("select * from t_book b,t_bookType bt where b.bookTypeId=bt.id"); //两张表关联查询,有bookTypeID才能查询 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)//“请选择”的ID为-1 { sb.append(" and b.bookTypeId="+book.getBookTypeId()); } PreparedStatement pstmt=con.prepareStatement(sb.toString()); return pstmt.executeQuery();//执行,返回结果集 }
返回的Resultset是结果集,比如可以给下拉框初始化。结果集使用方法是用一个游标将集合与一条记录架起桥梁:
ResultSet rs=bookTypeDao.list(con, new BookType());//得到书种类结果集 //添加第一项ID=-1 bookType=new BookType(); bookType.setBookTypeName("请选择..."); bookType.setId(-1);//请选择的ID为-1 this.bookTypeJCB.addItem(bookType); while(rs.next()){//rs一定要先next()一次,指向第一条记录 bookType=new BookType(); bookType.setId(rs.getInt("id")); bookType.setBookTypeName(rs.getString("bookTypeName")); this.bookTypeJCB.addItem(bookType);//添加项
二、数据插入
为了防止SQL注入,这里采用预编译方式。
/** * 图书添加 * @param con * @param book * @return * @throws Exception */ public int add(Connection con,Book book)throws Exception//返回影响几条记录 { String sql="insert into t_book values(null,?,?,?,?,?,?,?,?)";//注意和自己创建的表格属性对应 PreparedStatement pstmt=con.prepareStatement(sql);//创建对象,得到SQL语句,先将带参数语句送入DBMS,防止SQL注入 pstmt.setString(1, book.getBookName());//传递参数,填问号的值 pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getSex()); pstmt.setFloat(4, book.getPrice()); pstmt.setInt(5, book.getBookTypeId()); pstmt.setString(6, book.getBookDesc()); pstmt.setInt(7, book.getBookNum()); pstmt.setString(8, book.getPublisher()); return pstmt.executeUpdate();//执行SQL语句,返回影响的记录数目 }
三、数据修改:
/** * 图书信息修改 * @param con * @param book * @return * @throws Exception */ public int update(Connection con,Book book)throws Exception { String sql="update t_book set bookName=?,author=?,sex=?,price=?,bookDesc=?,bookTypeId=? where id=?";//SQL修改语句 PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setString(1, book.getBookName()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getSex()); pstmt.setFloat(4, book.getPrice()); pstmt.setString(5, book.getBookDesc()); pstmt.setInt(6, book.getBookTypeId()); pstmt.setInt(7, book.getId()); return pstmt.executeUpdate();//返回值是影响的记路数目 }
四、数据删除:
/** * 图书信息删除 * @param con * @param id * @return * @throws Exception */ public int delete(Connection con,int id)throws Exception { String sql="delete from t_book where id=?"; PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setInt(1, id); return pstmt.executeUpdate();//返回值是删除的记路数目 }