|
|
|
@ -1,15 +1,23 @@
|
|
|
|
|
package cn.edu.hust.jdbc;
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
import cn.edu.hust.conf.ConfigurationManager;
|
|
|
|
|
//
|
|
|
|
|
import cn.edu.hust.constant.Constants;
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
import java.sql.Connection;
|
|
|
|
|
//
|
|
|
|
|
import java.sql.DriverManager;
|
|
|
|
|
//
|
|
|
|
|
import java.sql.PreparedStatement;
|
|
|
|
|
//
|
|
|
|
|
import java.sql.ResultSet;
|
|
|
|
|
//
|
|
|
|
|
import java.sql.SQLException;
|
|
|
|
|
//
|
|
|
|
|
import java.util.List;
|
|
|
|
|
//
|
|
|
|
|
import java.util.concurrent.ArrayBlockingQueue;
|
|
|
|
|
//
|
|
|
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
|
|
|
|
|
|
|
|
|
// JDBCHelper类是一个用于管理数据库连接以及执行数据库相关操作的工具类,
|
|
|
|
@ -64,12 +72,13 @@ public class JDBCHelper {
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 获取JDBCHelper类的唯一实例对象的静态方法,外部代码通过调用此方法获取该工具类的实例,进而使用其提供的数据库操作功能。
|
|
|
|
|
public static JDBCHelper getInstance() {
|
|
|
|
|
return instance;
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -87,6 +96,7 @@ public class JDBCHelper {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -98,10 +108,11 @@ public class JDBCHelper {
|
|
|
|
|
*/
|
|
|
|
|
public int excuteUpdate(String sql, Object[] params) {
|
|
|
|
|
int re = 0;
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
Connection conn = null;
|
|
|
|
|
//
|
|
|
|
|
PreparedStatement statement = null;
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
try {
|
|
|
|
|
// 从连接池中获取一个数据库连接
|
|
|
|
|
conn = getConnection();
|
|
|
|
@ -119,19 +130,24 @@ public class JDBCHelper {
|
|
|
|
|
|
|
|
|
|
return re;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
//
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
} finally {
|
|
|
|
|
// 无论是否执行成功,都需要将使用完的数据库连接归还到连接池中,
|
|
|
|
|
// 如果连接对象不为空,尝试将其放回阻塞队列(queue),如果放回过程出现中断异常则打印栈追踪信息。
|
|
|
|
|
if (conn!= null) {
|
|
|
|
|
if (conn!= null)
|
|
|
|
|
//
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
queue.put(conn);
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
return re;
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 定义一个内部接口QueryCallBack,该接口中定义了一个方法process,用于处理查询结果集(ResultSet)。
|
|
|
|
@ -149,12 +165,13 @@ public class JDBCHelper {
|
|
|
|
|
*/
|
|
|
|
|
public void excuteQuery(String sql, Object[] params, QueryCallBack queryCallBack) {
|
|
|
|
|
Connection conn = null;
|
|
|
|
|
//
|
|
|
|
|
PreparedStatement statement = null;
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
try {
|
|
|
|
|
// 从连接池中获取一个数据库连接
|
|
|
|
|
conn = getConnection();
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// 使用获取到的连接创建一个PreparedStatement对象,用于执行带参数的SQL语句
|
|
|
|
|
statement = conn.prepareStatement(sql);
|
|
|
|
|
|
|
|
|
@ -168,6 +185,7 @@ public class JDBCHelper {
|
|
|
|
|
|
|
|
|
|
// 调用传入的回调接口对象的process方法,将结果集传递进去,由具体实现该接口的类来处理结果集数据。
|
|
|
|
|
queryCallBack.process(rs);
|
|
|
|
|
//
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
@ -179,8 +197,10 @@ public class JDBCHelper {
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -192,8 +212,11 @@ public class JDBCHelper {
|
|
|
|
|
*/
|
|
|
|
|
public int[] excuteBatch(String sql, List<Object[]> params) {
|
|
|
|
|
Connection connection = null;
|
|
|
|
|
//
|
|
|
|
|
PreparedStatement statement = null;
|
|
|
|
|
//
|
|
|
|
|
int[] res = null;
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// 从连接池中获取一个数据库连接
|
|
|
|
@ -209,8 +232,10 @@ public class JDBCHelper {
|
|
|
|
|
for (Object[] param : params) {
|
|
|
|
|
for (int i = 0; i < param.length; i++) {
|
|
|
|
|
statement.setObject(i + 1, param[i]);
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
statement.addBatch();
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 3. 批量执行所有添加到批处理队列中的SQL语句,返回一个整数数组表示每条语句受影响的行数。
|
|
|
|
@ -218,7 +243,7 @@ public class JDBCHelper {
|
|
|
|
|
|
|
|
|
|
// 4. 最后提交事务,将所有批量执行的SQL语句对数据库的修改统一提交,如果执行过程中出现异常则事务会回滚。
|
|
|
|
|
connection.commit();
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
return res;
|
|
|
|
|
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
@ -232,8 +257,12 @@ public class JDBCHelper {
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
return res;
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
}
|