分享
 
 
 

JDBC学习笔记(二)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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&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.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&amp;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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有