实验 JDBC基础(3)
一、相关知识点
1、JDBC基本概念
2、JDBC数据增、删、改,事务控制等
二、实验目的:
理解Java连接数据库的基本概念。理解利用Statement对象、PreparedStatement对象进行增、删、改操作,理解事务的概念和JDBC编程方式。
三、实验内容:
1、 利用Statement对象进行数据添加。
第一步:修改PublisherManager类的createPublisher方法,将其中的insert语言改成用Statement对象执行;
第二步:运行图书管理系统,进行添加出版社测试。
【实验结果与分析】 A、
写出替换的代码部分。
Connection conn=null; try {
conn=DBUtil.getConnection();
String sql=\java.sql.Statement st=conn.createStatement(); //st.setString(1,p.getPubid());
java.sql.ResultSet rs=st.executeQuery(sql);
if(rs.next()) throw new BusinessException(\出版社编号已经被占rs.close(); st.close();
sql=\st=conn.createStatement();
pubid='\+p.getPubid()+\;
用\);
publisherName='\+p.getPublisherName()+\;
// st.setString(1, p.getPublisherName()); rs=st.executeQuery(sql);
if(rs.next()) throw new BusinessException(\出版社名称已经存在rs.close(); st.close();
sql=\
\);
values('\+p.getPubid()+\+p.getPublisherName()+\+p.getAddress(
)+\;
}
st=conn.createStatement(); //st.setString(1, p.getPubid());
//st.setString(2, p.getPublisherName()); //st.setString(3,p.getAddress()); st.execute(sql); st.close();
e.printStackTrace(); throw new DbException(e);
} catch (SQLException e) {
2、 利用insert语句添加数据时,未指定字段值处理。
第一步:运行图书管理系统,打开读者类别管理界面,并尝试添加一个读者类别;系统将会报一个错误,请分析说明错误原因。
reader.Typeid 是主码 ,不能为空
第二步:通过数据库表结构的修改,解决上述问题。并用同样的方式解决图书借阅功能的bug。
打开 企业管理器 ;
打开 beanreadertype 表; 打开 设计表;
将 标识改成 是 ;
第三步:如果表结构不修改,应该如何修改程序,使新增读者类别的ID为表中现有数据的最大ID值+1。
public void createReaderType(BeanReaderType rt) throws BaseException{
if(rt.getReaderTypeName()==null ||
\.equals(rt.getReaderTypeName()) || rt.getReaderTypeName().length()>20){
throw new BusinessException(\读者类别名称必须是1-20个字\); }
if(rt.getLendBookLimitted()<0 || rt.getLendBookLimitted()>100){ throw new BusinessException(\借阅图书数量必须在0-100之间\); }
Connection conn=null; try {
conn=DBUtil.getConnection();
String sql=\
java.sql.PreparedStatement pst=conn.prepareStatement(sql); pst.setString(1, rt.getReaderTypeName()); java.sql.ResultSet rs=pst.executeQuery();
if(rs.next()) throw new BusinessException(\读者类别名称已经被
readerTypeName=?\;
占用\);
rs.close(); pst.close();
int i=1;
pst=conn.prepareStatement(sql); rs = pst.executeQuery(); //id=rs.getint +1;
if(!rs.next()){//是否已经有id i=1; } else{ }
sql=\
i+=rs.getInt(1);
sql=\;
BeanReaderType(readerTypeId,readerTypeName,lendBookLimitted) values(?,?,?)\;
}
finally{ } }
if(conn!=null)
try { }
conn.close();
// TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { pst=conn.prepareStatement(sql); pst.setInt(1,i);
pst.setString(2, rt.getReaderTypeName()); pst.setInt(3,rt.getLendBookLimitted()); pst.execute(); rs.close(); pst.close();
e.printStackTrace(); throw new DbException(e);
} catch (SQLException e) {
3、 利用PreparedStatement对象进行数据修改。
在SystemUserManager类中,新建一个modifyUserName方法,实现用户名称(username字段)的修改功能。并修改其main函数,将admin用户的名称改为:超级管理员。
【实验结果与分析】 A、
请提供方法代码和main函数代码。
public void modifyUserName(String username)throws BaseException{
Connection conn=null;
try { }
finally{ } }
if(conn!=null)
try { }
conn.close();
// TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { conn=DBUtil.getConnection();
String sql = \java.sql.Statement st=conn.createStatement(); int rs = st.executeUpdate(sql);
e.printStackTrace(); throw new DbException(e);
'\+username+\;
} catch (SQLException e) {