图书管理系统总结——数据库操纵(二)

这里以最基本的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();//返回值是删除的记路数目
    }
    
时间: 2025-01-13 00:41:52

图书管理系统总结——数据库操纵(二)的相关文章

图书管理系统总结——数据库操纵(三):数据库安全性

最后一次记录,说一说数据库的安全性. 一.一致性控制 为了保证事务的一致性,可以采用显示事务语句以及在数据库中添加完整性约束.比如在还书时候,要同时修改用户的用户表中的剩余借书本数,借阅记录中的已还选项以及图书表中剩余本数.这个时候可以有两个策略: 1.采用触发器,在MySQL中定义触发器:(仅举个例子) DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `db_book`.`Borrow` AFTER INS

[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website development Tags asp.net / mvc4 相关资源 ibatis manual pro git 廖雪峰的官方网站 BookMS-V1.0 上一篇链接 任务简介 开发工具:VS2010 项目框架:MVC4 浏览器:Chrome 数据库ORM框架:iBatis.net 数据库:mysql 后端开

脚踏实地 志存高远-快意图书管理系统开发侧记之二

以网络技术为主的信息技术的飞速发展,使得图书管理信息化向着更加智能.快捷的方向不断变革.原有的一批图书管理软件的处理模式.软件架构.操作流程已不能满足网络时代所要求的双向互动.信息共享.高度智能的操作诉求.快意团队于2011年10月成立,并在调研数家企事业单位.大中专学校.中小学校图书管理业务流程及需求的基础上,研制了快意图书管理综合解决方案,开发了快意图书综合管理软件,并针对不同行业特点,进行了差异化开发,推出了快意图书管理企事业版本,中小学版本.大中专院校等多个版本,为不同行业图书管理提供了

图书管理系统总结——数据库操作(一)

由于经常在晚上回宿舍写代码,没有网,故而没用老师提供的Oracle数据库服务器,在自己电脑上装了一个MySQL.而且JAVA配MySQL还是很方便的. 数据库连接: 参考了http://blog.csdn.net/superit401/article/details/51585620,讲的十分全面. 这里数据库连接专门作为一个工具类,连接的是自己的MyQL数据库.由于像登录,充值这样关键事务需要注意保证一致性,所以显示指定了事务,并为之添加行级锁,故而还有一些与数据库事务相关的操作都封装在这个类

Node.js 切近实战(二) 之图书管理系统(图书信息录入)

上一节我们讲了图书管理系统的登录,相信大家对jade模板和angular js也有了了解,今天的话我们来看一下图书信息录入.在这里我们准备使用Nosql数据库,本篇博客中使用的是MongoDB.OK.Mongo DB的安装我就不多说了,那么Node.Js平台使用mongoDB我们使用什么扩展包好呢,我觉得还是mongoose比较合适,封装了好多针对mongodb的方法,简单易用. 首先我们来看一下图书model的设计bookInfo.js. var mongoose = require('mon

Django之url上的include,URL命名和反向解析,命名空间 以及图书管理系统删除功能二合一方法

include其他的URLconfs #At any point, your urlpatterns can "include" other URLconf modules. This #essentially "roots" a set of URLs below other ones. #For example, here's an excerpt of the URLconf for the Django website itself. #It include

c语言小项目-使用mysql数据库的图书管理系统

VS2013通过MySQL方式连接到MySQL MySQL官网上C++的API有两个.一个是很成熟的mysql++,另一个是MySQL Connector/C++,近两年才出的,模仿JDBC做的,封装得很方便使用.这里使用的是mysql方式. 1.新建bookAdminSys工程 2.将文件夹MySQL目录下的include添加到VC++目录中的包含目录中,另外将文件夹MySQL目录下的lib添加到VC++目录中的库目录中 3.添加附加依赖项,将MySQL目录下的libmysql.lib添加到L

Node.js 切近实战(二) 之图书管理系统(图书查询)

最近又当上了Master,负责带项目,有时候,遇到的问题我很郁闷.比如一个Story,需求中说的是将单个修改改为批量修改,举个例子,商品信息修改,之前是用一个商品id修改,但是现在改成多个商品id修改.我的意思是直接将文本框宽度高度加大,支持回车换行就行了,然后再将API修改为支持批量查询.这个界面上上面是一个Grid,下面是一个表单,选择Grid的数据后,会加载到下面表单.只能加载一条下去,就因为这个,有人提出如果加载一个下去,那么大个文本框只显示一个选中的商品id,视觉上无法接受.说是要将选

jsp数据库增删改查——简单的图书管理系统网页版

登录(指定登录号密码的简单判断): 1 <%@ page language="java" import="java.sql.*" pageEncoding="gb2312"%> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">