构成:
1、资源文件db.properties,中存放了驱动类地址、数据库url、用户名、密码。
2、jdbc工具类JdbcUtils.java。
jdbc工具类中实现了:
1、获取数据库连接。
2、获取sql命令对象,包括Statement和PreparedStatement对象。
3、执行DML语句。
4、释放资源。
资源:
Oracle驱动地址:oracle.jdbc.driver.OracleDriver Oracle的url:jdbc:oracle:thin:@localhost:1521:orcl MySQL驱动地址:com.mysql.jdbc.Driver MySQL的url:"jdbc:mysql://localhost:3306/leaningjdbc?useSSL=false"
代码:
1、资源文件:
driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/leaningjdbc?useSSL=false user=root pwd=123456
2、JdbcUtils.java
package lurenjia.jdbcutils; import java.io.IOException; import java.sql.*; import java.util.Properties; /** * 数据库连接工具类 * @author lurenjia * @date 2022/12/28-16:02 */ public class JdbcUtils { private static String driver; private static String url; private static String user; private static String pwd; //1.加载配置文件。2.完成数据库驱动的加载。 static { //1.加载资源文件对象 Properties pros = new Properties(); //2.加载src目录下的资源文件 try { pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties")); } catch (IOException e) { throw new RuntimeException(e); } //3.通过键名,获取值 driver = pros.getProperty("driver"); url = pros.getProperty("url"); user = pros.getProperty("user"); pwd = pros.getProperty("pwd"); //4.加载数据库驱动 try { Class.forName(driver); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } private JdbcUtils(){} /** * 获取数据库连接 */ public static Connection getConnection(){ Connection connection=null; try { connection = DriverManager.getConnection(url,user,pwd); } catch (SQLException e) { throw new RuntimeException(e); } return connection; } /** * 获取Statement对象 * @param connection 数据库连接 * @return 获取到的Statement对象 */ public static Statement getStatement(Connection connection){ try { return connection.createStatement(); } catch (SQLException e) { throw new RuntimeException(e); } } /** * 获取PreparedStatement对象 * @param connection 数据库连接 * @param sql 预编译sql语句 * @return 获取到的PreparedStatement对象 */ public static PreparedStatement getPreparedStatement(Connection connection,String sql){ try { return connection.prepareStatement(sql); } catch (SQLException e) { throw new RuntimeException(e); } } /** * 关闭资源。 * @param statement sql命令对象 * @param connection 数据库连接对象 */ public static void close(Statement statement,Connection connection){ try { if(statement!=null) { statement.close(); } } catch (SQLException e) { throw new RuntimeException(e); } try { if(connection!=null) { connection.close(); } } catch (SQLException e) { throw new RuntimeException(e); } } /** * 关闭资源。 * @param resultSet 结果集对象 * @param statement sql命令对象 * @param connection 数据库连接对象 */ public static void close(ResultSet resultSet,Statement statement,Connection connection){ try { if(resultSet!=null) { resultSet.close(); } } catch (SQLException e) { throw new RuntimeException(e); } close(statement,connection); } /** * 使用PreparedStatement执行DML语句,获取更新的数据数量。 * @param sql sql语句 * @param objects 参数 * @return 更改数据的行数,若失败则返回-1 */ public static int executeDML(String sql,Object...objects){ //结果中修改的数据行数 int count = -1; //获取连接 Connection connection = getConnection(); try { //设置为手动提交 connection.setAutoCommit(false); } catch (SQLException e) { throw new RuntimeException(e); } //获取sql命令对象 PreparedStatement preparedStatement = getPreparedStatement(connection,sql); //设置参数 for(int i =0;i< objects.length;i++){ try { preparedStatement.setObject(i+1,objects[i]); } catch (SQLException e) { throw new RuntimeException(e); } } //执行 try { count = preparedStatement.executeUpdate(); connection.commit(); } catch (SQLException e) { try { //发生错误时进行回滚 connection.rollback(); } catch (SQLException ex) { throw new RuntimeException(ex); } throw new RuntimeException(e); } //关闭资源 close(preparedStatement,connection); return count; } }
标签:jdbc,封装,RuntimeException,简单,try,connection,sql,catch,new From: https://www.cnblogs.com/lurenjia-bky/p/17010806.html