在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执行查询的更多相关文章

  1. Oracle的学习三:java连接Oracle、事务、内置函数、日期函数、转换函数、系统函数

    1.java程序操作Oracle java连接Oracle JDBC_ODBC桥连接 1.加载驱动: Class.forName("sun.jdbc.odbc.JdbcodbcDriver& ...

  2. java连接oracle数据库的实现代码

    package connectionOracleDatabase; import java.sql.Connection; import java.sql.DatabaseMetaData; impo ...

  3. oracle入门(5)——java连接oracle数据库

    [本文介绍] 前面几篇说了那么多,最终还没讲到如何用java连接数据库,本文实用一点,讲讲如何连接数据库. [java连接oracle数据库] 1.导入jdbc驱动:看到这里,就忙着上网找驱动?不,安 ...

  4. Java连接Oracle数据库的三种连接方式

    背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...

  5. Java连接Oracle数据库常用方法

    JDBC的六大步骤: 注册驱动 获取连接 获取执行sql语句对象 执行sql语句 处理结果集 关闭资源 oracle URL: jdbc:oracle:thin:@localhost:1521:SID ...

  6. java连接oracle jdbc连接

    Class.forName("oracle.jdbc.driver.OracleDriver"); Connection ct=Driver.Magager.getConnecti ...

  7. java连接Oracle数据库实现增删改查并在Navicat中显示

    创建TEST表 eclipse中的java项目 代码 数据库方法类 DBUtil: package util; import java.sql.Connection; import java.sql. ...

  8. 二十三、java连接oracle数据库操作:jdbc

    1.jdbc 1) 含义:JDBC是java语言连接数据库,Java Date Base Connectivity2) jdbc的本质:在编程时java程序会去连接不同的数据库,而每个数据库的底层的实 ...

  9. Java连接Oracle database小结

    利用jdbc连接Oracle数据库,首先得选对jdbc的版本. jdk6需要ojdbc6.jar这个包.如果选错的话,调用isValid()这个方法时,有可能有这个异常: Exception in t ...

随机推荐

  1. Ansible-Playbook实战

    一.Playbook 实战案例 1.准备环境 角色 外网IP(NAT) 内网IP(LAN) 部署软件 m01 eth0:10.0.0.61 eth1:172.16.1.61 ansible ly-ba ...

  2. java执行字符串中的运算公式

    import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.Scrip ...

  3. 屏蔽iOS升级方法

    1.iPhone或者iPad使用safari浏览器打开http://d.updater.i4.cn/i4tools7/temp/tvos.mobileconfig 2.点击[允许] 3.进入[通用]- ...

  4. nginx理论基础

  5. 【CF451E】Devu and Flowers

    题目大意:求多重集合的组合数, \(N \le 1e14,M \le 20\). 题解: 考虑容斥原理,具体做法是枚举所有情况,即:枚举子集,第 i 位为 1 表示满足第 i 个条件,正负号采用 si ...

  6. sublime text 前端插件安装

    Package Control安装 打开sublime编辑器,ctrl + ` 打开安装PackageControl界面: sublime text3: import urllib.request,o ...

  7. 再提供一种解决Nginx文件类型错误解析漏洞的方法

    [文章作者:张宴 本文版本:v1.2 最后修改:2010.05.24 转载请注明原文链接:http://blog.zyan.cc/nginx_0day/] 注:2010年5月23日14:00前阅读本文 ...

  8. alembic在tornado项目中的应用

    在项目中引用alembic 协助tornado项目生成数据表结构 alembic revision --autogenerate -m "create tables" 第二步执行 ...

  9. Vue.use() 方法

    1.本人在学习Vue时,会用到 Vue.use() .例如:Vue.use(VueRouter).Vue.use(MintUI).但是用 axios时,就不需要用 Vue.use(axios),就能直 ...

  10. python插入mysql数据(2)

    python插入mysql数据(2) """插入操作""" import pymysql import datetime from pymy ...