系统运维系列 之java中连接oracle数据库并进行数据读写

Posted 琅晓琳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统运维系列 之java中连接oracle数据库并进行数据读写相关的知识,希望对你有一定的参考价值。

1 前言
由于oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库。这是在Maven项目中连接不同类型数据库的本质区别,一般连接mysql或者GP数据库只需要在pom文件中添加依赖即可,但是oracle数据库不向Maven授权,所以需要按照以下步骤来做。
手动添加到本地仓库需要本地有oracle驱动包,有两种方式获取oracle的驱动包:一种是去oracle官网下载,另一种是如果本地安装了对应版本的oracle,可以在安装文件中找到。鉴于一般我们连接的都是后端远程服务器,所以本地安装的oracle驱动不可用,这时需要去oracle官网下载相关驱动。

2 操作步骤
2.1 使用以下命令查看远程oracle数据库的版本信息。
SELECT * FROM v$version;
2.2 去oracle官网下载相应版本的驱动,oracle驱动官网地址为:需要在此官网上注册账号才可以下载相关驱动。

https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

在这里插入图片描述
2.3 加载到本地maven库中,使用的命令如下。

//在cmd中运行
cd oracle驱动文件夹目录
//这里的DartifactId和Dfile视下载的oracle驱动版本修改
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=18.0.0.0.0 -Dpackaging=jar -Dfile=ojdbc8.jar
//安装完后,在pom.xml文件中添加引用
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>18.0.0.0.0</version>
</dependency>

2.4 利用Java连接oracle数据库。
使用jdbc连接oracle有两种方法:
2.4.1 使用thin连接:
由于thin驱动都是纯Java代码,并且使用TCP/IP技术通过java的Socket连接上oracle数据库,所以thin驱动与平台无关,无需安装oracle客户端,只需要下载一个thin驱动的jar包,并且将环境变量中的CLASS_PATH变量中加入thin驱动的路径即可。thin驱动虽然与平台无关,也无需安装oracle客户端,但是有一个致命的缺陷就是性能一般,达不到如OCI方式的企业级的要求。

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn =DriverManager.getConnection ("jdbc:oracle:thin:@ip:1521:库名","账号","密码");

2.4.2 使用oci连接(Oracle Call Interface):
使用OCI连接数据库是企业级的做法,适应于单个数据库和集群数据库,性能优越,尤其是连接池功能大大提高了应用程序的性能和并发量。唯一的缺点是,若想使用OCI必须要安装oracle客户端。

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:oci:@数据库名","账号","密码");

2.5 Java代码参考。

import oracle.jdbc.driver.OracleDriver;
import java.sql.*;
import java.util.Properties;
/**
 * JDBC的六大步骤
 * JAVA连接Oracle的三种方式
 */
public class JdbcTest
{
    public static void main(String[] args) {
        Connection connect = null;
        Statement statement = null;
        ResultSet resultSet = null;
        
        try {
            //第一步:注册驱动
            //第一种方式:类加载(常用)
            //Class.forName("oracle.jdbc.OracleDriver");
            //第二种方式:利用Driver对象
            Driver driver = new OracleDriver();
            DriverManager.deregisterDriver(driver);
 
            //第二步:获取连接
            //第一种方式:利用DriverManager(常用)
            //connect = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orac", "用户名", "密码");
            //第二种方式:直接使用Driver
            Properties pro = new Properties();
            pro.put("user", "你的oracle数据库用户名");
            pro.put("password", "用户名密码");
            connect = driver.connect("jdbc:oracle:thin:@localhost:1521:XE", pro);
 
            //测试connect正确与否
            System.out.println(connect);  
 
            //第三步:获取执行sql语句对象
            //第一种方式:statement
            //statement = connect.createStatement();
            //第二种方式:PreStatement
            PreparedStatement preState = connect.prepareStatement("select  * from tb1_dept where id = ?");
 
            //第四步:执行sql语句
            //第一种方式:
            //resultSet = statement.executeQuery("select  * from tb1_dept");
            //第二种方式:
            preState.setInt(1, 2);//1是指sql语句中第一个?,  2是指第一个?的values值
            resultSet = preState.executeQuery();        //执行查询语句
            //查询任何语句,如果有结果集,返回true,没有的话返回false,注意如果是插入一条数据的话,虽然是没有结果集,返回false,但是却能成功的插入一条数据
            boolean execute = preState.execute();
            System.out.println(execute);
 
            //第五步:处理结果集
            while (resultSet.next())
            {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String city = resultSet.getString("city");
                System.out.println(id+"   "+name+"   "+city);  //打印输出结果集
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //第六步:关闭资源
                try {
                    if (resultSet!=null) resultSet.close();
                    if (statement!=null) statement.close();
                    if (connect!=null) connect.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }
    }
}

2.6 Oracle JDBC驱动版本、JDK版本、数据库版本对应关系。
在这里插入图片描述
在这里插入图片描述

3 oracle数据库中常用的sql命令
限制输出语句:
【oracle】

select * from 表名 where rownum < 10;

【mysql】

select * from 表名 limit 10;

查询时间段数据:
【oracle】

SELECT 
* FROM 
     表名 
WHERE 
    time BETWEEN to_date('2020-10-20 14:00:00','yyyy-mm-dd hh24:mi:ss')            AND to_date('2020-10-23 14:00:00','yyyy-mm-dd hh24:mi:ss');

【mysql】

SELECT
* FROM
	 表名 
WHERE
	time BETWEEN TO_DAYS ( '2020-10-20 14:00:00' ) 
AND TO_DAYS ( '2020-10-23 14:00:00' ) 
ORDER BY
	time DESC;

常用命令:

选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like%value1%’ —like的语法很精妙
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1

4 参考资料
https://blog.csdn.net/weixin_30391339/article/details/96682460 Java连接oracle数据库的两种常用方法
https://blog.csdn.net/zp2605811855/article/details/102914207 Java连接Oracle数据库常用方法
https://blog.csdn.net/yqcheng8/article/details/88958707 Oracle数据库常用语句
https://www.linuxidc.com/Linux/2020-04/162974.htm Oracle JDBC驱动版本、JDK版本、数据库版本对应关系

以上是关于系统运维系列 之java中连接oracle数据库并进行数据读写的主要内容,如果未能解决你的问题,请参考以下文章

系统运维系列 之linux服务器中部署项目连接oracle数据库出现Connection reset(接maven项目中连接oracle数据库的那些坑专题)

系统运维系列 之异常抛出后代码执行问题(java应用)

系统运维系列 之其它流概述及其分类(java应用)

系统运维系列 之Java语言中解析json嵌套数组(干货亲测)

系统运维系列 之java中需要转义的特殊字符

系统运维系列 之java中需要转义的特殊字符