《数据库系统概论》课程设计
------学生信息管理系统
2.3系统查询
系统查询包括基本信息、成绩明细、成绩汇总三大部分 2.4系统管理
系统管理包括用户维护、退出系统两大部分
3.系统功能结构图
- 16 -
小组成员:孙义 姚哲 张坷
《数据库系统概论》课程设计
------学生信息管理系统
第五章 系统实现及测试
1.系统实现关键代码
1.1连接数据库的公共类CommonaJdbc.java
数据库的连接操作是系统中最重要的一步,系统运行首先要进行数据库的连接操作,如果连接失败,则程序无法运行。在包util下建立类CommonaJdbc.java文件,导入jdbc包文件,定义一个静态类型的类变量connection用来建立数据库的连接,这样在其他类中就可以直接访问到这个变量,定义私有方法getCon()为实例的变量赋值,代码如下:
package appstu.util;//导入jdbc所需要的包 import java.sql.Connection; import java.sql.DriverManager; public class CommonaJdbc {
public static Connection conection = null; public CommonaJdbc(){ getCon(); }
private Connection getCon(){ try{
Class.forName(\ conection = DriverManager.getConnection
(\ //
conection
=
DriverManager.getConnection(\ame=DB_Student \
System.out.println(\数据库操作成功,祝贺你\
}catch(java.lang.ClassNotFoundException classnotfound){ classnotfound.printStackTrace(); }catch(java.sql.SQLException sql){
new appstu.view.JF_view_error(sql.getMessage()); sql.printStackTrace(); }
return conection; } }
1.2操作数据库的公共类JdbcAdapter.java
(1)在util包下建立公共类JdbcAdapter.java,该类封装了对所有的数据表的添加修改删除操作,前台业务中的对应功能是通过该类来完成的,它的设计思想是,通过上面的设计各种实体对象作为参数,进而执行类中的相应方法。为了确保数据库操作的准确性,需定义一个私有的类方法vaildateID()来完成数据的验证功能,这个方法首先通过数据表的生成表的添加语句。代码如下:
- 17 -
小组成员:孙义 姚哲 张坷
《数据库系统概论》课程设计
------学生信息管理系统
private boolean validateID(String id,String tname,String idvalue){ String sqlStr = null;
sqlStr = \ + id + \ System.out.println(sqlStr); try{
con = CommonaJdbc.conection;
pstmt = con.prepareStatement(sqlStr); java.sql.ResultSet rs = null; rs = pstmt.executeQuery(); if (rs.next()) {
if (rs.getInt(1) > 0) return true; }
}catch(java.sql.SQLException sql){
new appstu.view.JF_view_error(\执行的SQL语句为:\\n\错误信息为:\ sql.printStackTrace(); return false; }
return false;
}
(2)定义一个私有类方法AdapterObject()用来执行数据表的所有操作,方法参数为生成的sql语句。代码如下:
private boolean AdapterObject(String sqlState){ boolean flag = false;
System.out.println(\执行的语句为:\ con = CommonaJdbc.conection; try{
con = CommonaJdbc.conection;
pstmt = con.prepareStatement(sqlState); pstmt.execute(); flag = true;
JOptionPane.showMessageDialog(null,infoStr + \数据成功!!!\系统提示\ }catch(java.sql.SQLException sql){
appstu.view.JF_view_error error = new JF_view_error(\执行的SQL语句为:\\n\+ sqlState + \错误信息为:\ flag = false;
sql.printStackTrace(); }
return flag;
}
- 18 -
小组成员:孙义 姚哲 张坷
《数据库系统概论》课程设计
------学生信息管理系统
(3)定义了一个公共方法InsertOrUpdate_Obj_grade_sub,用来执行学生成绩的存盘操作。这个方法的参数为学生成绩对象Obj_grade_sub数组变量,定义一个String类型变量aqlStr,然后在循环体中调用stmt的addBatch()方法,将sqlStr变量放入到batch中,最后执行stmt的executeBatch()方法。源代码如下:
public boolean InsertOrUpdateObject(Obj_gradeinfo objgradeinfo){
String sqlStatement = null;
if (validateID(\ sqlStatement = \ +
objgradeinfo.getGradeID()
+
\
='\
+
objgradeinfo.getGradeName()
+ \\
infoStr = \更新年级\ }else{
sqlStatement = \ + objgradeinfo.getGradeName() + \ infoStr = \添加年级\ }
System.out.println(sqlStatement); return AdapterObject(sqlStatement);
}
objgradeinfo.getGradeID()
+
\
+
1.3检索数据的公共类RetrieveObject.java
数据的检索功能在整个系统中占有重要的位置,系统中的所有查询都是通过该公共类实现的,该公共类通过传递的查询语句调用相应的类方法,查询满足条件的数据或数据集合。我们在这个公共类中定义了三种不同的方法来满足系统查询的需要:
(1)定义一个类的公共方法getObjectRow(),用来检索一条满足条件的数据,该方法返回值类型为Vector,其代码如下:
public Vector getObjectRow(String sqlStr){ Vector vdata = new Vector(); connection = CommonaJdbc.conection; try{
rs = connection.prepareStatement(sqlStr).executeQuery(); rsmd = rs.getMetaData(); while(rs.next()){
for ( int i = 1 ; i <= rsmd.getColumnCount() ; i ++){ vdata.addElement(rs.getObject(i)); } }
}catch(java.sql.SQLException sql){ sql.printStackTrace(); return null; }
- 19 -
小组成员:孙义 姚哲 张坷
《数据库系统概论》课程设计
------学生信息管理系统
return vdata;}}
(2)定义一个类的公共方法getTableCollection(),用来检索满足条件的数据集合,该方法返回值类型为Collection,代码如下: public Collection getTableCollection(String sqlStr){
System.out.println(\执行的集合查询为 :\ Collection collection = new Vector(); connection = CommonaJdbc.conection; try{
rs = connection.prepareStatement(sqlStr).executeQuery(); rsmd = rs.getMetaData(); while(rs.next()){
Vector vdata = new Vector();
for ( int i = 1 ; i <= rsmd.getColumnCount() ; i ++){ vdata.addElement(rs.getObject(i)); }
collection.add(vdata); }
}catch(java.sql.SQLException sql){
new appstu.view.JF_view_error(\执行的SQL语句为:\\n\错误信息为:\ sql.printStackTrace(); return null; }
return collection;
}
(3)定义类方法getTableModel()用来生产一个表格数据模型,该方法返回类型为DefaultTableModle,该方法中的一个数组参数name用来生成表模型中的列名,方法getTableModel()的详细代码如下:
public DefaultTableModel getTableModel(String[] name,String sqlStr){ Vector vname = new Vector();
for (int i = 0 ; i < name.length ; i++){ vname.addElement(name[i]); }
DefaultTableModel tableModel = new DefaultTableModel(vname,0); connection = CommonaJdbc.conection; try{
rs = connection.prepareStatement(sqlStr).executeQuery(); rsmd = rs.getMetaData(); while(rs.next()){
Vector vdata = new Vector();
for ( int i = 1 ; i <= rsmd.getColumnCount() ; i ++){ vdata.addElement(rs.getObject(i));} tableModel.addRow(vdata); }
- 20 -
小组成员:孙义 姚哲 张坷