在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. 修改Anaconda启动时默认路径

    1.找到Anoconda启动快捷方式,入下图: 2.右击点击属性,进入下图: 3.将第三行的 目标(T):  ......D:\Anoconda\Scripts\jupyter-notebook-sc ...

  2. JavaScript 复制变量的三种方法

    参考:Copying Objects in JavaScript - Orinami Olatunji(@orinamio_) October 23, 2017    直接将一个变量赋给另一个变量时, ...

  3. STARTUPINFO结构体

    typedef struct _STARTUPINFO { DWORD cb; //包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段.应用程序必须将 ...

  4. 使用fastjson的parseObject方法将json字符串转换成Map 或者List

    fastjson 转换成map HashMap<String,String> map = JSON.parseObject(jsonStr,new TypeReference<Has ...

  5. MyEclipse使用教程:使用工作集组织工作区

    [MyEclipse CI 2019.4.0安装包下载] 工作集允许您通过过滤掉不关注的项目来组织项目视图.激活工作集时,只有分配给它的项目才会显示在项目视图中. 如果您的视图中有大量项目,这将非常有 ...

  6. VCL界面控件DevExpress VCL Controls v19.1.3全新来袭

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  7. Django 之 文件配置、pycharm及django连接数据库、创表及表的增删改查02

    目录 创建项目后的文件夹配置 静态文件配置 接口前缀动态绑定 form表单回顾 根据请求方式的不同,返回前端不同的信息 pycharm 连接MYSQL数据库 Django 连接MYSQL数据库的配置 ...

  8. vue项目搭建步骤以及一些安装依赖包

    一. vue-cli初始化1. 全局安装 vue-clinpm install --global vue-cli2. 创建一个基于 webpack 模板的新项目vue init webpack my- ...

  9. k8s-wordpress

    将数据库的密码写入wordpress的yaml配置文件不行,额外输入可以初始化数据成功,好奇怪 mysql 配置yamL cat mysql.yml --- apiVersion: apps/v1be ...

  10. sql in条件 超过1000字符的处理方法

    private string getOracleSQLIn(string[] ids, string field) { int count = Math.Min(ids.Length, 1000); ...