java操作Oracle 方式一 ( 连接-》操作-》断开连接 )

news/2024/8/20 14:34:50/文章来源:https://www.cnblogs.com/hailexuexi/p/18302948

连接-》操作-》断开连接

这种方式的特点是 每次都是新的连接,单线程,缺点是 网络环境不好时连接oracle比较费时。

OracleUtil.java 基础类代码 详见:https://www.cnblogs.com/hailexuexi/p/18302732

完整代码

dbCDR.java

package com.JavaRabbitMQToDataBase.dbOracle;import java.util.UUID;
import com.alibaba.fastjson.JSONObject;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class dbCDR  {protected static final Logger logger = LoggerFactory.getLogger(dbCDR.class);//连接对象Connection connection=null;//创建预编译对象PreparedStatement ps=null;//创建结果集ResultSet rs = null;//CDR 参数private String _eventJson;public dbCDR(String eventJson){_eventJson=eventJson;}//插入public int insert() {logger.debug("dbCDR insert() CDR 准备执行SQL" + this._eventJson);int result = 0;String sql = "";String callid ="";String callfrom ="";if (OracleUtil.oracle_open.equals("true") == false) {logger.warn("dbCDR insert() CDR 没有启动连接数据库 " + OracleUtil.oracle_open + " " + _eventJson);return -2;}try {connection = OracleUtil.getCon();//连接对象//{"event":"NewCdr","callid":"1627349862.433","timestart":"2021-07-27 09:37:42","callfrom":"1008","callto":"1009"// ,"callduraction":"16","talkduraction":"11","srctrunkname":"","dsttrcunkname":"","pincode":"","status":"ANSWERED"// ,"type":"Internal","callPath":"","recording":"20210727093747-1627349862.433-1008-1009-Internal.wav","didnumber":"","agentringtime":"0"// ,"sn":"369264842620"}String strId = UUID.randomUUID().toString();//唯一码JSONObject jsonObj = JSONObject.parseObject(this._eventJson);//
String event = jsonObj.get("event").toString();callid = jsonObj.get("callid").toString();String timestart = jsonObj.get("timestart").toString();//主叫号码callfrom = jsonObj.get("callfrom").toString();//被叫号码String callto = jsonObj.get("callto").toString();//如果有 6703(1008) 时将队列号6703 去掉if(callto.contains("(")==true){callto = callto.substring(5);  //6703(callto = callto.substring(0, callto.indexOf(")"));//去掉 )
            }String callduraction = jsonObj.get("callduraction").toString();String talkduraction = jsonObj.get("talkduraction").toString();String srctrunkname = jsonObj.get("srctrunkname").toString();String dsttrcunkname = jsonObj.get("dsttrcunkname").toString();String pincode = jsonObj.get("pincode").toString();String status = jsonObj.get("status").toString();String type = jsonObj.get("type").toString();String recording = jsonObj.get("recording").toString();String didnumber = jsonObj.get("didnumber").toString();String agentringtime = jsonObj.get("agentringtime").toString();String sn = jsonObj.get("sn").toString();String callPath = jsonObj.get("callPath").toString();String sessionid = "";// if(jsonObj.containsKey("sessionid")==true){sessionid=jsonObj.get("sessionid").toString();}String agentname = "";if(jsonObj.containsKey("agentname")==true){agentname=jsonObj.get("agentname").toString();}sql = "insert into CTI_CDR ";sql = sql + " ( ID,event,callid,timestart,callfrom, ";sql = sql + " callto,callduraction,talkduraction,srctrunkname,dsttrcunkname, ";sql = sql + " pincode,status,type,recording,didnumber, ";sql = sql + " agentringtime,sn,callpath ,agent_name,sessionid) ";sql = sql + " values(?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?  )";logger.error("dbCDR insert() CDR 准备执行SQL  " + sql + " " );ps = connection.prepareStatement(sql);ps.setString(1, strId);ps.setString(2, event);ps.setString(3, callid);ps.setString(4, timestart);ps.setString(5, callfrom);ps.setString(6, callto);ps.setString(7, callduraction);ps.setString(8, talkduraction);ps.setString(9, srctrunkname);ps.setString(10, dsttrcunkname);ps.setString(11, pincode);ps.setString(12, status);ps.setString(13, type);ps.setString(14, recording);ps.setString(15, didnumber);ps.setString(16, agentringtime);ps.setString(17, sn);ps.setString(18, callPath);ps.setString(19, agentname);ps.setString(20, sessionid);//logger.debug("dbCDR insert() CDR 执行SQL!" + ps.toString()  );
result = ps.executeUpdate();} catch (Exception e) {e.printStackTrace();logger.error("dbCDR insert() CDR 执行SQL出错! " + result + " "+ callid+ " "+callfrom+  " " + sql + " " + e.toString());} finally {try {if (ps != null) { // ps.close();////ps需要关闭,不然会出现 java.sql.SQLException: ORA-01000: 超出打开游标的最大数
                }OracleUtil.closeCon(connection);} catch (SQLException e) {e.printStackTrace();logger.error("dbCDR insert() CDR 关闭连接出错!" + result + " "+ callid+ " "+callfrom+ " " + " " + sql + " " + e.toString());}}logger.debug("dbCDR insert() CDR 执行SQL成功!" + result + " "+ callid+ " "+callfrom+ " " + sql);return result;}//查询public void select(){connection = OracleUtil.getCon();String sql = "select ID,AGENT_NAME,DATE_TIME,STATUS from CTI_AGENT_WORK_REST";try {ps = connection.prepareStatement(sql);rs = ps.executeQuery();while (rs.next()){int id = rs.getInt(1);String AGENT_NAME = rs.getString(2);String DATE_TIME = rs.getString(3);String STATUS= rs.getString(4);System.out.println("ID:"+id + " AGENT_NAME:"+AGENT_NAME+" DATE_TIME:"+DATE_TIME+" STATUS:"+STATUS);}} catch (SQLException e) {e.printStackTrace();}finally {try {OracleUtil.closeCon(connection);}catch (SQLException e) {e.printStackTrace();}}}//修改public int update(){connection = OracleUtil.getCon();String sql = "update student set name = ?,gender = ? where id = ?";int result = 0;try {ps = connection.prepareStatement(sql);ps.setString(1,"老张");ps.setString(2,"男");ps.setInt(3,2);result = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {try {OracleUtil.closeCon(connection);}catch (SQLException e) {e.printStackTrace();}}return result;}//删除public int delete(){int result = 0;connection = OracleUtil.getCon();String sql = "delete from student where id = ?";try {ps = connection.prepareStatement(sql);ps.setInt(1,1);result = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {try {OracleUtil.closeCon(connection);}catch (SQLException e) {e.printStackTrace();}}return result;}
 
}

调用方法

dbCDR objCDR = new dbCDR(eventJson);
objCDR.insert();

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/744053.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Panda数据处理

一、 Pandas简介 Pandas,python+data+analysis的组合缩写,是python中基于numpy和matplotlib第三方数据分析库,与后者共同构成python数据分析基础工具包,享有数据三剑客之名。正因为pandas是在numpy基础上实现的,其核心数据结构与numpy的ndarray十分相似,但pandas与numpy的…

1.基础知识

单片机:Single-Chip Microcomputer,单片微型计算机,是一种集成电路芯片 CPU:CPU内存:SRAM硬盘:FLASH主板:外设 仪器仪表:电源/示波器/焊台家用电器:空调/冰箱/洗衣机工业控制:机器人/PLC/电梯汽车电子:GPS/ABS/胎压监测 :数据与程序储存在同一存储器,分时复用Core…

线程池遇到父子任务,有大坑,要注意!

你好呀,我是歪歪。 最近在使用线程池的时候踩了一个坑,给你分享一下。 在实际业务场景下,涉及到业务代码和不同的微服务,导致问题有点难以定位,但是最终分析出原因之后,发现可以用一个很简单的例子来演示。 所以歪师傅这次先用 Demo 说问题,再说场景,方便吸收。Demo 老…

线性规划模型复习总结

线性规划(Linear Programming, LP)是一种数学优化方法,用于在给定约束条件下最大化或最小化目标函数。线性规划广泛应用于经济、工程、管理等领域,通过建立数学模型,帮助决策者找到最优解决方案。 一、线性规划数学模型 1.1 模型三要素目标函数(Objective Function) 目标…

nginx ./nginx -s reload 工作进程pid与实际不一致导致平滑重启报错

某次修改nginx配置后使用 ./nginx -s reload 重启nginx, 结果报错, 如图所示, 去kill工作进程的时候显示找不到该进程原因是位于nginx/logs下的 nginx.pid 中的pid和实际不一致造成的 nginx.pid 文件是 Nginx web 服务器在启动时创建的一个进程标识符 (PID) 文件。这个文件包含…

第七天学习笔记(经验测试,白盒测试)

经验测试法 错误推测法 基于经验的测试技术之错误推测法 错误推测法也叫错误猜测法,就是根据经验猜想,已有的缺陷,测试经验和失败数据等可能有什么问题并依此设计测试用例.异常分析法 基于经验的测试技术之异常分析法 系统异常分析法就是针对系统有可能存在的异常操作、软硬…

SQL Server sa账号被锁定

SQL Server的sa账号老是被锁(登录已锁定)问题:最近sa登录老是被锁定,去查看数据库->安全性->sa账号右键属性,在状态选项卡中找到sql server 身份验证 ,发现“登录已锁定”被勾选了;把这个勾选去掉,然后提示必须修改密码。“登录已锁定”的勾选去掉并修改密码后又能…

B+树要点梳理

B+树重要操作 中间节点中间节点的key,与其对应的指针的原则是,小于key的元素在其指针指向的节点中 中间节点的key可以看成是右斜着排放的,即小于等于key的节点由key对应的指针指定,最有一个指针指向大于最右侧key的节点分裂当中间节点数量满了时,进行分裂,新生成一个相邻…

AI学习 | 概念解释 + Scikit-learn 的简单情况

一些机器学习概念解释点击查看代码 * 机器学习:是AI的一个子集,不用人类显式编程,让计算机通过算法自行学习和改进 * 监督学习:有数据、有标签,告诉机器什么是什么,让机器来学习输入和输出的映射关系。比如:分类和回归(预测)* 非监督学习:有数据没有标签,让机器自己…

LeetCode 1530. Number of Good Leaf Nodes Pairs

原题链接在这里:https://leetcode.com/problems/number-of-good-leaf-nodes-pairs/description/ 题目: You are given the root of a binary tree and an integer distance. A pair of two different leaf nodes of a binary tree is said to be good if the length of the s…

Windows节点加入K8S集群(K8S搭建Linux和Window混合集群)

说明:K8S多数情况用于linux系统的集群,目前很少人实践linux 和 windows 的混合集群。linux 和 windows 的K8S混合集群,是以linux 为Master节点,Windows 为 Node节点的。本示例linux 采用centos7.6,windows 采用 windows server 2019(均为虚拟机)。 一、前提准备1.熟悉li…

[笔记]快速傅里叶变换(FFT)

模板题:P3803 【模板】多项式乘法(FFT) 快速傅里叶变换(Fast Fourier Transform,FFT)在算法竞赛中主要用于求卷积,或者说多项式乘法。如果我们枚举两数的各系数相乘,时间复杂度是\(O(n^2)\),而FFT可以将这一过程优化到\(O(n\log n)\)。 流程 整个FFT算法分\(3\)个过程:…