可以直接进入网站的正能量网站,网站开发多少钱一天是,怎么查看服务器上的网站,资源下载站 wordpress文章目录 0 说明1 如何使用jdbc操作数据库1.1 加载数据库驱动1.2 建立数据库连接1.3 创建Statement或者PreparedStatement用来执行SQL1.4 开始执行SQL语句1.5 处理结果集1.6 关闭连接1.7 完整代码 2 批量操作数据库3 如何打印SQL语句4 jdbc常用开源类库 1 JDBC实现往MySQL插入百… 文章目录 0 说明1 如何使用jdbc操作数据库1.1 加载数据库驱动1.2 建立数据库连接1.3 创建Statement或者PreparedStatement用来执行SQL1.4 开始执行SQL语句1.5 处理结果集1.6 关闭连接1.7 完整代码 2 批量操作数据库3 如何打印SQL语句4 jdbc常用开源类库 1 JDBC实现往MySQL插入百万级数据 2 详解JDBC(Java Database connect) 0 说明
JDBCJava 数据库连接是 Java 语言中用来连接和操作关系型数据库的 API。使用 JDBC我们可以通过编写 Java 代码来访问各种数据库包括 MySQL、Oracle、SQL Server 等。 JDBC 是基于 Java 的标准接口它提供了一组接口和类可以让 Java 应用程序与各个数据库进行交互。JDBC 的工作原理如下
1.、加载数据库驱动程序 在使用 JDBC 前需要先加载相应的数据库驱动程序不同的数据库使用的驱动程序不同。通常情况下我们需要将驱动程序的 jar 文件添加到项目的类路径中并在代码中使用 Class.forName() 方法来加载驱动程序。 2、连接数据库 使用 DriverManager 类来连接数据库该类提供了一组方法来获取数据库连接。连接字符串通常由以下三部分组成协议、主机名和数据库名称。 3、执行 SQL 语句 连接成功后就可以通过 Connection 对象创建 Statement 或 PreparedStatement 对象用于执行 SQL 语句。Statement 支持静态 SQL 语句而 PreparedStatement 支持动态 SQL 语句。执行 SQL 语句后可以通过 ResultSet 对象获取查询结果。 4.、关闭连接 完成数据库操作后必须关闭 Connection、Statement 和 ResultSet 对象释放资源。 1 如何使用jdbc操作数据库
1.1 加载数据库驱动 在代码中使用 Class.forName() 方法加载数据库驱动程序。 Class.forName(com.mysql.cj.jdbc.Driver);
1.2 建立数据库连接 使用 DriverManager 类的 getConnection() 方法传入连接字符串、用户名和密码等参数来获取数据库连接。 private String url jdbc:mysql://localhost:3306/school;
private String user root;
private String password root;Connection conn DriverManager.getConnection(url, user, password);
1.3 创建Statement或者PreparedStatement用来执行SQL 使用 Connection 对象的 createStatement() 或 prepareStatement() 方法创建 Statement 或 PreparedStatement 对象用于执行 SQL 语句。 String sql select * from user limit 1;
PreparedStatement preparedStatement connection.prepareStatement(sql);
1.4 开始执行SQL语句 使用 Statement 或 PreparedStatement 对象的 executeQuery() 或 executeUpdate() 方法执行 SQL 语句返回 ResultSet 或更新的行数。 String sql select * from user limit 1;
ResultSet rs preparedStatement .executeQuery(sql);
int count preparedStatement .executeUpdate();
1.5 处理结果集 使用 ResultSet 对象的 getXXX() 方法获取查询结果例如 getInt()、getString() 等方法。 while (rs.next()) {int id rs.getInt(id);String name rs.getString(name);int age rs.getInt(age);
}1.6 关闭连接 使用 Connection、Statement 和 ResultSet 对象的 close() 方法关闭连接释放资源。 rs.close();stmt.close();conn.close();1.7 完整代码 Testpublic void t10() {String url jdbc:mysql://localhost:3306/school;String user root;String password root;try {Class.forName(com.mysql.cj.jdbc.Driver);} catch (ClassNotFoundException e) {log.error(error msg:【{}】, e);throw new IllegalArgumentException(e);}try {Connection conn DriverManager.getConnection(url, user, password);String sql select * from user limit 10;PreparedStatement preparedStatement conn.prepareStatement(sql);ResultSet resultSet preparedStatement.executeQuery(sql);int id 0;String userName null, sex null, address null;java.sql.Date birthday null;while (resultSet.next()) {id resultSet.getInt(1);userName resultSet.getString(2);birthday resultSet.getDate(3);sex resultSet.getString(4);address resultSet.getString(5);log.info(结果集id-【{}】userName-【{}】birthday-【{}】sex-【{}】address-【{}】, id, userName, birthday, sex, address);}conn.close();preparedStatement.close();resultSet.close();} catch (SQLException e) {log.error(error msg:【{}】, e);throw new IllegalArgumentException(e);}}2 批量操作数据库
说明1url拼接 rewriteBatchedStatementstrue 说明2事务关闭自动提交手动提交事务 connection.setAutoCommit(false);connection.commit();
说明3executeBatch();批量执行 String url jdbc:mysql://localhost:3306/school?rewriteBatchedStatementstrue;String user root;String password root;private void jdbcSave(ListUser cachedList) {Connection connection null;PreparedStatement preparedStatement null;try {Class.forName(com.mysql.cj.jdbc.Driver);connection DriverManager.getConnection(url, user, password);String sql insert into user(user_name,birthday,sex,address) values (?,?,?,?);preparedStatement connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);connection.setAutoCommit(false);for (User item : cachedList) {preparedStatement.setString(1, item.getUserName());preparedStatement.setDate(2, new Date(item.getBirthday().getTime()));preparedStatement.setString(3, item.getSex());preparedStatement.setString(4, item.getAddress());preparedStatement.addBatch();}preparedStatement.executeBatch();connection.commit();} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();} finally {if (preparedStatement ! null) {try {preparedStatement.close();} catch (SQLException e) {log.error(error msg:[{}], e);throw new RuntimeException(e);}}if (connection ! null) {try {connection.close();} catch (SQLException e) {log.error(error msg:[{}], e);}}}}3 如何打印SQL语句
/*** param sql 原始SQL* param parameterList 参数列表* return 返回SQL* description jdbc打印执行SQL*/private static String showFinalSql(String sql, ListObject parameterList) {//1 如果没有参数说明是不是动态SQL语句int paramCount 0;if (CollectionUtils.isNotEmpty(parameterList)) {paramCount parameterList.size();}if (paramCount 1) {return sql;}//2 如果有参数则是动态SQL语句StringBuilder returnSql new StringBuilder();String[] subSql sql.split(\\?);for (int i 0; i paramCount; i) {Object item parameterList.get(i);if (item instanceof Integer) {returnSql.append(subSql[i]).append( ).append(item).append( );} else if (item instanceof Date) {String formatStr DateFormatUtils.format((Date) (item), yyyy-MM-dd HH:mm:ss);returnSql.append(subSql[i]).append().append(formatStr).append();} else {returnSql.append(subSql[i]).append().append(item).append();}}if (subSql.length parameterList.size()) {returnSql.append(subSql[subSql.length - 1]);}return returnSql.toString();}
核心代码打印日志使用slf4j // 组装入参数据
ListObject list Arrays.asList(item.getUserName(), new java.sql.Date(item.getBirthday().getTime()), item.getSex(), item.getAddress());
// 调用自定义方法打印SQL
showFinalSql(sql,list);
private void jdbcSave(ListUser cachedList) {SqlSession sqlSession sqlSessionFactory.openSession();Connection connection sqlSession.getConnection();PreparedStatement preparedStatement null;sqlSessionFactory.getConfiguration();try {Class.forName(com.mysql.cj.jdbc.Driver);String sql insert into user(user_name,birthday,sex,address) values (?,?,?,?);preparedStatement connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);connection.setAutoCommit(false);for (User item : cachedList) {preparedStatement.setString(1, item.getUserName());preparedStatement.setDate(2, new java.sql.Date(item.getBirthday().getTime()));preparedStatement.setString(3, item.getSex());preparedStatement.setString(4, item.getAddress());preparedStatement.addBatch();ListObject list Arrays.asList(item.getUserName(), new java.sql.Date(item.getBirthday().getTime()), item.getSex(), item.getAddress());showFinalSql(sql,list);}preparedStatement.executeBatch();connection.commit();} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();} finally {if (preparedStatement ! null) {try {preparedStatement.close();} catch (SQLException e) {log.error(error msg:[{}], e);throw new RuntimeException(e);}}if (connection ! null) {try {connection.close();} catch (SQLException e) {log.error(error msg:[{}], e);}}}}4 jdbc常用开源类库
https://www.cnblogs.com/fnz0/p/5858546.html