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

news/2024/5/19 2:10:15 标签: 数据库, jdbc, oracle, java, 驱动、jdk的版本对应

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库中,使用的命令如下。

java">//在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方式的企业级的要求。

java">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客户端。

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

2.5 Java代码参考。

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版本、数据库版本对应关系


http://www.niftyadmin.cn/n/1223800.html

相关文章

【原创】网页中图片等比例缩放(完美无错版)

<SCRIPT LANGUAGE"JavaScript"> <!-- var iOriginalWidth, iOriginalHeight; //存放图片原始长度、宽度 //动态显示图片的长度、宽度和显示比例 function dispCurrentSize() { var zoom document.all.idImg.style.zoom; zoom eval(zoom.substring(0, zoom…

系统运维系列 之java编译运行中常见的几个错误整理

1 前言 编程语言&#xff1a;java IDE&#xff1a;Myeclipse 2 常见错误 2.1 Remove ‘override’ annotation解决办法 原因&#xff1a;Java 1.5的编译器默认对父类的方法进行覆盖&#xff0c;采用Override进行说明&#xff1b;但1.6已经扩展到对接口的方法&#xff1b;所以如…

PHP版本繁简体,UTF-8和Unicode互转的函数:GB2312Big5,GB2312UTF-8,Big5UTF-8等

研究VtigerCRM时&#xff0c;试图把繁体语言插件转成简体版&#xff0c;并去除对iconv的依赖&#xff0c;因为很多php空间不支持&#xff1b;研究过GB2312,Big5&#xff0c;UTF-8之间的转化方法。后来就扔到了一边&#xff0c;最近有多个朋友询问解决方案&#xff0c;于是重新找…

作为程序员的一些感想[转]

发信人: thickcoffee (北方的狼), 信区: RSGW标 题: 作为程序员的一些感想发信站: 两全其美网 (Wed Feb 8 10:56:00 2006), 转信(lqqm.net) 看了那篇写程序员的这篇文章&#xff0c;有很多共鸣。我自己学的是自动化&#xff0c;然而&#xff0c;就像我的大多数同学那样&#…

系统运维系列 之maven项目中连接oracle数据库的那些坑(接连接oracle数据库并进行数据读写专题)

1 前言 继续研究maven项目中连接oracle数据库&#xff0c;期间已经遇到了一些问题并已整理在前面的博客中&#xff0c;本文继续补充遇到的问题。 2 问题整理 2.1 maven 出现错误 -source 1.5 中不支持 diamond 运算符 出现如下错误&#xff1a; -source 1.5 中不支持 diamond …

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

1 前言 前面博客中已经介绍了各种编码问题&#xff0c;但是在I/O流传送的过程中&#xff0c;如果弄不清楚各种I/O流的异同&#xff0c;往往也会出现乱码的情况&#xff0c;在http(s)、socket、telnet等应用的过程中都要注意此类问题。以下为倾心整理的I/O流介绍&#xff0c;全是…

Ant tutorial(3)

Ant用于有关文件的操作 1&#xff09;创建目录&#xff1a; <mkdir dir"archive/metals/zinc"/> 我们能够同样容易地使用 \&#xff0c;而不管平台是什么 —— Ant 能够处理任一种形式&#xff0c;甚至能够处理两种形式的混合。 mkdir 任务的另一个有用特性是它…

Hotel california

老鹰乐队应该说是天才中的天才&#xff0c;说它是美国最伟大的摇滚乐团&#xff0c;一点也不为过。他们的专辑的销量超过了其他所有的美国乐队。迄今为止,他们专辑的销量在全球超过三亿八千万&#xff0c;赢得了四次最佳专辑&#xff0c;五次最佳单曲和四次葛莱美大奖。没有听过…