emp .get 语句 动态 query tin != pst
这里以最基本的 DML 语句作为例子,其他各种复杂的 DML 语句可以根据这些基本 JDBC 语句得到。
一、查询表格
这里以两张表关联查询为例,采用动态方式,根据输入的条件在 WHERE 语句后面接上相应的各种条件
- /**
- * 图书信息查询
- * @param con
- * @param book
- * @return
- * @throws Exception
- */
- publicResultSet list(Connection con,Book book)throws Exception{
- StringBuffer sb=newStringBuffer("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());
- returnpstmt.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 intadd(Connection con,Book book)throwsException//返回影响几条记录
- {
- 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());
- returnpstmt.executeUpdate();//执行SQL语句,返回影响的记录数目}
三、数据修改:
- /**
- * 图书信息修改
- * @param con
- * @param book
- * @return
- * @throws Exception
- */
- public intupdate(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());
- returnpstmt.executeUpdate();//返回值是影响的记路数目}
四、数据删除:
- /**
- * 图书信息删除
- * @param con
- * @param id
- * @return
- * @throws Exception
- */
- public intdelete(Connection con,intid)throws Exception
- {
- String sql="delete from t_book where id=?";
- PreparedStatement pstmt=con.prepareStatement(sql);
- pstmt.setInt(1, id);
- returnpstmt.executeUpdate();//返回值是删除的记路数目
- }
图书管理系统总结——数据库操纵(二)
来源: http://www.bubuko.com/infodetail-2069694.html