/**
* oracle jdbc
* @author rgy
*
*/
public class Dao {
private Connection conn;
private ResultSet rs;
private ResultSetMetaData md;
private PreparedStatement ps;
private List<Map<String,Object>> list;
private Map<String,Object> map;
private Integer flg;
private String key;
private Object value;
private static Source source;
static{
source = new Source();
}
/**
* 执行dml语句
* @param sql dml语句
* @param objs 参数
* @return 0失败 1成功
* @throws SQLException sql异常
*/
public int dml(String sql, Object... objs) {
try {
conn = source.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < objs.length; i++) {
ps.setObject(i+1, objs[i]);
}
flg = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
source.close(conn,ps);
}
return flg;
}
/**
* 执行查询语句
* @param sql 查询语句
* @param objs 参数
* @return 查询结果
*/
public List<Map<String,Object>> query(String sql,Object...objs){
list = new ArrayList<>();
try {
conn = source.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < objs.length; i++) {
ps.setObject(i+1, objs[i]);
}
rs = ps.executeQuery();
md = rs.getMetaData();
while (rs.next()) {
map = new HashMap<>();
for (int i = 1; i <= md.getColumnCount(); i++) {
key = md.getColumnName(i);
value = rs.getObject(i);
map.put(key, value);
}
list.add(map);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
source.close(conn,ps,rs);
}
return list;
}
/**
* 添加数据
* @param sql 添加语句
* @param objs 参数
* @return 0失败 1成功
*/
public int add(String sql,Object...objs) {
return dml(sql, objs);
}
/**
* 修改数据
* @param sql 修改语句
* @param objs 参数
* @return 0失败 1成功
* @throws SQLException sql异常
*/
public int mod(String sql,Object...objs){
return dml(sql, objs);
}
/**
* 删除数据
* @param sql 删除语句
* @param objs 参数
* @return 0失败 1成功
*/
public int del(String sql,Object...objs){
return dml(sql, objs);
}
}
/**
* 数据源
* @author rgy
*
*/
public class Source {
private Connection conn;
private static String url;
private static String user;
private static String psw;
private static String driver;
private static ResourceBundle rb;
static {
rb = PropertyResourceBundle.getBundle("jdbc");
url = rb.getString("url");
user = rb.getString("user");
psw = rb.getString("password");
driver = rb.getString("driver");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException {
conn = DriverManager.getConnection(url, user, psw);
return conn;
}
public void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void close(Connection conn, Statement stmt) {
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Var {
static volatile long sum;
}
public class Test {
public static void main(String[] args) {
Test t = new Test();
int nThreads = 10;
ExecutorService es = Executors.newFixedThreadPool(nThreads);
CyclicBarrier barrier = new CyclicBarrier(nThreads);
for (int i = 0; i < nThreads; i++) {
es.submit(()->t.add(barrier));
}
es.shutdown();
}
public void add(CyclicBarrier barrier) {
try {
long beginTime = System.currentTimeMillis();
Dao dao = new Dao();
for (int j = 0; j < 10; j++) {
dao.add("insert into test (id, name) values (?, ?)", j, j);
}
long endTime = System.currentTimeMillis();
long costTime = endTime - beginTime;
Var.sum += costTime;
System.out.println(Thread.currentThread().getName() + "," + costTime + "ms," + Var.sum+"ms");
barrier.await();
} catch (Exception e) {
e.printStackTrace();
}
}
}