JDBC(Java Database Connectivity)是一组Java API,可以让Java程序通过SQL命令访问各种关系型数据库。而其中的一个重要功能就是连接Oracle数据库。不过,在使用JDBC连接Oracle时,大家可能会忽略一个非常重要的问题,就是数据库关闭问题。如果关闭方式不当,容易导致数据损坏或者数据库意外停止。本文将以JDBC连接Oracle为例,深入探讨如何正确关闭Oracle数据库。
一、数据库关闭原理
在正式介绍JDBC连接Oracle的关闭方法之前,先介绍一下数据库关闭原理。Oracle数据库是一个进程级别的数据库,每个连接到数据库的客户端都会创建一个进程,这些进程通过Oracle的实例连接到数据库,然后进行相关操作。而关闭Oracle数据库,需要分为两种情况。
1. 正常关闭
当Oracle数据库通过管理员手动执行shutdown、shutdown immediate、shutdown transactional等命令关闭时,该数据库进程会先关闭所有的会话,然后停止所有进程,最终关闭Oracle实例。这种关闭方法可以保证数据文件完整,便于备份。
2. 强制关闭
当Oracle数据库进程异常终止或者管理员执行shutdown abort命令强制关闭时,该数据库进程会直接停止运行,此时可能会出现数据丢失或文件损坏的情况。因此,尽量避免使用此种关闭方法。
二、
在JDBC连接Oracle时,如何正确关闭Oracle数据库呢?下面介绍几种常用的方式。
1. 手动关闭
最常见的关闭方式就是手动关闭。在Java程序中,需要执行以下代码进行手动关闭:
“`JAVA
//创建连接
Connection conn = DriverManager.getConnection(url, user, password);
//执行操作
…
//关闭连接
conn.close();
“`
在执行完数据库操作后,及时关闭连接。这种方法可以保证在JDBC连接Oracle的过程中,数据安全性得到充分保障。
2. 自动关闭
为了方便开发,JDK5之后提供了AutoCloseable接口,实现该接口的类都可以使用自动关闭机制,避免了手动关闭数据库连接的麻烦。例如下面的代码片段:
“`JAVA
try (Connection conn = DriverManager.getConnection(url, user, password)) {
//执行操作
…
} catch (Exception e) {
//异常处理
}
“`
在try块的末尾,会自动调用conn.close()来关闭数据库连接,无需手动关闭,非常便利。
3. 数据库连接池关闭
在高并发环境下,如果每次都新建数据库连接,会增加系统开销,因此可以使用数据库连接池来提高性能。数据库连接池允许应用程序从一个预先定义的一组连接中获取连接,而不是为每个请求新建一个连接。然而,在使用连接池时,很容易忘记释放连接而导致资源占用问题,因此需要定义一个规则来自动关闭连接。例如:
“`JAVA
//创建连接池配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDriverName(driver);
dataSourceConfig.setJdbcUrl(url);
dataSourceConfig.setUsername(user);
dataSourceConfig.setPassword(password);
//创建连接池
ConnectionPool pool = new HikariConnectionPool(dataSourceConfig);
//获取连接
try (Connection conn = pool.getConnection()) {
//执行操作
…
} catch (Exception e) {
//异常处理
} finally {
//释放连接
pool.releaseConnection(conn);
}
“`
在使用连接池时,需要添加finally块,以保证连接得到释放。
三、
通过本文的介绍,可以看出JDBC连接Oracle的关闭方法非常重要。如果关闭方式不当,容易导致数据损坏或者数据库意外停止。因此,要注意时间戳监控,及时释放数据库连接,关闭Oracle数据库时应当使用合适的命令,合理地进行数据备份,以保证数据的安全性。另外,在使用JDBC连接Oracle时,也可以将连接的关闭工作交给自动关闭机制,增加程序的稳定性和可维护性。
相关问题拓展阅读:
- JAVA中用JDBC连接不上ORACLE,异常:The+NETWORK+ADAPTER+COULD+NOT+ESTABLISH+THE+CONNECTION
- 本地连接服务器的oracle数据库到底怎么连接,百度的都是来回转,没有一个新手适用的
- 求救:jdbc_odbc链接oracle数据库失败,代码如下,运行后,显示:常连接到数据库。 但没有抓到资料。
JAVA中用JDBC连接不上ORACLE,异常:The+NETWORK+ADAPTER+COULD+NOT+ESTABLISH+THE+CONNECTION
当你通过jdbc连接oracle数据库时发生了异常首先应该确认你的jre是否配置正确,一般oracle10g,jre1.4以上应当使用ojdbc14.jar。
其次你要确定你的java语法是否错误,这里的语法是指连接数据库的url上的协议的格式例如:jdbc:oracle:thin:@127.0.0.1:1521:pg,淡红色表示使用thin方式(瘦客户机)连接,黑色部分表示数据库的ip,青色表示监听程序所使用的端口默认1521,最后深红色表示数据库的全局id,完整写法应当为sid.domain。
当你确定你的程序和jre配置正确仍有异常的时候,你需要查看一下你的oracle网络配置,一般一个监听程序可以监听多个数据库实例。如果你的数据库实例是安装的时候由安装程序自动创建的,那么你的oracle网络配置会给你配置好的。如果你的实例是自己创建的,那么除了需要使用net manager配置监听位置外还要为监听程序配置说要监听的数据库实例,如果监听程序什么都没配置那么将无法连接数据库实例,如果只配置了监听位置那么也能在本机上通过oracle自身的客户端连接,不能通过程序连接。
本地连接服务器的oracle数据库到底怎么连接,百度的都是来回转,没有一个新手适用的
这个绝对适合新手,直接贴代码给你,要获得一个数据库连接就调用getConnection()方法,记得用完后要调用close()方法关闭连接。
import java.sql.*;
public class ConnDB {
private final String DBDRIVER = “oracle.jdbc.driver.OracleDriver” ;
private final String DBURL = “jdbc:oracle:thin:@服务器 ;
private final String DBUSER = “用户名” ;
private final String DBPASSWORD = “密码” ;
private Connection conn = null ;
public ConnDB ()
{
try
{
Class.forName(DBDRIVER) ;
this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
}
catch (Exception e)
{
//连接打开数据库失败;
}
}
// 取得数据库连接
public Connection getConnection()
{
return this.conn ;
}
// 关闭数据库连接
public void close()
{
try
{
this.conn.close() ;
}
catch (Exception e)
{
//关闭数据库失败 ;
}
}
}
求救:jdbc_odbc链接oracle数据库失败,代码如下,运行后,显示:常连接到数据库。 但没有抓到资料。
你用单元测试看看,读取数据出来没呢
得用ORACLE的JDBC驱动,转几篇文章给你,估计能解决问题:
1.新建一个JAVA程序
2.导入要用到的ORACLE JDBC包..(在新建项目的时候,选择”库”选项卡–>添加外部JAR..)当然在建立好项目以后点属性也可以….在你的ORACLE的安装目录下找到\jdbc\lib\classes12.zip,引入进来
3.其他的就是编码.
给你一个例子
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:数据库名”,”用户名”,”密码”);
15.3 Oracle JDBC驱动程序
本节介绍各种Oracle JDBC驱动程序,它们允许Java程序中的JDBC语句访问Oracle数据库。Oracle JDBC驱动程序有4种:
●Thin驱动程序
●OCI驱动程序
●服务器端内部驱动程序
●服务器端Thin驱动程序
下面各小节分别介绍这些驱动程序。
15.3.1 Thin驱动程序
Thin驱动程序是占用内存最小的驱动程序,也就是说运行它所需的系统资源最少,它全部是用Java编写的。如果编写一个Java applet,应该使用Thin驱动程序。Thin驱动程序还可以用于独立Java应用程序,并用于访问所有版本的Oracle数据库。Thin驱动程序只支持TCP/IP,并要求启动和运行Oracle Net。关于Oracle Net的详细信息,可以参阅由Oracle公司出版的Oracle Database Net Services Administrator’s Guide。
注意:
使用Thin驱动程序不需要在客户计算机上安装任何软件,因此它可以用于applet。
15.3.2 OCI驱动程序
OCI驱动程序需要的资源比Thin驱动程序的要多,但是通常具有更好的性能。OCI驱动程序适合部署在中间层(例如,Web服务器)上的程序。
注意:
OCI驱动程序需要安装在客户计算机上,所以不适用于applet。
OCI驱动程序具有许多性能增强的特性,包括数据库连接池、从数据库中预取行。OCI驱动程序支持所有版本的数据库和所有支持的Oracle Net协议。
15.3.3 服务器端内部驱动程序
服务器端内部驱动程序提供对数据库的直接访问,Oracle JVM使用该驱动程序与数据库通信。Oracle JVM是一个Java虚拟机(Java Virtual Machine),它与数据库集成。可以将Java类加载到数据库中,然后使用Oracle JVM发布并运行该类包含的方法。Java代码运行在数据库服务器上,并可以从单一的Oracle会话访问数据。
15.3.4 服务器端Thin驱动程序
服务器端Thin驱动程序也用于Oracle JVM,提供对远程数据库的访问。和Thin驱动程序一样,服务器端Thin驱动程序也完全用Java编写。使用服务器端Thin驱动程序的Java代码可以访问相同的数据库服务器或某个远程服务器上的另一个会话。
JDBC Oracle驱动SQL:07:53 阅读43 评论0 字号:大中小 订阅 .
public static Connection Oracl(){
String sUsr=”taotao”;
String sPwd=”tao”;
Connection conn=null;
//加载jdbc-odbc 桥驱动程序
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);
conn=DriverManager.getConnection(“jdbc:oracle:thin:@192.168.0.3:1521:orcl”,sUsr,sPwd);
conn.setAutoCommit(false);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(“连接成功!”);
return conn;
}
Oracle与JDBC数据库:14:23 阅读22 评论0 字号:大中小 订阅 .
【用JDBC连接Oracle数据库】
一、软件需求:
JDK、Orcale Client软件(带有Oracle JDBC驱动程序)、Oracle数据库服务器、Oracle Net、Oracle9iAS Containers for J2EE(简称OC4J)。
只要在一台电脑上安装了Oracle数据库服务器,就一般同时拥有了Orcale Client软件(带有Oracle JDBC驱动程序)、Oracle Net、OC4J,数据库
服务器、Oracle Net和OC4J可以运行在网络上的任意一台电脑上,而通过JDBC连接数据库的客户端程序可以在另外的电脑(安装了Orcale Client软
件)上运行。
Orcale Client软件的安装目录下有一个jdbc子目录,它的内容如下:
·readme.txt,包含Oracle JDBC驱动程序的重要信息。
·doc子目录中有一个ZIP文件,它包含了Oracle JDBC API参考文档。
·demo子目录中有一个ZIP文件,它包含了Oracle提供的示例java程序。
·lib子目录,有多个ZIP文件和JAR(Java Achive,java归档文件),这是Oracle JDBC驱动程序所在的目录。
二、配置环境变量:
·JAVA_HOME = F:\WebServers\Java\jdk1.5.0 (JDK的安装目录,如果要使用Java 2 Enterprise Edition,那么还要设置J2EE_HOME)。
·ORACLE_HOME = F:\Win2K\Oracle\Ora(Oracle的安装目录)。
·classpath = .;%JAVA_HOME%\LIB\dt.jar;%JAVA_HOME%\LIB\tools.jar;%ORACLE_HOME%\JDBC\LIB\classes12.zip;%ORACLE_HOME%\JDBC\LIB\nls_charset12.zip;%ORACLE_HOME%\JDBC\LIB\jta.zip;%ORACLE_HOME%\JDBC\LIB\jndi.zip;%ORACLE_HOME%\SQLJ\LIB\translator.zip;%ORACLE_HOME%\SQLJ\LIB\runtime.zip
(如果要使用ava 2 Enterprise Edition,那么还要设置J2EE_CLASSPATH)。
·path = %path%;%JAVA_HOME%\BIN;%ORACLE_HOME%\BIN
说明:
1、JDK的版本要与Oracle JDBC驱动程序的版本相兼容,一般采用最新版本就没有问题。
2、环境变量classpath包含的是java类包的位置列表,可以是目录名,也可以是包含类的ZIP文件或JAR文件。
·如果使用JDK1.2.x或更高版本,则要在classpath中加入classes12.zip(或classes12.jar)。
·如果需要National Language支持,则要在classpath中加入nls_charset12.zip(或nls_charset12.jar)。
·如果需要使用Java Transaction API(JTA),则要在classpath中加入jta.zip(或jta.jar)。
·如果需要使用Java Naming and Directory Interface(JNDI),则要在classpath中加入jndi.zip(或jndi.jar)。
以上的ZIP文件和JAR文件都在%ORACLE_HOME%\JDBC\LIB目录中,该目录中还有一些名字与上面的ZIP或JAR文件相似但以11结束的文件,这些是
与java1.1.x相兼容的文件,当系统中使用的JDK是java1.1.x时,就要使用这些文件来代替上面的文件。
3、classpath中一般都加入“.;”,它表示当前程序运行的目录,也就是指示程序在当前运行目录中找java类包。
三、一个连接Oracle的示例程序test.java:
import java.sql.*; //这是JDK提供的标准JDBC驱动程序包。但如果要使用Oracle的特性,就需要Oracle的JDBC扩展。
public class test{
public static void main(String args)
{
Connection conn=null;
Statement sql=null;
/*这一段代码与下面的一句DriverManager.registerDriver()完成相同的功能,所以推荐下面的一句
try{
Class.forName(“oracle.jdbc.driver.OracleDriver”);
}catch(ClassNotFoundException e){
//System.out.println(“Error code=”+e.getErrorCode()); //ClassNotFoundException类没有这个方法
System.out.println(“Error message=”+e.getMessage());
}
*/
try{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());//与上面的代码段完成相同功能
conn=DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:OEMREP”,”system”,”manager”); //连接字符串中的OEMREP是Oracle数据库例程的SID
sql=conn.createStatement();
ResultSet rs=sql.executeQuery(“select user,sysdate from dual”); //dual表是每一个Oracle数据库都会有的表,它存储了Oracle数据库的内置变量,如user、sysdate等。
if(rs.next())
System.out.println(“Hello,”+rs.getString(“user”)+”,the current date and time is “+rs.getTimestamp(“sysdate”));
rs.close();
}catch(SQLException E){
System.out.println(“Error code = “+E.getErrorCode());
System.out.println(“Error message = “+E.getMessage());
}finally{
try{
if(sql!=null) sql.close();
if(conn!=null) conn.close();
}catch(SQLException E){
System.out.println(“Error code = “+E.getErrorCode());
System.out.println(“Error message = “+E.getMessage());
}
}
}
jdbc连接oracle关闭数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于jdbc连接oracle关闭数据库,JDBC连接Oracle:关闭数据库的正确方法,JAVA中用JDBC连接不上ORACLE,异常:The+NETWORK+ADAPTER+COULD+NOT+ESTABLISH+THE+CONNECTION,本地连接服务器的oracle数据库到底怎么连接,百度的都是来回转,没有一个新手适用的,求救:jdbc_odbc链接oracle数据库失败,代码如下,运行后,显示:常连接到数据库。 但没有抓到资料。的信息别忘了在本站进行查找喔。