您的位置:首页 > 数据库

动态加载JDBC Jar包连接数据库

2016-07-19 15:43 260 查看
在用Jmeter的时候,需要构造一些请求数据,所以为了方便大家使用,使用了动态加载jdbc jar包来连接数据库,以下是部分代码片段。

import java.io.*;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
* Package:PACKAGE_NAME
* Author:tanyong
* Date: 2016/7/13
* Desc:
*/
public class GenerateSyncOrderData {
// String[] res=
// {"0000000006149049.xml","0000000006150003.xml","0000000006150013.xml","0000000006150017.xml","0000000006150023.xml","0000000006150040.xml"};
static List<String> names = new ArrayList<String>();
static String dirName = "D:\\project\\testCXFClient\\testClient\\src\\main\\java";
static String prefixLabel = "<hybrisOrderNo>";
static String confirmOrderActionLabel = "<action>";
static String confirmOrderActionPayed = "PAYED";
static String confirmOrderActionCancel = "CANCEL";

static String syncOrderOutputFile = "syncOrderFromHysbris.dat";

static String confirmOrderOutputFile = "confirmOrderFromHysbris.dat";
static String confirmOrderTempFile = "confirmOrderTmp.xml";

static String cancelOrderOutputFile = "cancelOrderFromHysbris.dat";
static String cancelOrderTempFile = "cancelOrderTmp.xml";
static int genNo = 100;
static List<String> tmpOrderNos = new ArrayList<String>();

static String url = "jdbc:oracle:thin:@10.82.21.52:1521:GOMSUAT";
static String userName = "eos_user";
static String password= "wrutbznX7q";
static Connection connection;

public static void main(String[] args) {
if (args.length>=10){
//read parameter
if (args[0]!=null){
dirName = args[0];
}
if (args[1]!=null){
syncOrderOutputFile = args[1];
}
if (args[2]!=null){
genNo = Integer.parseInt(args[2]);
}
if (args[3]!=null){
confirmOrderOutputFile = args[3];
}
if (args[4]!=null){
confirmOrderTempFile = args[4];
}
if (args[5]!=null){
cancelOrderOutputFile = args[5];
}
if (args[6]!=null){
cancelOrderTempFile = args[6];
}
if (args[7]!=null){
url = args[7];
}
if (args[8]!=null){
userName = args[8];
}
if (args[9]!=null){
password = args[9];
}
}

System.out.println("resource dir:"+dirName);
System.out.println("syncOrderOutputFile:"+ syncOrderOutputFile);
System.out.println("confirmOrderOutputFile:"+ confirmOrderOutputFile);
System.out.println("generate count:"+genNo);

//get all  xml file names
GenerateSyncOrderData gen = new GenerateSyncOrderData();
//System.out.println(GenerateSyncOrderData.class.getResource(""));
//删除旧的订单请求文件
File sycOrderFile = new File(dirName + "\\" + syncOrderOutputFile);
if (sycOrderFile.exists()) {
sycOrderFile.delete();
}

//删除旧的订单确认文件
File confirmOrderFile = new File(dirName + "\\" + confirmOrderOutputFile);
if (confirmOrderFile.exists()) {
confirmOrderFile.delete();
}

//删除旧的取消订单文件
File cancelOrderFile = new File(dirName + "\\" + cancelOrderOutputFile);
if (cancelOrderFile.exists()) {
cancelOrderFile.delete();
}

//生成sycOrder数据文件
gen.generateSyncOrderData(genNo, dirName + "\\" + syncOrderOutputFile);

//生成confirmOrder数据文件
gen.generateConfimrOrCancelOrderData(dirName + "\\" + confirmOrderOutputFile,confirmOrderTempFile);

//生成cancelOrder数据文件
gen.generateConfimrOrCancelOrderData(dirName + "\\" + cancelOrderOutputFile, cancelOrderTempFile);

//保存生成的sourceOrderNo到临时表
gen.saveTempOrderNoData();
}

private void generateConfimrOrCancelOrderData(String fileName, String tempFileSrc) {
String content = null;
try {

//Writer writer = new FileWriter(fileName, true);
Writer writer = new OutputStreamWriter(new FileOutputStream(fileName),"UTF-8");
for (int i = 0 ;i < tmpOrderNos.size() ; i++) {
content = readFileByLines(dirName + "\\" + tempFileSrc);

//假如是确认订单,则将百分之二十的付款情况设为未付款
if(content.contains(confirmOrderActionLabel)){
String payAction = confirmOrderActionLabel+confirmOrderActionPayed;
if(i%4 == 0){
payAction  = confirmOrderActionLabel+confirmOrderActionCancel;
}
content = content.replaceAll(confirmOrderActionLabel,payAction);
}

String newNo = tmpOrderNos.get(i);
newNo = prefixLabel+newNo;
content=content.replaceAll(prefixLabel,newNo);
writer.write(content + "\t\n");
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}

}

private void generateSyncOrderData(int count, String fileName) {
String[] dir = new File(dirName).list();
for (int i = 0; i < dir.length; i++) {
if (dir[i].endsWith(".xml") && !dir[i].contains("Tmp")) {
// System.out.println(dirName+"\\"+dir[i]);
names.add(dirName + "\\" + dir[i]);
}
}

// get new hybrisOrderNo
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String noStart = "9" + sdf.format(date);

// write to dat file
int i = 0;
int j = 0;
String content = null;
try {

//Writer writer = new FileWriter(fileName, true);
Writer writer = new OutputStreamWriter(new FileOutputStream(fileName),"UTF-8");
while (i < count) {
content = readFileByLines(names.get(j));
content = setNewHybrisOrderNo(content, noStart, names.get(j), i);
writer.write(content + "\t\n");
i++;
if (j == names.size() - 1) {
j = 0;
} else {
j++;
}
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}

}

public String setNewHybrisOrderNo(String content, String start,
String fileName, int no) {
int index = fileName.lastIndexOf("\\");
String oldNo = fileName.substring(index + 1, fileName.length() - 4);
System.out.println("new hybris order no is: ");
String str = String.valueOf(no + 100001).substring(2);
String newNo = start + str;
System.out.println(newNo);

tmpOrderNos.add(newNo);
// content = content.replace("<"+prefix+">"+oldNo+"</"+prefix+">",
content = content.replaceAll(oldNo, newNo);
// System.out.println(content);
return content;
}

public String readFileByLines(String fileName) {
StringBuffer buffer = new StringBuffer();
File file = new File(fileName);
BufferedReader reader = null;
try {
// System.out.println("begin read file "+fileName);
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
reader = new BufferedReader(isr);
String tempString = null;
int line = 1;

while ((tempString = reader.readLine()) != null) {

buffer.append(tempString);
line++;
}
reader.close();
// System.out.println(buffer.toString());
return buffer.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader !
4000
= null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
return "";
}

/**
* 清空临时表数据
*/
private void saveTempOrderNoData(){
Connection conn = getConn();
Statement stmt = null;
try {
conn.setAutoCommit(false);
stmt = conn.createStatement();
for(String orderNo : tmpOrderNos){
String sql = "insert into power_test values('"+orderNo+"') ";
stmt.addBatch(sql);
}

stmt.executeBatch();
conn.commit();

} catch (SQLException e) {
e.printStackTrace();
}finally {
closeConn(stmt,conn);
}
}

/**
* 获取数据库连接
* @return
*/
private Connection getConn(){
if(connection!=null){
return connection;
}
try {
Driver driver = getDrive();
Properties properties = new Properties();
properties.setProperty("user",userName);
properties.setProperty("password", password);
Connection connection = driver.connect(url, properties);
System.out.println(connection);
return connection;
} catch (Exception e) {
System.out.println("连接数据库异常");
e.printStackTrace();
}

return null;
}

/**
* 关闭数据库连接
* @param stmt
* @param conn
*/
private void closeConn(Statement stmt,Connection conn){
try {
if(stmt != null){
stmt.close();
}
if(conn != null){
conn.close();
}
}catch (Exception e){
e.printStackTrace();
}
}

/**
* 获取数据库驱动
* @return
*/
private Driver getDrive(){
try {
File file = new File(dirName+"\\"+"ojdbc14.jar");
URLClassLoader loader = new URLClassLoader(new URL[] { file.toURI().toURL() });
Class clazz = loader.loadClass("oracle.jdbc.driver.OracleDriver");
Driver driver = (Driver) clazz.newInstance();

return driver;

} catch (Exception e) {
e.printStackTrace();
}

return null;
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: