实验 JDBC基础(综合)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验JDBC基础(综合)
一、相关知识点
1、JDBC基本概念
2、元数据
二、实验目的:
理解元数据的概念,利用jdbc完成复杂业务逻辑。
三、实验内容:
1、在booklib工程的DBUtil类中增加main函数,并在main函数中编写代码,列出
booklib数据库中所有表的名字。
提示:会用到如下代码片段,请自行测试resultset中那一列为表名
【实验结果与分析】
A、写出代码部分。
public static void main(String[] args) throws SQLException {
DatabaseMetaData 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 { DatabaseMetaData dbmd = null;
Connection conn = null;
conn = DBUtil.getConnection();
dbmd = conn.getMetaData();
//String types[] = {"VIEW","TABLE"};
ResultSet rs = dbmd.getColumns(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 {
List
Connection conn=null;
try {
conn=DBUtil.getConnection();
String sql="select
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;
}
else if(days>30 && days<=60){
penalSum = 0.15*(days-30)+3;
}
else if(days>60){
penalSum = 0.2*(days-60)+4.5+3;
}
System.out.println(readerid);
System.out.println(bookBarcode);
System.out.println(lendDate);
System.out.println(penalSum+"\n");
sql="update beanbooklendrecord set penalSum=? where readerid=? and bookBarcode=?";
java.sql.PreparedStatement pst2=conn.prepareStatement(sql);
pst2.setDouble(1, penalSum);
pst2.setString(2, readerid);
pst2.setString(3, bookBarcode);