JDBC学习笔记(二)
Thinkersky[Email:yanghuangming@rongji.com]
大家好,又过了一天,今天的福州经历了一场暴风雨的洗礼,宁静中夹带着其惯有的雍懒.调试了一天的程序,头有点晕,放松一下,听点music,写点东东.
通过昨天的学习,对JDBC在JSP应用中的重要性和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&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.JdbcOdbcDriver:oracle.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&characterEncoding=GB2312”,如果加载“oracle.jdbc.driver.OracleDriver”驱动,url的取值方式应该是“jdbc:oracle:thin:@host name:port number:service name”。其他驱动程序的url的取值方式,各位自行参阅相应的文挡。
例程中的GetConnection()方法只有一个参数String url,代表ODBC数据源,如果连接大型数据库,则需要三个参数:String url、Strng user、String password。User和password代表数据库管理系统的用户名和口令。一般的大型数据库如Oracle、MS SQL Server、DB2等用户名和口令是必须的。而小型的数据库如ACCESS、Foxpro等并不需要。
如果连接成功,则会返回一个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