实验 JDBC基础(综合)

更新时间:2023-07-25 07:39:22 阅读: 评论:0

实验  JDBC基础(综合)
一、相关知识点
    1、JDBC基本概念
    2、元数据
二、实验目的:
    理解元数据的概念,利用jdbc完成复杂业务逻辑。
三、实验内容:
1、 在booklib工程的DBUtil类中增加main函数,并在main函数中编写代码,列出booklib数据库中所有表的名字。
提示:会用到如下代码片段,请自行测试resultt中那一列为表名
【实验结果与分析】
A、写出代码部分。
public static void main(String[] args) throws SQLException {
        DatabaMetaData dbmd = null;
        Connection conn = null;
       
        conn = DBUtil.getConnection();
        dbmd = conn.getMetaData();
       
        String types[] = {"VIEW","TABLE"};
        ResultSet rs = dbmd.getTables(null, null, "%", types);
       
        while(rs.next())
        {
            System.out.print(rs.getString("TABLE_NAME")+"\t");
        }
}
悬而不决2、在上述main函数中,增加代码,提取特定表中的字段信息,要求输出字段名字和数据类型。
提示:除了用课件中的方法,还可以用如下代码片段:
A、写出代码部分。
                   
   
    public static void main(String[] args) throws SQLException {
        DatabaMetaData dbmd = null;
        Connection conn = null;
       
        conn = DBUtil.getConnection();
        dbmd = conn.getMetaData();
       
        //String types[] = {"VIEW","TABLE"};
        ResultSet rs = Columns(null, "%", "beanbook","%");
       
        while(rs.next())
        {
            System.out.print(rs.getString("COLUMN_NAME")+"    ");
            System.out.println(rs.getString("TYPE_NAME"));
        }
    }
3、在BookLendManager类中设计函数public void calPenal();完成如下功能:提取所有超期未归还的借阅记录,输出其读者id、图书条码、借阅时间、超期天数(假设用户仅能借阅30天,请自行将数据库表中的已有数据的借阅时间往前调);计算每条数据的罚金(罚金算法为超期30天内每天0.1元,31-60天每天0.15元,60天以上每天0.2元),并写入数据库表的penalSum字段中。函数编写完成后,通过main函数进行测试验证。
注:请注意事务控制
【实验结果与分析】
A、 请提供程序代码。
public void calPenal() throws DbException {
avoidable
        List<BeanBookLendRecord> result=new ArrayList<BeanBookLendRecord>();
        Connection conn=null;
        try {
            conn=DBUtil.getConnection();
            String sql="lect readerid,bookBarcode,lendDate,TIMESTAMPDIFF(DAY,lendDate,now()) from BeanBookLendRecord where TIMESTAMPDIFF(DAY,lendDate,now())>30 and returndate is null";
准备的英文
            java.sql.PreparedStatement pst=conn.prepareStatement(sql);
            java.sql.ResultSet rs=pst.executeQuery();
            while(rs.next()){
                String readerid = rs.getString(1);
                String bookBarcode = rs.getString(2);
                java.sql.Date lendDate = (rs.getDate(3));
                int days = rs.getInt(4)-30;
                double中英网 penalSum = -1.0;
                if(days<=30){
                    penalSum = 0.1*days;
                }
                el if(days>30 && days<=60){
                    penalSum = 0.15*(days-30)+3;
                }
                el if(days>60){
                    penalSum = 0.2*(typedefdays-60)+4.5+3;
                }
                System.out.println(readerid);
                System.out.println(bookBarcode);
                System.out.println(lendDate);
                System.out.println(penalSum+"\n");
               
                sql="update beanbooklendrecord t penalSum=? where readerid=? and bookBarcode=?";
                java.sql.PreparedStatement koripst2=conn.prepareStatement(sql);
                pst2.tDouble(1, penalSum);
                pst2.tString(2, readerid);
                pst2.tString(3, bookBarcode);
               
                pst2.execute();
                pst2.clo();
            }
           
            pst.clo();
            rs.clo();
           
        } catch (SQLException e) {
            e.printStackTrace();
            throw new DbException(e);
        }
        finally{
            if(conn!=null)
                try {
                    conn.clo();
                } catch (SQLException e) {
otdr                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }
    public static void main(String[] args) throws DbException{
        BookLendManager b = new BookLendManager();
       
        b.calPenal();
    }
4、在BookLendManager类中设计函数public void stopReader(),完成如下功能:停止总罚金超过10元的读者服务(将其stopDate字段值设为当前时间,stopUrId值设为任意一个管理员)。
要求:(1)任意一个管理员的账号需要通过sql语句查询出来,不能为常量
(2)统计读者罚金时,仅统计未归还的图书罚金
(3)再编写函数public void stopReader2(),要求采用不同的方法(一种方法是找到相应的读者一个一个的停止服务,另一种方式是通过一个sql语句完成设置;注意第一种方法时需要进行事务控制)
【实验结果与分析】
A、请给出两个函数的代码。
public void stopReader() {
        Connection conn=null;
        String ad = null;
        try {
            conn=DBUtil.getConnection();
            conn.tAutoCommit(fal);
            String sql=mbl"lect urid from beansystemur WHERE urtype like \"管理员\"";
            java.sql.Statement st=conn.createStatement();
            java.sql.ResultSet rs= st.executeQuery(sql);
           
            if(rs.next()) ad=rs.getString(1);
        //    st.clo();
            sql="lect readerid,penalSum from beanbooklendrecord where penalSum>10 and returnDate is null";
            java.sql.Statement st2=conn.createStatement();
            java.sql.ResultSet rs2= st2.executeQuery(sql);
        //    st2.clo();
            while(rs2.next()) {
                sql="update beanreader t stopDate=? WHERE readerid=?";
                java.sql.PreparedStatement pst=conn.prepareStatement(sql);
                pst.tTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis()));
                pst.tString(2, rs2普及的意思杯酒人生在线观看.getString(1));
                pst.executeUpdate();
            //    pst.clo();
                sql="update beanreader t stopUrId=? WHERE readerid=?";
                java.sql.PreparedStatement pst2=conn.prepareStatement(sql);
                pst2.tString(1, ad);
                pst2.tString(2, rs2.getString(1));
                pst2.executeUpdate();
            //    pst2.clo();
            }
            conn.commit();
            conn.clo();
        }catch (SQLException e) {
            e.printStackTrace();

本文发布于:2023-07-25 07:39:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1116077.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   代码   罚金   完成   方法   借阅
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图