26.6.2 存储类的设计

【实例26.8】选择什么样的数据结构对以上的学生类对象进行存储呢?本例选择Vector这种数据结构,对学生进行存储。这种数据结构同字符串数组的用法几乎一样,具体的代码如下所示。


01 import java.util.Vector;

02 import java.sql.*;

03 class storesystem

04 {

05 public Vector getstudent(Connection con, String sql)

06 {

07 Vector v=new Vector();

08 try

09 {

10 Statement st=con.createStatement();

11 ResultSet rs=st.executeQuery(sql);

12 while(rs.next())

13 {

14 String name=rs.getString(1);

15 String code=rs.getString(2);

16 String sexy=rs.getString(3);

17 String age=rs.getString(4);

18 String address=rs.getString(5);

19 String birthday=rs.getString(6);

20 String grade=rs.getString(7);

21 String major=rs.getString(8);

22 student ss=new student(name, code);

23 ss.setsexy(sexy);

24 ss.setmajor(major);

25 ss.setbirthday(birthday);

26 ss.setaddress(address);

27 ss.setage(age);

28 ss.setgrade(grade);

29 v.add(ss);

30 }

31 rs.close();

32 }

33 catch(Exception e)

34 {

35 e.printStackTrace();

36 }

37 return v;

38 }

39 40

public student getobject(Connection con, String stname)

41 {

42 student sst=null;

43 try

44 {

45 Statement st=con.createStatement();

46 String sql="select*from studentinfo where stname='"+stname+"'";

47 ResultSet rs=st.executeQuery(sql);

48 ///通过结果集中的getString方法从数据库表中提取表字段的数据

49 ///再将提取出来的数据赋值给学生对象

50 ///最后将学生对象存储到vector数据结构中

51 while(rs.next())

52 {

53 String code=rs.getString(2);

54 String sexy=rs.getString(3);

55 String age=rs.getString(4);

56 String address=rs.getString(5);

57 String birthday=rs.getString(6);

58 String grade=rs.getString(7);

59 String major=rs.getString(8);

60 sst=new student(stname, code);

61 sst.setsexy(sexy);

62 sst.setmajor(major);

63 sst.setbirthday(birthday);

64 sst.setaddress(address);

65 sst.setage(age);

66 sst.setgrade(grade);

67 }

68 rs.close();

69 70

}

71 catch(Exception e)

72 {

73 e.printStackTrace();

74 }

75 return sst;

76 }

77 ///通过设置数据库的URL、密码、用户名来建立与数据库的连接

78 public Connection getConnection()

79 {

80 Connection con=null;

81 String url1="jdbc:odbc:schoolmanage";

82 String username="";

83 String password="";

84 try

85 {

86 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

87 con=DriverManager.getConnection(url1,username, password);

88 }

89 catch(SQLException e){e.printStackTrace();

90 }

91 catch(ClassNotFoundException ex){ex.printStackTrace();

92 }

93 return con;

94 }

95 }


【代码说明】以上代码从数据库中提取数据,然后按照每个字段的不同,分别赋值给学生类中的每个字段。最后,将学生类的对象添加到Vector数据结构中。这样数据存取速度大大加快,每次对数据库的操作,就不必在数据库中执行。

本程序属于本地程序,如果是在网络数据库中,这样操作会增加网络的负担。解决方案是可以将网络数据库下载到本地的Vector的数据结构中,然后直接操作本地数据结构,等操作完后,再提交到数据库中,这样就能加快速度。