首页 理论教育JDBC连接数据库与执行SQL语句

JDBC连接数据库与执行SQL语句

【摘要】:Java程序可以通过JDBC向数据库发出命令,数据库管理系统获得命令后执行请求,并将执行的结果通过JDBC返回给Java程序。JDBC API是一套用Java语言编写的类库,在java.sql包中,编写与数据库相连的Java程序首先要将该包引入到程序中。使用oracle.jdbc.driver.OracleDriver驱动程序连接Oracle数据库是直连方式,效率高、速度快。它返回值的数据类型是Connection对象,Connection对象代表与数据库的连接。读取或修改数据库中的数据JDBC通过向数据库发送SQL语句完成对数据库的操作。

在JSP中,对数据库的操作都是通过JDBC API完成的。Java程序可以通过JDBC向数据库发出命令,数据库管理系统获得命令后执行请求,并将执行的结果通过JDBC返回给Java程序。JDBC主要做三件事:与数据库建立连接、发送SQL语句、返回处理结果。

JDBC API是一套用Java语言编写的类库,在java.sql包中,编写与数据库相连的Java程序首先要将该包引入到程序中。编写直连数据库程序的步骤如下:

(1)加载与注册驱动程序

Oracle公司随Oracle数据库软件包提供了JDBC所用的Oracle驱动程序oracle.jdbc.driver.OracleDriver,Oracle11g将该程序压缩在ojdbc6.jar文件中,位于Oracle数据库安装目录下的jdbc目录下。将此文件复制到Resin安装目录的lib目录下(见“实训6”)。当加载驱动程序时,JSP容器(Resin)会自动到lib目录下寻找驱动程序。

使用oracle.jdbc.driver.OracleDriver驱动程序连接Oracle数据库是直连方式,效率高、速度快。下面两种连接语句可任选一种:

●使用java.sql包中的public static DriverManager.registerDriver(Driver driver)方法加载驱动程序,其参数是实现Driver接口的驱动程序对象。加载Oracle驱动程序的语句如下:

因此方法不够灵活,一般使用下一种方式连接。

●使用java.lang包中的Class.forName(String className)方法加载驱动程序。语句如下:

java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM(Java虚拟机)中的类(包括类和接口)的信息。

Class.forName("oracle.jdbc.driver.OracleDriver")首先会将OracleDriver类(即Oracle数据库驱动程序)装入JVM,并返回与之关联的Class对象。JVM装入OracleDriver类后对其进行初始化。需要注意的是:forName方法的参数是类的完整限定名(即包含包名)。

上面两种连接语句若未找到Oracle数据库驱动程序oracle.jdbc.driver.OracleDriver,则会抛出没有找到驱动程序异常:ClassNotFoundException。

(2)连接数据库

数据库驱动程序加载后就可以使用java.sql包中DriverManager类的方法:

建立与数据库的连接。它返回值的数据类型是Connection对象,Connection对象代表与数据库的连接。参数url定义连接数据库的协定、数据库所在主机的IP地址端口号、数据库标识名,对于Oracle数据库,url的值是"jdbc:oracle:thin:127.0.0.1:1521:mis",其中“jdbc:oracle:thin”是协定;“127.0.0.1”代表本机IP地址,若Oracle数据库服务器与Resin应用服务器安装在了同一台主机上,无论主机的IP地址是如何定义的,如先前定义的主机IP地址是192.168.2.1,此时要使用127.0.0.1或localhost表示本机IP地址;“1521”是Oracle服务器的端口号;“mis”是数据库SID标识,是在安装Oracle时由用户定义的。参数user是用户建立的数据库名,参数password是与user关联的进入数据库的密码。(在“实训7——使用OEM建立新账户”的5)中建立了用户“db_student”和口令“student123student”)具体语句如下:

上面语句若连接成功,将返回Connection(连接)对象con。(www.chuimin.cn)

(3)创建执行SQL语句的Statement对象

Statement对象用于将SQL语句发送到数据库中。

JDBC连接Oracle成功后,获得了Connection(连接)对象con,通过con可以获得State-ment对象。语句如下:

第一个参数是游标类型参数:ResultSet.TYPE_SCROLL_INSENSITIVE指明可以用游标任意定位结果集中的记录,当数据库中的数据改变后,先前获得的结果集不能反映所做的改变。

第二个参数是数据一致性参数:ResultSet.CONCUR_READ_ONLY表示不能更新结果集的内容。

当缺省以上两个参数时,“Statement stmt=con.createStatement();”表示默认的Result-Set对象仅有一个向前移动的游标,不可更新。因此,游标只能在结果集的每一行停留一次,并且只能按从第一行到最后一行的顺序进行。游标类型参数请见附录J,数据一致性参数请见附录K。

(4)读取或修改数据库中的数据

JDBC通过向数据库发送SQL语句完成对数据库的操作。Statement类中封装了向数据库发送SQL语句的方法:

●查询

ResultSet executeQuery(String sql),该方法将查询的结果返回给ResultSet结果集对象。例如:

●修改

int executeUpdate(String sql),执行给定SQL语句,该语句可能为INSERT、UPDATE或DELETE语句,或者不返回任何内容的SQL语句(如SQL DDL语句)。例如:

(5)处理结果集

使用Statement对象的方法executeQuery(Stringsql)将会返回满足查询条件的数据库结果集的ResultSet对象。ResultSet对象是一个数据表,它包含查询所返回的列(字段)名和相应的值。结果集可能有多行,ResultSet对象具有指向其当前数据行的游标。最初,游标被置于第一行之前。ResultSet对象封装了读取游标指定的行中的数据和移动游标的方法,请参考附录L。要注意的是,方法的返回值的数据类型要与数据库中定义的该列的数据类型相兼容。