java连接oracle并load sql从xml执行查询
在ETL的时候,连接oracle并load sql执行是基础操作,需要注意的是记得执行结束后记得关闭connection, 现记录一下:
其中xml文件:
<?xml version="1.0" encoding="GB2312"?>
<SQLSTRING>
<Products>
select carname
from tb_info_car
where CARCODE = ?
ORDER BY carname
</Products>
</SQLSTRING>
其中需要传参数使用?占位
java代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import oracle.jdbc.OracleDriver;
import org.apache.log4j.Logger;
public class SqlLoaderFromXML {
static Logger logger = Logger.getLogger(SqlLoaderFromXML.class);
private static String sqlPath = "./OracleSQL/";
private static String sqlFile = sqlPath + "Car.xml";
private static Connection DBConn = null;
private static final String DEDICATED_CONNECTION_STR = "jdbc:oracle:thin:@(description=(address=(host=#IP)(protocol=tcp)(port=#PORT))(connect_data=(service_name=#SID)(SERVER = DEDICATED)))";
public static String loadSqlFromXml(String xmlFile, String xpath) throws FileNotFoundException, DocumentException {
InputStream input = new FileInputStream(xmlFile);
SAXReader saxReader = new SAXReader(false);
Document sqlDoc = saxReader.read(input);
Node node = sqlDoc.selectSingleNode(xpath);
return node.getText();
}
public static Connection getConnection(String ip,String port, String dbName, String userName,
String password) throws SQLException {
DriverManager.registerDriver(new OracleDriver());
String connStr = "";
connStr = SqlLoaderFromXML.DEDICATED_CONNECTION_STR;
connStr = connStr.replaceAll("#IP", ip);
connStr = connStr.replaceAll("#SID", dbName);
connStr = connStr.replaceAll("#PORT", port);
return DriverManager.getConnection(connStr, userName, password);
}
public static void DBConnect() throws Exception {
DBConn = getConnection(IP,port,dbname,username,password);
DBConn.setAutoCommit(false);
logger.info(" Connet DB success");
}
public static void main(String[] args) throws Exception {
try {
DBConnect();
}
catch(Exception ex){
ex.printStackTrace();
logger.error("........."+ex.getMessage());
logger.error("Connect DB fail");
return;
}
PreparedStatement psQueryCarID = null;
ResultSet rsQueryCarID = null;
String sqlString = loadSqlFromXml(sqlFile, "//SQLSTRING/Products");
logger.info("SQL From XML File: \n" + sqlString);
try{
psQueryCarID = DBConn.prepareStatement(sqlString);
psQueryCarID.setString(1, "Audi");
rsQueryCarID = psQueryCarID.executeQuery();
while(rsQueryCarID.next()){
logger.info("car id: " + rsQueryCarID.getString("carname"));
}
} catch (SQLException e) {
logger.info(e);
}
finally{
if (DBConn != null)
try {
//DBConn.commit();
DBConn.close();
logger.info("close conn.");
} catch (SQLException e) {
e.printStackTrace();
}
if (psQueryCarID != null) {
try {
psQueryCarID.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rsQueryCarID != null) {
try {
rsQueryCarID.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
其中可以把连接oracle部分和load sql部分抽取出来打包以便后续直接调用, 也可以把DB参数放到properties通过读取配置的方式来使用
java连接oracle并load sql从xml执行查询的更多相关文章
- Oracle的学习三:java连接Oracle、事务、内置函数、日期函数、转换函数、系统函数
1.java程序操作Oracle java连接Oracle JDBC_ODBC桥连接 1.加载驱动: Class.forName("sun.jdbc.odbc.JdbcodbcDriver& ...
- java连接oracle数据库的实现代码
package connectionOracleDatabase; import java.sql.Connection; import java.sql.DatabaseMetaData; impo ...
- oracle入门(5)——java连接oracle数据库
[本文介绍] 前面几篇说了那么多,最终还没讲到如何用java连接数据库,本文实用一点,讲讲如何连接数据库. [java连接oracle数据库] 1.导入jdbc驱动:看到这里,就忙着上网找驱动?不,安 ...
- Java连接Oracle数据库的三种连接方式
背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...
- Java连接Oracle数据库常用方法
JDBC的六大步骤: 注册驱动 获取连接 获取执行sql语句对象 执行sql语句 处理结果集 关闭资源 oracle URL: jdbc:oracle:thin:@localhost:1521:SID ...
- java连接oracle jdbc连接
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection ct=Driver.Magager.getConnecti ...
- java连接Oracle数据库实现增删改查并在Navicat中显示
创建TEST表 eclipse中的java项目 代码 数据库方法类 DBUtil: package util; import java.sql.Connection; import java.sql. ...
- 二十三、java连接oracle数据库操作:jdbc
1.jdbc 1) 含义:JDBC是java语言连接数据库,Java Date Base Connectivity2) jdbc的本质:在编程时java程序会去连接不同的数据库,而每个数据库的底层的实 ...
- Java连接Oracle database小结
利用jdbc连接Oracle数据库,首先得选对jdbc的版本. jdk6需要ojdbc6.jar这个包.如果选错的话,调用isValid()这个方法时,有可能有这个异常: Exception in t ...
随机推荐
- shell脚本中的一些特殊符号
在shell中常用的特殊符号罗列如下: # ; ;; . , / \\ 'string'| ! $ ${} $? $$ $* \"string\"* ** ...
- 异常-User class threw exception: java.lang.IllegalStateException: Cannot call methods on a stopped SparkContext.
1 详细信息 User class threw exception: java.lang.IllegalStateException: Cannot call methods on a stopped ...
- mysql数据库表名区分大小写
使用mysql的时候,创建的表明都是大写的,但是查询语句中表明用消息就会报错,表不存在. 查询后发现mysql默认配置是表明区分大小写的,如果要修改成不区分大小写,需要修改一下配置. 1.修改MySq ...
- zabbix的简单操作(proxy代理分布式监控)
分布式监控 作用:分担压力,减轻负载,多机房监控 通过zabbix proxy的搭建,zabbix server可以远程从proxy获取到数据,这里的环境相当于zabbix server具有一个公网i ...
- Tableau 分群
对数据的特征进行分析,分群. 数据选用的是Iris data 下载地址:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/ 1 ...
- 第二章 Vue快速入门-- 24 过滤器-Vue中全局过滤器的基本使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- A*算法实现(图形化表示)——C++描述
概要 A*算法是一种启发式寻路算法,BFS是一种盲目的无目标的搜索算法,相比于BFS,A*算法根据适应度构建优先队列,根据适应度值可以很好的向目标点移动,具体详情,请看搜索相关文档,我在只是实现了在无 ...
- 【HDU5890】Eighty seven
题目大意:给定 N 个数,M 个询问,每次询问如果去掉三个数(可能相同),能否选择恰好 10 个数字,凑出 87 这个数. 题解:骚操作.. 集合凑数问题是一个很经典的模型,即:背包问题. 先进行预处 ...
- CSS 多行省略失效 (-webkit-box-orient 失效) Second Autoprefixer control comment was ignored. Autoprefixer applies control comment to whole block, not to next rules.
webpck不能编译这个属性-webkit-box-orient: vertical https://github.com/fanyifanbumaimeng/Articles/issues/48 / ...
- LINUX学习之二磁盘篇
1.Linux系统中,每个设备都被当成一个文件来对待.文件系统的最小单位是区块(Block) 设备 设备在Linux中的文件名 IDE硬盘 /dev/hd[a-d] SCSI/SATA/USB硬盘 / ...