JDBC学习笔记(二)

原创 2004年08月26日 18:27:00

JDBC学习笔记()<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Thinkersky[Email:yanghuangming@rongji.com]

    大家好,又过了一天,今天的福州经历了一场暴风雨的洗礼,宁静中夹带着其惯有的雍懒.调试了一天的程序,头有点晕,放松一下,听点music,写点东东.

通过昨天的学习,JDBCJSP应用中的重要性和JDBC的概念有了一个初步的了解.为此,今天就看看如何利用JDBC API对数据库进行访问.

我这人忒笨,学编程都是从别人的例子着手,所以,为了对JSP通过JDBC访问数据库管理系统有一个感性的认识,我们先看一个简单的例程:

<!--首先导入一些必要的packages-->

<!--开始导入packages-->

package com.rongji.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

<!--导入结束-->

public class DataConn {

  public DataConn() {

  }

  public static void main(String[] args) {

    try

{

//加载驱动程序

//下面的代码为加载JDBD-ODBC驱动程序

   Class.forName("com.mysql.jdbc.Driver");

//建立连接

//第二步是用适当的驱动程序连接到DBMS,看下面的代码:

   String url="jdbc:mysql://localhost:3306/ums_db?useUnicode=true&amp;characterEncoding=GB2312";

//url创建连接

   Connection con=DriverManager.getConnection(url);

 //然后创建一个JDBC声明

   Statement stmt = con.createStatement();

 

   String query="CREATE TABLE GOODS" +

   "(GOODS_NAME VARCHAR(60),"+

   "PRICE FLOAT,"+

   "SALES INTEGER,"+

   "TOTAL INTEGER)";

 //执行声明

   stmt.executeUpdate(query);

  //关闭声明

   stmt.close();

  //关闭连接

   con.close();

   System.out.println("操作成功!下班了:)");

}

catch (Exception e)

{

//输出异常信息

 System.err.println("SQLException meet when creating goods table:"+e.getMessage());

 e.printStackTrace();

}

}

}

从这个简单的例程中我们可以看到:JSP调用JDBC API访问数据库管理系统是通过以下五个步骤来实现的:

 

1)加载特定的JDBC驱动程序

 

为了与特定的数据源连接,JDBC必须加载相应的驱动程序。这些驱动程序都是通过语句:Class.forName("Driver Name"); 来加载的。这里面有一个小技巧,我们可以在”Driver Name”出填入一系列的驱动程序名称,例如:“Class.forName("sun.jdbc.odbc.JdbcOdbcDriveroracle.jdbc.driver.OracleDriver”); 中间用冒号隔开。JSP将按照列表顺序搜索驱动程序,并且加载第一个能与给定的URL相连的驱动程序。在搜索驱动程序列表时,JSP将跳过包含不可信任代码的驱动程序,除非他与要打开的数据库管理系统是来源于同一处.

 

2)用已注册的驱动程序建立到数据库管理系统的连接

 

我们要做的第二步是用已经注册的驱动程序建立到数据库管理系统的连接,这要通过DriverManager类的getConncetion方法来实现。这里特别需要注意的是String类型 url 参数的取值,url代表一个将要连接的特定的数据库管理系统的数据源。使用不同的数据库驱动程序,url的取值方式是不同的。例程中加载了“com.mysql.jdbc.Driver”驱动,url的取值方式“jdbc:mysql://localhost:3306/ums_db?useUnicode=true&amp;characterEncoding=GB<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2312,如果加载“oracle.jdbc.driver.OracleDriver”驱动,url的取值方式应该是“jdbc:oracle:thin:@host name:port number:service name”。其他驱动程序的url的取值方式,各位自行参阅相应的文挡。

例程中的GetConnection()方法只有一个参数String url,代表ODBC数据源,如果连接大型数据库,则需要三个参数:String urlStrng userString passwordUserpassword代表数据库管理系统的用户名和口令。一般的大型数据库如OracleMS SQL ServerDB2等用户名和口令是必须的。而小型的数据库如ACCESSFoxpro等并不需要。

如果连接成功,则会返回一个Connection类的对象con。以后对数据库的操作都是建立在con对象的基础上的。GetConnection()方法是DriverManager类的静态方法,使用时不用生成DriverManager类的对象,直接使用类名DriverManager就可以调用。

 

3)创建Statement声明,执行SQL语句

 

在实例化一个Connection类的对象con,成功建立一个到数据库管理系统的连接之后。我们要做的第三步是利用该con对象生成一个Statement类的对象stmt。该对象负责将SQL语句传递给数据库管理系统执行,如果SQL语句产生结果集,stmt对象还会将结果集返回给一个ResultSet类的对象。

Statement类的主要的方法有三个:

executeUpdate(String sql)

executeQuery(String sql)

execute(String sql)

executeUpdate(String sql)方法用于执行DDL类型的SQL语句,这种类型的SQL语句会对数据库管理系统的对象进行创建、修改、删除操作,一般不会返回结果集。

 

executeQuery(String sql)方法用于执行一条查询数据库的SELECT语句。如果有符合查询条件的数据存在,该方法将返回一个包含相应数据的ResultSet类对象,否则,该对象的next()方法将返回false

 

execute(String sql)方法用于执行一个可能返回多个结果集的存储过程(Stored Procedure)或者一条动态生成的不知道结果集个数的SQL语句。如果存储过程或者SQL语句产生一个结果集,该方法返回false.如果产生多个结果集,该方法返回true。我们可以综合运用Statement类的getResultSet(), getUpdateCount(), getMoreResults()方法来检索不同的结果集。

服务器对JSP程序进行编译时,并不对将要执行的SQL语句作语法检查,只是将其作为一个String对象。只有当客户端发出HTTP请求,Java虚拟机对Servlet进行解释执行,将SQL语句传递给数据库管理系统时,才能知道他是否正确。对于错误的SQL语句,在执行时会产生SQLExcepion。其实,所有与JDBC操作的JSP语句都与数据库管理系统及相应的驱动程序有关,是超出JSP的控制范围的。这些语句只有在实际的解释执行中才能检验出是否能顺利执行,因此一定要声明并捕获例外:               

try{

….

}catch(SQLException e)

{

  Sytem.err.println(“SQLException:”+e.getMessage());

}

否则,JSP程序无法被编译成Servlet

 

4)关闭Statement对象

 

一个Statement对象在打开后可以多次调用executeQuery(String sql)executeUpdate(String sql)execute(String sql)方法来执行SQL语句,与数据库管理系统进行交互。但一个Statement对象在同一时间只能打开一个结果集,对第二个结果集的打开隐含着对第一个结果集的关闭。如果想对多个结果集同时进行操作,必须创建多个Statement对象,在每个Statement对象上执行SQL语句获得相应的结果集。

 

5)关闭Connection对象

 

在处理完对数据库的操作后,一定要将Connection对象关闭,以释放JDBC占用的系统资源。在不关闭Connection对象的前提下再次用DriverManager静态类初始化新的Connection对象会产生系统错误。而一个已经建立连接的Connection对象可以同时初始化多个Statement对象。对应不同的数据库管理系统的Connection对象可以初始化Statement对象的个数是不同的。在Oracle中是50个。

 

不知道以上的描述是否详细,,其实看一下,具体再操作一下就可以了,很简单的.OK,北京时间18:20,已经下班了。88

jdbc学习总结(二)

一、SqlHelper的编写 PreperedStatement是Statement的子类,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Sta...
  • lml645255992
  • lml645255992
  • 2016年01月12日 13:18
  • 103

JDBC浅谈(二)

preparedstatment,resultset,resultsetmetadata
  • hwk6155
  • hwk6155
  • 2016年11月06日 18:33
  • 95

jdbc基本知识(二)

JDBC的保存点(Savepoint)是什么,如何使用?有时候事务包含了一组语句,而我们希望回滚到这个事务的某个特定的点。JDBC的保存点可以用来生成事务的一个检查点,使得事务可以回滚到这个检查点。一...
  • ooo123lll
  • ooo123lll
  • 2017年07月27日 20:58
  • 87

jdbc详解(二)

使用JDBC处理大数据 l在实际开发中,程序需要把大文本或二进制数据保存到数据库。 l l基本概念:大数据也称之为LOB(Large Objects),LOB又分为: •clob和blob ...
  • cztq15
  • cztq15
  • 2015年10月19日 20:48
  • 236

JDBC常见面试题(二)

JDBC的保存点(Savepoint)是什么,如何使用? 有时候事务包含了一组语句,而我们希望回滚到这个事务的某个特定的点。JDBC的保存点可以用来生成事务的一个检查点,使得事务可以回滚到这个检查点...
  • zhang434
  • zhang434
  • 2014年03月19日 09:06
  • 1293

JDBC连接技术(二):JDBC类基础

一个基本的JDBC开发可以描述为包含下列的步骤:   (1). 引入相应的类   (2). 选择合适的JDBC驱动程序并加载   (3). 分配一个Connection对象   (4). 分配...
  • u014145622
  • u014145622
  • 2015年04月28日 13:57
  • 371

JDBC技术总结(二)

上一节主要讲了JDBC的基本操作,这一节主要总结一下JDBC如何处理大文本、如何处理图片以及进行批处理。 1.JDBC处理大文本         在MySQL中,大文本是text类型,使用java操作...
  • eson_15
  • eson_15
  • 2016年05月04日 19:01
  • 2389

Java JDBC的基础知识(二)

在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的。在程序创建连接之后,如果不进行关闭,会消耗更多的资源。创建连接之...
  • q781045982
  • q781045982
  • 2017年07月31日 15:35
  • 109

菜鸟学JDBC(二)

上一篇文章(http://blog.csdn.net/rowandjj/article/details/8883383)我们了解了如何通过JDBC连接mysql数据库,并通过一个简单的代码示例演示了具...
  • RowandJJ
  • RowandJJ
  • 2013年05月12日 22:08
  • 1882

jdbc详解(二)

使用JDBC处理大数据 l在实际开发中,程序需要把大文本或二进制数据保存到数据库。 l l基本概念:大数据也称之为LOB(Large Objects),LOB又分为: •clob和blob ...
  • Magneto7
  • Magneto7
  • 2013年08月26日 09:01
  • 1117
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDBC学习笔记(二)
举报原因:
原因补充:

(最多只允许输入30个字)