回麻雀苑主页 到麻雀苑-搜狐博客
4-2使用JDBC连接SQL2000
作者:老麻雀
2006-11-5 9:58:15
使用JDBC连接SQL2000数据库
JSP动态网页连接访问数据库的途径很多。本节介绍使用纯JDBC驱动连接SQL Server 2000数据库的方法和具体操作。使用纯JDBC驱动,速度快、安全性高,但是操作稍微复杂一些。SQL Server 2000数据库属于大中型数据库。因此这种使用纯JDBC驱动连接SQL Server 2000的组合,大多数应用在大中型的网站。
本节重点介绍使用纯JDBC连接数据库的技术,它可以检验前面连接数据库准备工作有无错误,更是后面学习写入、查询数据库功能的基础知识和操作。我们先看一下下面的范例。
一、 范例演示和相应的准备工作
演示的前提:
1. 配置好开发运行环境;
2. 将随书光盘中的范例ch4文件夹,复制到resin2.1.6\doc文件夹内;
3. 安装SQL Server 2000;
4. 安装SQL Server 2000的补丁程序sql2ksp3;
5. 安装JDBC,安装完成后将Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib文件夹中到三个驱动文件,复制到J2sdk1.4.2\jre\lib\ext文件夹中。
6. 启动SQL2000,使用企业管理器创建jd数据库。
7. 在jd库中创建名称为exam的表。表中有name、sex、password三个字段,字段类型都使用char、长度为10,允许空值。
6、7两步创建数据库和表的过程,介绍如下:
1) 启动SQL Server 2000的“企业管理器”,单击控制台根目录前的+,逐级展开下级目录,展开到“数据库”一级,如图4-13所示:
图4-13
2) 单击工具栏“新建库”,的图标,进行建库操作,如图4-14所示窗口:
图4-14
3) 在名称处输入jd,单击“确定”,就完成了名为jd数据库的创建。
4) 然后打开新建的数据库“jd”,再继续打开“表”。在窗口右窗格任意位置,右击鼠标选择“新建表”,如图4-15所示:
图4-15
5) 选择“新建表”单击后。进入建表操作,如图4-16所示:
图4-16
6) 在建表的窗口的第一行,列名输入name,字段类型选择char,长度选择10,自动允许空值。同样在第二行、第三行输入password、sex两个字段。然后单击工具栏中的保存图标。对新建的表格命名,如图4-17所示窗口:
图4-17
7) 在输入表名处,输入exam,单击“确定”,就创建好了有name、password、sex三个字段,名称为exan表。
8) 现在可以关闭创建的表,等待程序访问了。
8. 启动JSP引擎。
9. 启动Dreamweaver,修改ch4文件夹中的ch4-11.jsp文件
1) 将12行 String ConnStr="jdbc:microsoft:sqlserver://MICROSOF-4C8E71:1433;DatabaseName=jd";中“MICROSOF-4C8E71”修改为读者使用的计算机中SQL Server2000服务器的名字,服务器的名字可以到SQL Server 2000的“服务管理器”中找到,如图4-18所示:
图 4-18
也可以用本机的IP地址127.0.0.1替代“MICROSOF-4C8E71”。
2) 将26行 Connection conn=DriverManager.getConnection(ConnStr,"sa","503");中的“503”修改为安装SQL Server 2000时,为系统管理员sa设定的密码值。
演示步骤:
1. 启动IE,在地址栏键入http://127.0.0.1:8080/ch4/ch4-1.htm,如图4-19所示:
图 4-19
2. 填写用户名、密码,选择性别,单击“提交”按钮。屏幕出现下面图4-20所示:
图 4-20
读者见到图 4-30这个界面,说明JSP动态网页连接访问SQL Server 2000数据库成功了,用户在HTML表单网页提交的“姓名”、“密码”、“性别”等数据,已经写入数据库。(此时单击“查看写入信息”,或返回主页单击“查看数据库信息”,都将出现异常,看不到写入数据库都内容。因为这两处的链接都指向ch4-12.jsp,这个动态网页还没有进行修改,不能正常运行)。我们现在可以在SQL Server 2000的“企业管理器”中,找到jd数据库中的exam表,鼠标右击exam表所在行,选择“打开表”-“返回所有行”看到写入的数据。见图4-21、图4-22所示:
图4-21
图4-22
返回主页再送入新的数据,在SQL Server 2000的“企业管理器”中,重新打开表,可以看到新输入的数据。
不过刚刚接触JSP动态网页访问数据库技术的读者,初次体验上述范例,多数不能看到图4-20发界面。这是因为范例运行的前提条件较多,在准备工作中难免有错误或疏忽的操作。下面对比较常见的错误进行提示和分析。
1. JDBC驱动未能加载,数据提交后,出现图4-23界面所示:
图4-23
错误产生的原因有如下几条:
> JDBC的安装设置有错,重点检查三个驱动程序文件,是否复制到了指定位置。
> 错误的改动了ch4-11.jsp文件中的第12行、17行的内容。这两行是设定和加载驱动的语句。
2. 数据不能写入数据库。提交数据后,出现图4-23所示界面:
图4-23
产生错误的原因较多,主要有如下几条:
> 没有启动SQL Server 2000服务器,见图4-24(运行状态)、图4-25(停止状态)所示,SQL Server 2000服务器处于停止状态,不能接受访问,单击“开始/继续”按钮,即可启动SQL Server 2000服务器;
图4-24 图4-25
> 没有正确创建jd数据库、exam表,或者数据库名、表名、字段名、字段类型有错,进入SQL Server 2000“企业管理器”,认真检查创建的库、表、字段,这是出错频率较高的环节;
> 没有安装补丁程序sql2ksp3;
> ch4-11.jsp文件中的第12行、26行没改正确,其中第12行中的“MICROSOF-4C8E71”也可以改为127.0.0.1;26行的密码必须是安装SQL Server 2000为sa设定的密码值。
> 错误的改动了ch4-11.jsp文件中的第14行、27行、28行的内容。这三行是写入数据库操作的几个环节,它的语法和操作要领,后面章节中要进行重点介绍。
运行ch4-1.htm提交数据后,还有可能出现其他的一些异常界面,这大多是读者改动了ch4-11.jsp文件中其他的代码行造成的。这个范例的主要目的是,让读者能够正确的连接SQL Server 2000数据库,不要急于改动ch4-11.jsp文件中其他的代码行,代码的含义和作用在后面的章节中都有介绍。实现将数据写入数据库的表中,是本章学习知识的关键点。这个范例围绕关键点,检验连接访问SQL Server 2000数据库的前提准备工作,读者连接访问数据库失败,要重点检查前提准备工作的各个环节。
运行演示范例,写入数据成功的读者,可以修改ch4-12.jsp网页的代码,实现查询数据库数据的功能。修改的内容、方法和前面介绍的一样,只是被修改的代码行是第10行、25行。其中第10行代码,可以不作任何改动,也可将“127.0.0.1”更换为读者使用的计算机实际IP地址,或者是SQL Server2000服务器的名字。第25行仍是修改密码的值。
3. 修改完成后,启动IE,在地址栏键入http://127.0.0.1:8080/ch4/ch4-12.jsp,如图4-26所示,可以看到写入数据库表中的数据:
图4-26
二、范例的代码清单
这个范例有三个网页文件,ch4-1.htm是提交数据的表单网页、ch4-11.jsp是获得数据,并将数据写入数据库的动态网页,ch4-12.jsp是查询数据库中的数据,并送到屏幕上显示的动态网页。三个网页的代码如下:
◇-◇-◇-◇-◇-◇-◇-◇ 连接SQL Server 2000数据库 ◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-1.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>连接SQL Server 2000数据库</title>
5) </head>
6) <body bgcolor=#FFFFCC>
7) <p> </p>
8) <p><font color="#1F1FC2" size="5">个人资料填写:(使用纯JDBC连接SQL Server 2000)</font></p>
9) <form name="form1" method="post" action="ch4-11.jsp">
10) <table width="74%" border="0" align="center">
11) <tr align="center" valign="middle">
12) <td width="24%" height="32"><strong><font color="#990033" size="4">姓名:</font></strong></td>
13) <td colspan="2" align="left"> <font color="#996633">
14) <input name="name" type="text" id="name">
15) </font></td>
16) </tr>
17) <tr align="center" valign="middle">
18) <td height="34"><strong><font color="#990033" size="4">密码:</font></strong></td>
19) <td colspan="2" align="left"> <font color="#990000">
20) <input name="pass" type="password" id="password">
21) </font></td>
22) </tr>
23) <tr align="center" valign="middle">
24) <td height="31"><strong><font color="#990033" size="4">性别:</font></strong></td>
25) <td colspan="2" align="left"> <font color="#990000">
26) <input name="sex" type="radio" value="男" checked>
27) 男
28) <input type="radio" name="sex" value="女">
29) 女</font></td>
30) </tr>
31) <tr align="center" valign="middle">
32) <td height="30"><font color="#996633">
33) </font></td>
34) <td width="19%" height="30"><div align="left"><font color="#996633">
35) <input type="submit" name="Submit" value=" 提 交 ">
36) </font></div></td>
37) <td width="57%"><div align="left"><font color="#996633">
38) <input type="reset" name="Submit2" value=" 重 写 ">
39) </font></div></td>
40) </tr>
41) </table>
42) <p> </p>
43) </form>
44) <p><p> <a href="ch4-12.jsp">查看数据库信息</a></p>
45) <p>说明:<br>
46) 使用纯JDBC连接SQL Server 2000,要事先安装JDBC,并将Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib
47) 文件夹下的三个驱动文件,复制到j2sdk文件夹中jre\lib\ext文件夹下。<br>
48) 启动SQL,建库、建表后,再启动JSP引擎。<br>
49) 如果操作系统是WindowsXP并加了Pack2,还需要为SQL2000安装sql2ksp3。否则不能成功连接。<br>
50) </p>
51) </body>
52) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇将数据写入SQL数据库◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-11.jsp
1) <html>
2) <head><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
3) <title>将数据写入SQL数据库</title></head>
4) <body bgcolor="#FFFFCC"><p>
5) <%@page contentType="text/html;charset=gb2312" import="java.sql.*" %>
6) <%
7) String name=new String(request.getParameter("name"));
8) String password=new String(request.getParameter("pass"));
9) String sex=new String(request.getParameter("sex"));
10) String DBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
11) //String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver"; //用JDBC-ODBC桥连接SQL的驱动
12) String ConnStr="jdbc:microsoft:sqlserver://MICROSOF-4C8E71:1433;DatabaseName=jd";
13) //String ConnStr="jdbc:odbc:exam"; //用JDBC-ODBC桥连接SQL的数据源
14) String sql="insert into exam (name,password,sex) values (""+name+"",""+password+"",""+sex+"")";
15) try
16) {
17) Class.forName(DBDriver);
18) }
19) catch(java.lang.ClassNotFoundException e)
20) {
21) System.err.println("database:"+e.getMessage());
22) out.println("驱动未能加载");
23) }
24) try
25) {
26) Connection conn=DriverManager.getConnection(ConnStr,"sa","503");
27) Statement stmt=conn.createStatement();
28) stmt.executeUpdate(sql);
29) out.println("数据写入成功,存储完成");
30) stmt.close();
31) conn.close();
32) }
33) catch(SQLException e)
34) {
35) System.err.println("executeUpdate:"+e.getMessage());
36) out.println("数据未能写入");
37) }
38) %>
39) </p>
40) <p><a href="ch4-1.htm">返回主页</a></p>
41) <p> <a href="ch4-12.jsp">查看写入信息</a> </p>
42) </body>
43) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇ 查询SQL数据库 ◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-12.jsp
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>查询SQL数据库</title>
5) <body bgcolor="#FFFFCC"><p>
6) <%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>
7) <%
8) String DBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
9) //String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver"; //用JDBC-ODBC桥连接SQL的驱动
10) String ConnStr="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jd";
11) //String ConnStr="jdbc:odbc:exam"; //用JDBC-ODBC桥连接SQL的数据源
12) String sql="select * from exam";
13) String temp1,temp2,temp3;
14) try
15) {
16) Class.forName(DBDriver);
17) }
18) catch(java.lang.ClassNotFoundException e)
19) {
20) System.err.println("database:"+e.getMessage());
21) out.println("驱动未能加载");
22) }
23) try
24) {
25) Connection conn=DriverManager.getConnection(ConnStr,"sa","503");
26) ResultSet rs;//声明一个结果集对象
27) Statement stmt=conn.createStatement();
28) rs=stmt.executeQuery(sql);
29) out.println("数据库中的数据如下:<br>");
30) while(rs.next())
31) {
32) temp1=rs.getString(1);
33) temp2=rs.getString(2);
34) temp3=rs.getString(3);
35) out.print("姓名:"+temp1+"密码:"+temp2+"性别:"+temp3+"<br>");
36) }
37) rs.close();
38) stmt.close();
39) conn.close();
40) }
41) catch(SQLException e)
42) {
43) System.err.println("executeQuery:"+e.getMessage());
44) out.println("数据未能读出");
45) }
46) %>
47) <p><a href="ch4-1.htm">返回主页</a></p>
48) </body>
49) </html>
三、网页代码的分析
表单网页ch4-1.htm的设计界面和相关代码都比较简单,不再进行具体分析。本节主要分析介绍动态网页ch4-11.jsp、ch4-12.jsp连接数据库的相关代码,写入数据库、查询数据库的代码只做简单介绍,后面的相关章节再进行详细介绍。
JSP动态网页连接访问数据库的过程,主要由三步构成:
第一步:加载所需数据库的驱动;
第二步:进行数据库的连接;
第三步:运行SQL语句,实现具体的访问操作。
ch4-11.jsp是将数据写入数据库的动态网页,体现这三步的代码行如下:
加载驱动的代码行
在范例ch4-11.jsp中的第10行,17行;
10) String DBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
17) Class.forName(DBDriver);
第10行,定义一个字符串变量DBDriver,并将连接SQL Server2000的纯JDBC驱动赋值给变量。
第17行,是加载驱动的语句。Class.forName为关键字,( )括弧里的参数是加载的对象。这里被加载的是第10行赋值给变量第内容(纯JDBC连接SQL Server2000的驱动)。
这两行代码也可以合并为一行,写成如下格式:
Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);
连接数据库的代码行:
在范例ch4-11.jsp中的12行,26行
12) String ConnStr="jdbc:microsoft:sqlserver://MICROSOF-4C8E71:1433;DatabaseName=jd";
26) Connection conn=DriverManager.getConnection(ConnStr,"sa","503");
第12行,定义一个字符串变量ConnStr,并将连接的主要参数url内容赋值给变量。这个url参数由四个部分构成:
jdbc:microsoft:sqlserver JDBC的类型,这里是连接SQL Server2000的纯JDBC;
//MICROSOF-4C8E71 数据库服务器的名称,也可以用服务器的IP地址;
1433 SQL Server2000服务器的端口号;
DatabaseName=jd 被连接的数据库名称,这里是jd;
其中的数据库服务器的名称、被连接的数据库名称,要根据开发环境和数据库创建的实际情况,更换成当时的实际内容。
第26行,连接数据库第语句,使用DriverManager的getConnection方法创建连接对象conn,getConnection方法有三个参数,url、user、pwd,其中url是第12行定义的内容,user是SQL Server2000的用户名sa,pwd是SQL Server2000的密码;这里的密码必须设定为所在SQL Server2000服务器的密码。
运行SQL语句的代码行:
在范例ch4-11.jsp中的14行,27行,28行
14) String sql="insert into exam (name,password,sex) values (""+name+"",""+password+"",""+sex+"")";
27) Statement stmt=conn.createStatement();
28) stmt.executeUpdate(sql);
第14行,定义一个字符串变量sql,并将需要运行的SQL语句赋值给变量,语句的内容是将一条记录写入数据库的exam表。
第27行,创建一个运行SQL语句的对象stmt,以便运行SQL语句。
第28行,使用executeUpdate方法运行SQL语句。
这几行代码的详细分析,将在后面章节进行。
范例ch4-12.jsp是查询数据库的动态网页。同样有加载驱动、连接数据库的代码行,而且内容和ch4-11.jsp的代码完全一样。这说明无论是对数据库进行什么操作,都要经过“加载驱动”、“连接数据库”这两个步骤。这两步的代码,只是连接访问的“数据库”和“表”的不同略有差异。这个范例中ch4-11.jsp和ch4-12.jsp访问的“数据库”和“表”一致,代码也就相同了。
在范例ch4-12.jsp中,加载驱动的代码是第8行,16行;连接数据库的代码是第10行,25行;运行SQL语句的代码是第12行,27行,28行。
仔细观察以上这个范例的代码行,会发现代码的前半部分,都定义三个字符串变量。后半部分使用这些变量,进行驱动的加载、数据库的连接、SQL语句的运行。为什么不省掉三个变量,直接将相关内容写到代码中?因为有些代码行过长,这样可以减少代码行的长度。更重要的是,这样做可以增强代码的重用性。再编写其他访问数据库的代码时,只要将现有的代码复制,改变三个变量的复制内容,马上就可以使用。总体上可以节约编写、调试的时间。
另外还可以观察到,这个范例的代码行中,加载驱动前、连接数据库前都抛出了异常。后面有对应的异常捕捉代码。这样做是要捕捉到程序运行时产生的错误,这对初学者非常有利。当你能够非常熟练连接访问数据库时,异常抛出捕捉的代码行可以省略。
发文时请务必注意: 一、遵守国家相关法律规定,如 《北京地区互联网站电子公告服务倡议书》, 《全国人大常委会关于维护互联网安全的决定》 及中华人民共和国其他各项有关法律法规。一旦违犯法律法规,您将承担一切因您的行为而直接或间接导致的民事或刑事法律责任,本站工作人员有义务配合相关部门,提供必要的技术资料(如IP地址等)。 二、自觉遵守爱国、守法、自律、真实、文明的原则,严禁发表有人身攻击倾向、有造谣生事嫌疑的言论,严禁发表虚假广告、色情、网络传销性质的内容,本站管理人员有权删除违反规定的内容或取消违规网友的发文权限甚至删除其ID。 |