21.4.2 如何操作数据库

既然连接上了数据库,本节将介绍如何操作数据库。操作数据库主要是查询,下面学习如何进行查询。

查询操作是数据库中最基本的语句。通过如下的语句,可以对数据库执行查询,查询的结果是以结果集ResultSet的形式返回。有关ResultSet集,可以参考API文档。


String sql="select*from表名"

ResultSet result=st.executeQuery(sql);


在表中,提取数据可以使用结果集ResultSet中的方法来提取。如果表中的列都是字符型数据,那么可以使用getString()方法。具体的可以查询相关的API,而在getString()中的参数则可以是这个表中的列名,也可以是表中的列的序号。

【实例21.2】下面举一个有关操作数据库的实例,这个实例的前提是在前面已经建立ODBC数据源。


01 import java.sql.*;

02 public class sqltest

03 {

04 private Connection con;

05 public static void main(String[]args)

06 {

07 sqltest test=new sqltest();

08 Connection con=test.getConnection();///定义一个数据连接

09 String sql="select*from teacherinfo";///定义一个SQL查询语句

10 test.getStudent(con, sql);

11 }

12 public void getStudent(Connection con, String sql)

13 {

14 try

15 {

16 Statement st=con.createStatement();///定义一个结果集

17 ResultSet rs=st.executeQuery(sql);

18 while(rs.next())

19 {

20 String name1=rs.getString(1);

21 String code1=rs.getString(2);

22 String sexy1=rs.getString(3);

23 String age1=rs.getString(4);

24 System.out.println("\n姓名:"+name1+"\t 学号:"+code1+"\t 性别:"+sexy1+"\t 年龄:"+age1);

25 }

26 st.close();

27 con.close();

28 }

29 catch(Exception e){e.printStackTrace();}

30 }

31 public Connection getConnection() ///连接数据库

32 {

33 String url1="jdbc:odbc:schoolmanage";///定义数据库的URL

34 String username="";///用户名

35 String password="";///密码

36 try

37 {

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

39 ///登录到建立的数据源上去,也可以说登录到数据库上去

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

41 }

42 catch(SQLException e)

43 {e.printStackTrace();

44 }

45 catch(ClassNotFoundException ex)

46 {ex.printStackTrace();}

47 return con;

48 }

49 }


【代码说明】第33行是指向前面创建的ODBC数据源,第38~40行是通过ODBC登录到数据库。第31~48行用来获取数据库连接,第12~30行用来获取所有的数据库数据。

【运行效果】


姓名:王鹏 学号:2001 性别:男 年龄:23

姓名:宋江 学号:2001 性别:男 年龄:23

姓名:李丽 学号:2001 性别:女 年龄:23

姓名:钱敏 学号:2001 性别:女 年龄:23

姓名:朱庭 学号:2001 性别:男 年龄:23

姓名:祖海 学号:2001 性别:女 年龄:23

姓名:周浩 学号:2001 性别:男 年龄:23

姓名:张平 学号:2001 性别:男 年龄:23

姓名:孙军 学号:2001 性别:男 年龄:23

姓名:王俊 学号:2001 性别:男 年龄:23

姓名:李鹏 学号:2001 性别:男 年龄:23

姓名:孙鹏 学号:2001 性别:男 年龄:23

姓名:王海 学号:2001 性别:男 年龄:23

姓名:周洁 学号:2001 性别:女 年龄:23

姓名:宋平 学号:2001 性别:女 年龄:23

姓名:吴浩 学号:2001 性别:男 年龄:23

姓名:武芬 学号:2001 性别:女 年龄:23


以上的实例将前面所有讲过的数据库方面的知识联系起来了。

【实例21.3】下面结合前面的数据结构举一个实例。在这个实例中存在数据结构的知识和数据库的知识。为了能够让读者看懂这个实例,下面将分步骤来讲述这个程序。


(1)构造一个学生类,代码如下所示。


01 import java.sql.*;

02 import java.util.Vector;

03 ///创建一个学生类

04 ///stname1是指学生 姓名

05 ///stcode1是指 学号

06 ///stsexy1是指 性别

07 ///stmajor1是指专业

08 ///stbirthday是指出 生年月

09 ///staddress1是指 家庭地址

10 ///set是设置器

11 ///get是访问器

12 ///tostring是让对象以字符串形式输出的方法

13 class student1 //创建一个学生类

14 {

15 private String stname1;

16 private String stcode1;

17 private String stsexy1;

18 private String stmajor1;

19 private String stbirthday1;

20 private String staddress1;

21 public student1(String name, String code)

22 {

23 stname1=name;

24 stcode1=code;

25 }

26 public String getstudentname()

27 {

28 return stname1;

29 }

30 public String getstudentcode()

31 {

32 return stcode1;

33 }

34 public void setstudentsex(String sexy)

35 {

36 stsexy1=sexy;

37 }

38 public String getstudentsex()

39 {

40 return stsexy1;

41 }

42 public void setstudentmajor(String major)

43 {

44 stmajor1=major;

45 }

46 public String getstudentmajor()

47 {

48 return stmajor1;

49 }

50 public void setstudentbirthday(String birthday)

51 {

52 stbirthday1=birthday;

53 }

54 public String getstudentbirthday()

55 {

56 return stbirthday1;

57 }

58 public void setstudentaddress(String address)

59 {

60 staddress1=address;

61 }

62 public String getstudentaddress()

63 {

64 return staddress1;

65 }

66 public String toString()

67 {

68 String information="学生 姓名:"+stname1+" 学号:"+stcode1+" 性别:"+stsexy1+"出 生年月:

69"+stbirthday1+"专业:"+stmajor1+"\n";

70 return information;

71 }

72 }


(2)构造一个连接数据库的类。在这个类中,有连接数据库的方法,也有查询数据库的方法。详细代码如下所示。


73 ///这是一个对象的存储类

74 ///getstudent方法是将数据库中的字段数据提取出来赋值给Vector数据结构中的对象

75 ///st是用来返回数据库结果的对象

76 ///rs是指结果集对象

77 ///rs.getString方法是从数据库表中提取字段值

78 ///v是指vector的对象

79 ///sql是指用来查询的一个sql查询语句

80 class querytable

81 {

82 public Vector getstudent(Connection con)

83 {

84 Vector v=new Vector();

85 try

86 {

87 Statement st=con.createStatement();

88 String sql="select*from studentinfo";

89 ResultSet rs=st.executeQuery(sql);

90 while(rs.next())

91 {

92 ///通过结果集将数据库中的字段赋值给字符串。再将字符串赋值给学生对象

93 String name=rs.getString(1);

94 String code=rs.getString(2);

95 String sexy=rs.getString(3);

96 String major1=rs.getString(4);

97 String birthday=rs.getString(5);

98 student1 ss=new student1(name, code);

99 ss.setstudentsex(sexy);

100 ss.setstudentmajor(major1);

101 ss.setstudentbirthday(birthday);

102 //ss.setstudentaddress(address);

103 v.add(ss);///再将对象存储到Vector数据结构中去

104 }

105 st.close();

106 con.close();

107 }

108 catch(Exception e)

109 {

110 e.printStackTrace();

111 }

112 return v;

113 }

114 }

115 ///用来连接数据库的类

116 ///con是指定用来连接数据库的连接类

117 ///username是进入数据库的用户名

118 ///password是指进入数据库的密码

119 ///url1是连接数据库的URL

120 class dbconnection ///创建一个连接数据库的类

121 {

122 private Connection con;

123 public Connection getConnection()

124 {

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

126 String username="";

127 String password="";

128 try

129 {

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

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

132 }

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

134 }

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

136 }

137 return con;

138 }

139 }


(3)在主运行类中,将数据库中的表数据输出。详细代码如下所示。


140 ///主运行类

141 ///db是一个连接数据库的类的对象

142 ///v1是一个vector数据结构的对象

143 ///query是一个连接数据库并将数据导入的一个类的对象

144 public class studentsql

145 {

146 public static void main(String[]args)

147 {

148 try

149 {

150 dbconnection db=new dbconnection();///创建一个数据库连接

151 Connection con1=db.getConnection();

152 querytable query=new querytable();

153 Vector v1=query.getstudent(con1);///将所有数据库中数据存储到Vector数据结构中

154 System.out.println("目前vector中的学生个数为:"+v1.size());

155 for(int i=0;i<(v1.size());i++)

156 {

157 System.out.println((student1)v1.get(i));///输出所有的学生对象

158 }

159 }catch(Exception e){e.printStackTrace();}

160 }

161 }


【代码说明】上述代码是先建立一个学生类,然后,将学生类对象放入数据结构Vector中,再连接数据库,从数据库中取数据,放入到Vector中,这样就可以从Vector中直接取数据了。这个实例也是一个比较通用的实例,希望读者能好好地分析它,因为在后面还要用到。

说明

本例读取的是数据库中的studentinfo表,如果没有,需要自己创建一个,可以根据前面介绍的teacherinfo表的插入语句直接改变。

【运行效果】


目前vector中的学生个数为:17

学生 姓名:王鹏 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:宋江 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:李丽 学号:2001 性别:女出 生年月:1975-9-1专业:计算机

学生 姓名:钱敏 学号:2001 性别:女出 生年月:1975-9-1专业:计算机

学生 姓名:朱庭 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:祖海 学号:2001 性别:女出 生年月:1975-9-1专业:计算机

学生 姓名:周浩 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:张平 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:孙军 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:王俊 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:李鹏 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:孙鹏 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:王海 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:周洁 学号:2001 性别:女出 生年月:1975-9-1专业:计算机

学生 姓名:宋平 学号:2001 性别:女出 生年月:1975-9-1专业:计算机

学生 姓名:吴浩 学号:2001 性别:男出 生年月:1975-9-1专业:计算机

学生 姓名:武芬 学号:2001 性别:女出 生年月:1975-9-1专业:计算机