KaiZhaoKZ 2019-12-22
先贴代码,在做说明
import java.sql.*; import java.util.ArrayList; import java.util.List; public class Conn { private static final String DRIVER = "com.mysql.cj.jdbc.Driver";//mysql 8 的驱动 private static final String DR_URL = "jdbc:mysql://localhost:3306/blog?characterEncoding=utf8&useSSL=true";//数据库连接 private static final String USER = "root";//用户名 private static final String PASSWORD = "root";//密码 /** * 查询所有 * */ public List<UserBean> selectAll(){ Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { /** * 注册驱动 * */ Class.forName(DRIVER); /** * 连接数据库 * */ connection = DriverManager.getConnection(DR_URL, USER, PASSWORD); //处理sql语句 String sql = "select * from user"; /** * 预处理sql语句,防止sql注入 * */ preparedStatement = connection.prepareStatement(sql); //执行查询语句 resultSet = preparedStatement.executeQuery(); List<UserBean> list = new ArrayList<>(); //将得到的结果注入list以便输出, /** * resultSet.getxxx()括号值: * 1.数字,表示结果集中的第几列结果 * 2.数据库字段名 * */ while (resultSet.next()) { UserBean userBean=new UserBean(); userBean.setId(resultSet.getInt("id")); userBean.setName(resultSet.getString("name")); userBean.setPassword(resultSet.getString("password")); list.add(userBean); } return list; } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally { /** * 当完成一个数据库操作后应当将已经开启的资源关闭,否则会占用大量内存资源,导致内存溢出。关闭资源时注意先开后关的顺序 * */ if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (preparedStatement != null) { try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } return null; } }
在使用jdbc连接数据库的时候,会发现部分操作时需要重复使用的,比如连接数据库和关闭资源,这时候就可以将其提炼出来封装成一个方法方便使用,并且代码看起来不会很臃肿杂乱,还会在一定程度上节省代码量和空间内存。
在数据库操作结束后一定要将开启的资源按照先开后关的顺序将其关闭。否则当数据量大到一定程度时会占用大量内存资源,导致内存溢出。
在关闭资源时我们通常使用的是xxx.close()来处理的,如果在finally里面这样关闭时:
finally{ try { resultSet.close(); preparedStatement.close(); connection.close(); } catch (SQLException e) { e.printStackTrace(); } }
这样看它的确是按照之前说的先开后关的顺利了,并且也会捕获异常,但是在这种情况下,假如在connection没有来得及赋值的时候出现了意外,这样就会直接执行finally里面的代码,这样就会导致一个空对象调用close,就会引起新的异常导致程序崩溃,对于statement依然如此,因此,我们需要进行判空!所以关闭资源的正确写法如下:
finally { *//** * 当完成一个数据库操作后应当将已经开启的资源关闭,否则会占用大量内存资源,导致内存溢出。关闭资源时注意先开后关的顺序 * *//* if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (preparedStatement != null) { try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } }
关于jbdc连接数据库主要操作就这样!!!!!