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 ...
随机推荐
- 修改Anaconda启动时默认路径
1.找到Anoconda启动快捷方式,入下图: 2.右击点击属性,进入下图: 3.将第三行的 目标(T): ......D:\Anoconda\Scripts\jupyter-notebook-sc ...
- JavaScript 复制变量的三种方法
参考:Copying Objects in JavaScript - Orinami Olatunji(@orinamio_) October 23, 2017 直接将一个变量赋给另一个变量时, ...
- STARTUPINFO结构体
typedef struct _STARTUPINFO { DWORD cb; //包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段.应用程序必须将 ...
- 使用fastjson的parseObject方法将json字符串转换成Map 或者List
fastjson 转换成map HashMap<String,String> map = JSON.parseObject(jsonStr,new TypeReference<Has ...
- MyEclipse使用教程:使用工作集组织工作区
[MyEclipse CI 2019.4.0安装包下载] 工作集允许您通过过滤掉不关注的项目来组织项目视图.激活工作集时,只有分配给它的项目才会显示在项目视图中. 如果您的视图中有大量项目,这将非常有 ...
- VCL界面控件DevExpress VCL Controls v19.1.3全新来袭
DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...
- Django 之 文件配置、pycharm及django连接数据库、创表及表的增删改查02
目录 创建项目后的文件夹配置 静态文件配置 接口前缀动态绑定 form表单回顾 根据请求方式的不同,返回前端不同的信息 pycharm 连接MYSQL数据库 Django 连接MYSQL数据库的配置 ...
- vue项目搭建步骤以及一些安装依赖包
一. vue-cli初始化1. 全局安装 vue-clinpm install --global vue-cli2. 创建一个基于 webpack 模板的新项目vue init webpack my- ...
- k8s-wordpress
将数据库的密码写入wordpress的yaml配置文件不行,额外输入可以初始化数据成功,好奇怪 mysql 配置yamL cat mysql.yml --- apiVersion: apps/v1be ...
- sql in条件 超过1000字符的处理方法
private string getOracleSQLIn(string[] ids, string field) { int count = Math.Min(ids.Length, 1000); ...