jdbc 批量insert_Java访问数据库之JDBC实现方式

数据库连接池

数据库连接池用c3p0-0.9.1.2.jar包,通过配置文件的方式来维护数据库连接信息。在类路径下新建c3p0-config.xml文件,内容如下:

root

123456789

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/shiro?characterEncoding=utf-8

5

5

5

20

20

5

JdbcUtils类

该类主要用来加载c3p0数据源属性,获取connection及释放connection。

public class JdbcUtils {

private static DataSource dataSource = null;

static {

//加载c3p0数据源

dataSource = new ComboPooledDataSource("shiro");

}

/**

* 返回、connection

*/

public static Connection getConnection() throws SQLException {

return dataSource.getConnection();

}

/**

* 根据sql 语句名获取具体的sql语句命令

*/

public static String getSql(String name) {

Map sqls = null;

try {

sqls = QueryLoader.instance().load("/sql.properties");

return sqls.get(name);

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

/**

* 释放连接资源

*/

public static void realseDb(Connection connection) {

if (connection != null) {

try {

connection.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

public static void relase(ResultSet reslutSet,Statement satement) {

if (reslutSet != null) {

try {

reslutSet.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (satement != null) {

try {

satement.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

JDBC Dao 接口

Dao 定义 Dao 的基本操作, 由 BaseDao 提供实现。

/**

* Dao 接口, 定义 Dao 的基本操作, 由 BaseDao 提供实现.

*/

public interface DAO {

/**

* 执行 INSERT 操作, 返回插入后的记录的 ID

*/

int insert(String sql, Object... args);

/**

* 执行 UPDATE 操作, 包括 INSERT(但没有返回值), UPDATE, DELETE

*/

boolean update(String sql, Object... args);

/**

* 执行单条记录的查询操作, 返回与记录对应的类的一个对象

*/

T query(String sql, Object... args);

/**

* 执行多条记录的查询操作, 返回与记录对应的类的一个 List

*/

List queryForList(String sql, Object... args);

/**

* 执行一个属性或值的查询操作, 例如查询某一条记录的一个字段, 或查询某个统计信息, 返回要查询的值

*/

E getForValue(String sql, Object... args);

/**

* 执行批量更新操作

*/

void batch(String sql, Object[]... args);

}

BaseDao泛型类

BaseDao 实现DAO 的方法。

/**

* 定义BaseDao泛型类

* 实际操作类型

*/

public class BaseDAOimplements DAO {

private QueryRunner queryRunner = new QueryRunner();

private Class type;

public BaseDAO() {

type = ReflectionUtils.getSuperGenericType(getClass());

}

/**

* 返回一个具体的值

*/

public E getForValue(String sql, Object... args) {

Connection connection = null;

try {

connection = JdbcUtils.getConnection();

return (E) queryRunner.query(connection, sql, new ScalarHandler<>(), args);

} catch (SQLException e) {

e.printStackTrace();

}

finally{

JdbcUtils.realseDb(connection);

}

return null;

}

/**

* 返回多个对象

*/

public List queryForList(String sql, Object... args) {

Connection connection = null;

try {

connection = JdbcUtils.getConnection();

return queryRunner.query(connection, sql, new BeanListHandler<>(type), args);

} catch (SQLException e) {

e.printStackTrace();

}

finally{

JdbcUtils.realseDb(connection);

}

return null;

}

/**

* 返回一个对象

*/

public T query(String sql, Object... args) {

Connection connection = null;

try {

connection = JdbcUtils.getConnection();

return queryRunner.query(connection, sql, new BeanHandler<>(type), args);

} catch (SQLException e) {

e.printStackTrace();

}

finally{

JdbcUtils.realseDb(connection);

}

return null;

}

/**

* 增、删、改

* @param sql

* @param args

*/

public boolean update(String sql, Object... args) {

Connection connection = null;

boolean flag = false;

try {

connection = JdbcUtils.getConnection();

queryRunner.update(connection, sql, args);

flag = true;

} catch (SQLException e) {

e.printStackTrace();

}

finally{

JdbcUtils.realseDb(connection);

}

return flag;

}

/**

* 根据插入的记录获取相应的主键值

* @param sql

* @param args

*/

@Override

public int insert(String sql, Object... args) {

int id = 0;

Connection connection = null;

java.sql.PreparedStatement preparedStatement = null;

ResultSet resultSet = null;

try {

connection = JdbcUtils.getConnection();

preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

if (args != null) {

for (int i = 0; i < args.length; i++) {

preparedStatement.setObject(i + 1, args[i]);

}

}

preparedStatement.executeUpdate();

resultSet = preparedStatement.getGeneratedKeys();

if (resultSet.next()) {

id = resultSet.getInt(1);

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

JdbcUtils.relase(resultSet, preparedStatement);

}

return id;

}

/**

* 批量处理

* @param sql

* @param args

*/

@Override

public void batch(String sql, Object[]... args) {

Connection connection = null;

try {

connection = JdbcUtils.getConnection();

queryRunner.batch(connection, sql, args);

} catch (SQLException e) {

e.printStackTrace();

}

}

}

具体业务DAO实现

根据不同的业务来定义需要的接口,例如维护用户信息(CRUD)的UserDao。

e24ff6ed85d4a8f4df593847fb0fad95.png

在数据持久层定义UserDao的实现类UserDaoImpl去继承BaseDao泛型类实现具体的UserDao。

9c0e827b422177c1c611e6ac5347e0ff.png

在逻辑业务层去实例化UserDaoImpl,再调用相应的方法完成数据的CRUD。

7e2da013d58ced125cc8600c54a7df1b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值