[学习笔记]用JDBC-ODBC Bridge连接并查询SQL Server数据库

来源:互联网 发布:手机游戏帧数软件 编辑:程序博客网 时间:2024/04/30 03:29

开始看的一本书介绍JSP连接数据库的方法有好几种,穿插着讲了一大堆,由于本人还是初学菜鸟,看了一会就看晕了,一会写了个用JDBC-ODBC的,还没写完又来了个直接用JDBC Native Bridge的,马上又介绍Java API中的相关类,弄的我一头雾水,也不专心看了,但不学习还是不行的……呵呵,找了本简明的教材,介绍的简单易懂,一会就把数据库连接成功了,顺便写在这里方便以后查阅,也方便遇到同样问题的初学者。

一.建立数据库和数据源

=========================

在SQL Server 2000中新建一个数据库,命名为testDaabase,在数据库中建立一张表叫userTable,建表的SQL语句如下------------建表SQL语句------------------------

CREATE TABLE userTable(
user_id bigint identity(1,1) not null primary key,
user_name varchar(40),
 user_password varchar(40),
user_true_name varchar(40),
user_age int,
user_sex varchar(2),
user_address varchar(80),
user_telephone varchar(20),
add_time datetime default(getdate())
)

-----------------------------------------------------

下面为该数据库建立一个数据源,过程很简单,几个"下一步"就搞定了,只要数据库装的没问题,这里就不写了

二.建立JDBC-ODBC桥连接器

==============================

我们有了一个数据源,这个数据源就是一个数据库,为了要连接这个数据库,需要建立一个JDBC-ODBC桥连接器,也就是加载桥连接器驱动程序     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

这里Class是包java.lang中的一个类,通过调用它的静态方法forName就可以建立JDBC-ODBC桥连接器,不过这一步可能发生异常,所以应该这样写:

try
 {
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
 }
 catch(ClassNotFoundException e)
 {
  out.println("class not found");
 }

三查询记录

======================

要查询数据库中的记录,必须和数据库建立连接,由于这里使用的是JDBC-ODBC方式访问数据库,那么这里就要与数据源建立连接(说明:ODBC相当与一个中间件,所以连接ODBC,而ODBC已经和数据库在第一步建立了连接)

1>连接到数据库:首先使用包java.sql中的Connection类声明一个对象,然后再使用类DriverManager调用它的静态方法getConnection创建这个连接对象

Connection  con=DriverManager.getConnection("jdbc:odbc:testDB","sa","000"); //这里testDB是数据源的名字,sa是数据库的用户名,000是密码,如果没有为数据源设置用户名和密码就使用空字符串""

这样就建立了到数据库的连接

2>向数据库发送SQL语句

首先使用Statement声明一个SQL语句,然后通过刚才创建的连接数据库的对象con调用方法creatStatment()创建这个SQL语句对象(有点难理解,语文学的好就没事了):

try{ Statement sql=con.creatStatement();} catch(SQLException e){}

3>处理查询结果

有了SQL语句对象以后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改.并将查询结果存放在一个ResultSet类声明的对象中,也就是说SQL语句对数据库的查询操作将返回一个ResultSet对象

rs=sql.executeQuery("SELECT * FROM userTable");

ResultSet是以统一形式的列组织的数据行组成,ResultSet对象一次只能看到一个数据行,使用next()方法移动到下一数据行,获得一行数据后,ResultSet可以使用getxxxx方法获得字段值,将位置索引(第一列用1,第二列用2等)或字段名传递给getxxxxx方法的参数即可.ResultSet对象的方法可以参见API

------------EDN-------------

--------------------参考程序:---------------------------------

<%@page contentType="text/html;charset=gb2312" %>
<%@page import="java.sql.*" %>
<html>
<head><title>SQL</title></head>
<body>
<%
 Connection con;
 Statement sql;
 ResultSet rs;
 try
 {
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
 }
 catch(ClassNotFoundException e)
 {
  out.println("class not found");
 }
 try
 {
  con=DriverManager.getConnection("jdbc:odbc:testDB","sa","000");
  sql=con.createStatement();
  rs=sql.executeQuery("SELECT * FROM userTable");
  
  out.print("<Table Border>");
        out.print("<TR><td colspan=8 align=center>用户数据</td></tr>");  
        out.print("<TR>");
            out.print("<Td width=100 >"+"用户ID号");
            out.print("<Td width=50 >"+"用户名");
            out.print("<Td width=100>"+"用户真实姓名");
            out.print("<Td width=50>"+"年龄");
            out.print("<Td width=50>"+"性别");
            out.print("<Td width=100>"+"联系地址");
            out.print("<Td width=100>"+"联系电话");
            out.print("<Td width=100>"+"添加时间");
         out.print("</TR>");
       while(rs.next())
       { out.print("<TR>");
             out.print("<TD >"+rs.getLong(1)+"</TD>");
             out.print("<TD >"+rs.getString(2)+"</TD>");
             out.print("<TD >"+rs.getString(4)+"</TD>");
             out.print("<TD >"+rs.getInt("user_age")+"</TD>");
             out.print("<TD >"+rs.getString("user_sex")+"</TD>");
             out.print("<TD >"+rs.getString("user_address")+"</TD>");
             out.print("<TD >"+rs.getString("user_telephone")+"</TD>");
             out.print("<TD >"+rs.getString("add_time")+"</TD>");
        out.print("</TR>") ;
        }
        out.print("</Table>");
        con.close();
     }
     catch(SQLException e1)
   {
      out.print("SQL异常!");
   }
 
 %>
</body>
</html>

-------------------------------------------------------

此程序在Windows XP/sp2+J2Sdk1.5.0+Apache Tomcat/5.5.17+SQL Server 2000 调试通过

原创粉丝点击