J2EE学习笔记--JDBC

JDBC的实质就是使用统一的、标准化界面存取多种能够数据源,从而实现不同数据库系统间的互操作性。JDBC主要由一组JAVA类库和借口库组成,涉及到的JAVA标准包有java.sql.*javax.sql.*JDBC由应用层和驱动程序层两层构成。主要的接口和核心类包括Driver接口、DreverManager类、Connection类、Statement类、PreparedStatement类、CallableStatement以及ResultSet类等。JDBC是由JavaSoft公司开发的,JDBC API是一个标准统一的SQL数据存取接口。它为Java程序提供了一个统一缝地操作各种数据库的接口,程序员编程时,可以不关心它所要操作的数据库是哪个厂家的产品,从而提高了软件的通用性,而且在Internet上确实无法预料你的用户想访问什么类型的数据库。只要系统上安装了正确的驱动器组,JDBC应用程序就可以访问其相关的数据库。

 

1.       Driver接口

每个JDBC数据库驱动程序都会提供Driver接口应用程序调用。此外,在使用Driver接口之前,Java/JSP程序必须使用import语句导入java.sql.*包;在Java/JSP开发中要连接数据库,必须先加载数据库厂商提供的数据库驱动程序。不同类型JDBC驱动程序在JSP编程时的加载方式不同。

2.       DriverManager

DriverManager(驱动程序管理器)类是JDBC的管理程序,在驱动程序和应用程序之间工作。DriverManager类管理着数据库和相应驱动程序之间建立的连接。DriverManger类所提供getConnection函数所返回的Connection接口类十分重要,大部分数据库编程工作都要通过Connection接口类中提供的各类函数才能进行。

3.       数据库连接

DriverManger对象中提供了一个getConnection函数,调用该函数可获得一个数据库连接。该函数有3种不同的函数重在形式,可以在编程时根据具体情况调用。

static Connection getConnection(String url):和一个通过url指定的数据库建立连接。

static Connection getConnection(String url,Properties info):和一个通过url指定的数据库建立连接。info提供了一些属性,这些属性里包括了userpassword等属性。

static Connection getConnection(String url,String user,String password):传入参数用户名为user,密码为password,和一通过url指定的数据库建立连接。

url的格式中用冒号分隔。其中jdbc表示协议,JDBC只有一种协议,显然协议是唯一的。Subprotocol表示子协议,用来区分JDBC数据库驱动程序,不同数据库厂商的数据库驱动程序的子协议都不同。subname表示子名,由特定的驱动程序确定,不同的数据库厂商一般采用不用的名称。

getConnection函数返回的Connection对象代表着与指定的数据库的连接,即在已经加载的Driver驱动和指定的数据库之间建立连接。

4.       数据库操作

对于数据库的操作需要通过java.sql.Statementjava.sql.PrepareStatementjava.sql.CallableStatement类之一来完成。Statement类提供了执行基本SQL语句操作的功能。PrepareStatement类继承了Statement类,提供了SQL语句预编译的功能,因而可以显著提高SQL执行的性能。CallableStatement类从PrepareStatement类继承而来,可以用来执行数据库中的存储过程。

关于事务,一般情况下符合JDBC的驱动程序都必须支持事务。事务是由一条或多条语句序列组成,这些语句要么执行,要么全部都不执行,即具有原子特性,也就是说这些操作都是原子操作,不可分开的操作。比如两个银行账户AB之间转帐,要从A账户转1000元到B账户上去。也就是从A账户减去1000元,然后在B账户加上1000元。但是如果在A账户减去的1000元还没加到B账户上去时候,程序发生了异常,要是不撤销A账户减去1000元的操作A账户就白白损失了1000元。所以A账户减去1000元和B账户加上1000元的操作要么就一起成功,要么就一起失败,这两个操作绑定在一起就是一个事务。提交事务用commit函数,撤销事务用rollback函数。

5.       ResultSet结果实例

JDBC来实现访问数据库记录可以采用下面的几个步骤:

1 通过驱动器管理器获取连接接口。

2 获得Statement或它的子类。

3 限制Statement中的参数。

4 执行Statement

5 查看返回的行数是否超出范围。

6 关闭Statement

7 处理其它的Statement

8 关闭连接接口。

 

Class.forName( " com.microsoft.jdbc.sqlserver.SQLServerDriver " ).newInstance(); // 加载数据库驱动
     try   {
    String url 
= "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
    String user 
= "sa";
    String pwd 
="";
    java.sql.Connection conn 
= DriverManager.getConnection(url,user,pwd);//使用url,user,pwd与指定的数据库建立连接
    java.sql.Statement st = conn.createStatement();//创建执行SQL语句的statement
    java.sql.ResultSet rs = st.executeQuery("select * from authors");//执行SQL返回结果集ResultSet
    
    out.println(
"<table border='1'>");
    
while(rs.next())
    
{
      out.println(
"<tr>");
      
      
/**使用列名访问数据**/
      out.println(
"<td>"+rs.getString("au_id")+"</td>");
      out.println(
"<td>"+rs.getString("au_lname")+"</td>");
      out.println(
"<td>"+rs.getString("au_fname")+"</td>");
      out.println(
"<td>"+rs.getString("phone")+"</td>");
      out.println(
"<td>"+rs.getString("address")+"</td>");
      out.println(
"<td>"+rs.getString("city")+"</td>");
      out.println(
"<td>"+rs.getString("state")+"</td>");
      out.println(
"<td>"+rs.getString("zip")+"</td>");
      
      
/**使用序列号访问数据**/
      
/*out.println("<td>"+rs.getString(1)+"</td>");
      out.println("<td>"+rs.getString(2)+"</td>");
      out.println("<td>"+rs.getString(3)+"</td>");
      out.println("<td>"+rs.getString(4)+"</td>");
      out.println("<td>"+rs.getString(5)+"</td>");
      out.println("<td>"+rs.getString(6)+"</td>");
      out.println("<td>"+rs.getString(7)+"</td>");
      out.println("<td>"+rs.getString(8)+"</td>");
*/

      
      out.println(
"</tr>");
    }

    out.println(
"</table>");
    rs.close();
//释放返回结果集
    conn.close();//释放数据库连接
    }

    
catch (SQLException ex)
    
{
    out.println(
"error!");
    out.println(ex.getMessage());
    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值