JSP与数据库连接问题详解

本文详细解析了JSP如何通过JDBC与数据库进行连接,包括JSP访问Access和MS-SQL Server的具体步骤,以及JDBC的四大核心类:DriverManager、Connection、Statement和ResultSet的使用方法。通过实例介绍了JDBC-ODBC桥驱动程序如何实现JSP与Access数据库的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jsp与access的数据库连接
jsp怎样与access的数据库连接啊
 
<%
String path=request.getRequestURI();
int end1=path.lastIndexOf('/');
path=path.substring(0,end1+1);

String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+request.getRealPath(path+"jx0713.mdb");

//String sConnStr = "jdbc:odbc:stu";

Connection conn = null;
ResultSet rs = null;

try {
        Class.forName(sDBDriver);
    }catch(java.lang.ClassNotFoundException e)
    {
      System.err.println("faq(): " + e.getMessage());
    }


conn = DriverManager.getConnection(sConnStr,"","");
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);

String sql="select * from 完成情况表 order by 名称,月份";
rs=stmt.executeQuery(sql);
%>

 

 JSP访问MS-SOL Server

1、JSP访问Access

(1)载入驱动程序类别:

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

(2)建立数据库连接,注:jspdata为用户自定义的ODBC数据源名称

Connection con = DriverManager.getConnection("jdbc:odbc:jspdata");

 (3)建立Statenment对象

Statenment stmt = con.createStatenment(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_ONLY);

(4)建立ResultSet(结果集)对象,并执行SQL语句

ResultSet rs = stmt.executeQuery("select * from 表名");

2、JSP访问MS-SOL Server

String url = "jdbc:odbc:jsql";   注:jspl为用户自定义的ODBC数据源名称

(1)载入驱动程序类别:

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

(2)建立数据库连接

Connection con = DriverManager.getConnection(url,"userName","pasword");

 (3)建立Statenment对象

Statenment stmt = con.createStatenment(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_ONLY);

(4)建立ResultSet(结果集)对象,并执行SQL语句

String sql = "select * from 表名";

ResultSet rs = stmt.executeQuery(sql);

 JSP通过JDBC与数据库连接

3.JSP通过JDBC与数据库连接

JDBC与具体的某种数据库连接,是直接通过JDBC API类库中的类来自动装载驱动程序的。此类库一般在java.sql包中,它包含了用于实现与数据库连接的其它功能的类,包括与数据库建立连接、传送查询和接受查询结果。

例子:与数据库建立连接发送SQL语句处理结果

 

connection cn=DriverManager.getConnection("jdbc:odbc:wombat","login","password");

 

Statement stmt=cn.createStatement();//发送SQL语句

 

ResultSet rs=stmt.executeQuery("select a,b,c from table1");

 

while(rs.next()){ int x=rs.getInt("a"); String s=rs.getString("b"); float f=rs.getFloat("c"); }//处理结果

3.1 JDBC的四个类

以下是四个类的详细介绍

3.1.1.DriverManager类

此类用于装载驱动程序,它所有的成员都是静态成员,所以在程序中无须对它进行实例化,直接通过类名就可以访问它。DriverManager类是JDBC的管理层,作用于用户和驱动程序间加载驱动程序

对于简单的应用程序,一般程序员需要在此类中直接使用的唯一方法是DriverManager.getConnection。正如名称所示,该方法将建立与数据库的连接。JDBC 允许用户调用 DriverManager 的方法getDriver、getDrivers 和registerDriver 及 Driver 的方法connect。但多数情况下,让 DriverManager类管理建立连接的细节为上策

通过调用方法?Class.forName。这将显式地加载驱动程序类。由于这与外部设置无关,因此推荐使用这种加载驱动程序的方法。

Class.forName(“sun.jdbc.odbc.jdbcOdbcDriver”)

 

当调用Driver.Manager.getConnection()发出连连接请求时,DriverManager将检查每个驱动程序,看它是否可以建立连接。

Connection getConnection(String url,String user,String password)

其中user和password是登录数据库的用户和密码第一个参数是指向数据库的url,它的格式如下: jdbc:(subprotocol):(subname)

subprotocol:子协议指定连接何种数据库或用什么方式连接数据库
subname: 确立一个连接,可以是一个数据源名,也可以是指向一个网上数据库

如:以下是通常用驱动程序(JDBC-ODBC桥驱动程序),并连一个student数据源,用匿名登录的的示例:

Class.forName(“sun.jdbc.odbc.jdbcOdbcDriver”);//加载驱动程序

 

String url=”jdbc:odbc:student”;

 

Connection cn=DriverManager.getConnection(url,”anonymous”,””);

GetConnection():返回一个连接类对象.若成功,此对象就指向此数据库的一个连接;否则,此对象将为空null

 

3.1.2.Connection类

connection类是指向同一个数据库的连接。作用:管理指向数据库的连接,如:向数据库发送查询和接收数据库的查询结果都是在它基础上的;完成同数据库的连接的所有任务之后关闭此连接

connection = DriverManager.getConnection

("jdbc:mysql//localhost/accounts?user=&password=");

void close():关闭同数据库的连接并释放占有的JDBC资源
Boolean isClose():判断是否仍与数据库连接

 

3.1.3.Statement类

作用:Statement对象用于将SQL语句发送到数据库中。
创建Statement对象建立了到特定数据库的连接后,就可用该连接发送SQL语句。

1)createStatement创建。

Connection cn=DriverManager.getconnection(rul,”sunny”,””);

statement stmt=cn.createStatement();

为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement的方法

2)使用Statement对象执行语句Statement接口提供了三种执行SQL语句的方法 :

executeQuery():用于产生单个结果集的语句,如:select语句

executeUpdate():用于执行insert、update或delete、语句等,返回值是一个整数,指示受影响的行数(即更新计数)
execute():用于执行返回多个结果集、多个更新计数或二者组合的语句,语句完成.语句在已执行且所有结果返回时,即认为已完成。

对于返回一个结果集的executeQuery()方法,在检索完ResultSet对象的所有行时该语句完成。 对于方法executeUpdate(),当它执行时语句即完成 在少数调用execute()的情况下,只有在检索所有结果集或它生成的更新计数之后语句才完成关闭Statement对象。Statement对象将由Java垃圾收集程序自动关闭。但我们最好显示地关闭它们,因为会立即释放数据管理系统资源,有助避免潜在内存问题。

ResultSet executeQuery(String sql):主要关闭方法.返回一个静态的sql查询结果
int executeUpdate(String sql):查询一行sql声明中insert、update、delete的数目或返回0
void close():关闭同数据库的连接和所占有的JDBC资源

 

 

 

3.1.4.ResultSet类(纪录集)

作用:装载查询结果,并可以通过它的不同方法提取出查询结果。
ResultSet包含符合SQL语句中条件的所有行,且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。

ResultSet.next():将纪录指针移动到ResultSet纪录集的下一行,使之成为当前行。注:纪录集是一张二维表,其中有查询所返回的列标题及相应的值。

对于方法executeUpdate(),当它执行时语句即完成. 在少数调用execute()的情况下,只有在检索所有结果集或它生成的更新计数之后语句才完成.

3.2. 实例介绍

数据库连接的要素: IP地址端口号(端口号对某个数据库服务是基本固定的,除非特别设定)意味着对应的数据库的驱动程序选择数据库帐号、密码(是分配给数据库的)发出SQL语句(通过Statement对象发送)

下面将通过一个实例介绍在JSP中利用JavaBeans通过JDBC-ODBC Bridge访问Access客户信息数据库。

在本地数据库程序使用Microsoft的Access等数据库时,可以使用Sun公司开发的JDBC-ODBC桥,借用此技术JSP程序就可以访问带有ODBC驱动程序的数据库。这样既保留JDBC的优点,又可以使用Microsoft提供的ODBC数据源与Access连接。不管对方是何种数据库,只要有ODBC接口就可以直接使用JDBC-ODBC桥与数据库连接,而无需因为后端数据库的改变而改动相应的程序代码,实现了应用层与数据库层的完美分离。如果需要变后端数据库为MySQL,只需在ODBC数据源中安装MySQL的驱动程序之后,就可以直接使用MySQL数据库了。

1.首先建立一个Access数据库Customers.mdb,其中表Customers有字段id(自动增量型,并设为主关键字)、name(文本型,长度10)、address(文本型,长度30)、info(备注型)。

配置步骤: 在“开始”——“设置”——“控制面板”——“管理工具”——“数据源(ODBC)”——“系统DSN”——“添加”——“选择数据源驱动程序”——“完成” ——“ODBC安装填写数据源名,点击‘确定’”——“完成”即可。

2.在Control Panel(控制面板)的ODBC Datasource模块中加入System DSN,取名Customers,并指向Customers.mdb。

3. JDBC-ODBC桥接器。

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

这里,Class是包java.lang中的一个类,该类通过调用它的静态方法forName就可以建立JDBC-ODBC桥接器。建立桥接器的时候可能发生异常,所以桥接器标准是 :

try{ Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver") ; }

catch (ClassNotFoundException e) {}

4 .创建一个JavaBeans,命名为DBconn.java,并保存在支持JSP的Web服务器的缺省文档根目录下。

DBconn.java主要是封装与数据库的连接操作,内容如下:

import java.sql.*;

  public class DBconn {

  String DBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";

  String ConnStr = "jdbc:odbc:Customers";

  Connection conn = null;

  ResultSet rs = null;

  public DBconn {

  try {

  Class.forName(DBDriver);   //加载数据库驱动程序

  }

  catch(java.lang.ClassNotFoundException e) {

  System.err.println("DBconn (): " + e.getMessage());

  } }

  public ResultSet executeQuery(String sql) {

  rs = null;

  try {

  conn = DriverManager.getConnection(ConnStr);   //与DBMS建立连接

  Statement stmt = conn.createStatement();

  rs = stmt.executeQuery(sql); }

  catch(SQLException ex) {

  System.err.println("aq.executeQuery: " + ex.getMessage()); }

  return rs;

  } }

 

5.DBconn.java编辑好后,在DOS状态下,进而用JDK的javac命令编译DBconn.java形成相应的class文件。

6.建立Customers.jsp文件,在JSP中调用以上编译好的JavaBeans,其内容如下:

〈html〉

  〈head〉

  〈meta http-equiv="Content-Type" content="text/html; charset=gb2312"〉

  〈title〉客户信息调查〈/title〉

  〈/head〉

  〈body〉

  〈p〉〈b〉客户信息调查〈/b〉〈/p〉

  〈%@ page language="java" import="java.sql.*" %〉

  〈jsp:useBean id="DBconn1" scope="page" class="DBconn" /〉

  〈%

  ResultSet RS = DBconn1.executeQuery("SELECT * FROM Customers");

  while (RS.next()) {

  out.print("〈LI〉" + RS.getString("name") + "〈/LI〉");

  out.print("〈LI〉" + RS.getString("address") + "〈/LI〉");

  out.print("〈LI〉" + RS.getString("info") + "〈/LI〉");

  }

  RS.close();

  %〉

  〈/body〉

〈/html〉

在〈 jsp:useBean〉标记内定义了几个属性,其中id是整个JSP页面内该Bean的标识、scope属性定义了该Bean的生存时间、class属性说明了该Bean的类文件。

 

Class.forName("公司名.数据库名.驱动程序名")
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值