系统运维系列 之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数据库的那些坑专题)