发布网友 发布时间:2022-04-07 17:42
共6个回答
懂视网 时间:2022-04-07 22:04
JDBC连接数据库基本的步骤是固定的,这样就可以考虑封装一个工具类来简化数据库操作。
封装时用到了Java中的properties配置文件,是以一种键值对的形式存在的,可以把连接数据库要动态的信息保存到里面,这样比较直观,不容易出错,而且容易维护。
把配置文件放到src下就可以,如果要放到包下面就配置文件的相对路径就必须从包名开始。
Demo :
db.properties
mysqlDriver=com.mysql.jdbc.Driver mysqlURL=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8 mysqlUser=root mysqlPwd=1234 oracleDriver=oracle.jdbc.driver.OracleDriver oracleURL=jdbc:oracle:thin:@localhost:1521:orcl oracleUser=scott oraclePwd=tiger
JDBCUtil.java
package com.wxisme.jdbcutil; import java.io.Closeable; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * JDBC数据库操作工具类 简化数据库操作 * @author wxisme * */ public class JDBCUtil { //资源文件 static Properties pros = null; //静态初始化 当加载JDBCUtil类时调用 static { pros = new Properties(); try { //加载资源文件 InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"); if(in == null) { throw new FileNotFoundException("配置文件未找到"); } pros.load(in); } catch (IOException e) { e.printStackTrace(); } } /** * 获取数据库连接 * @return Connection */ public static Connection getMySQLConnection() { Connection conn = null; try { //加载数据库驱动 Class.forName(pros.getProperty("mysqlDriver")); //获取数据库连接 conn = DriverManager.getConnection(pros.getProperty("mysqlURL"), pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd")); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static Connection getOracleConn(){ try { Class.forName(pros.getProperty("oracleDriver")); return DriverManager.getConnection(pros.getProperty("oracleURL"), pros.getProperty("oracleUser"),pros.getProperty("oraclePwd")); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 关闭io资源 * @param io */ public static void closeFile(Closeable ... io) { for(Closeable temp : io) { if(temp != null) { try { temp.close(); } catch (IOException e) { System.out.println("文件关闭失败"); e.printStackTrace(); } } } } //关闭JDBC资源 注意顺序 public static void close(ResultSet rs,Statement ps,Connection conn) { try { if(rs!=null){ rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(ps!=null){ ps.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void close(Statement ps,Connection conn){ try { if(ps!=null){ ps.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void close(Connection conn){ try { if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
UtilTest.java
package com.wxisme.jdbcutil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UtilTest { public static void main(String[] args) { Connection conn = JDBCUtil.getMySQLConnection(); PreparedStatement ps = null; ResultSet rs = null; String sql = "select * from student where id = ?"; try { ps = conn.prepareStatement(sql); ps.setInt(1, 1); rs = ps.executeQuery(); while(rs.next()) { System.out.println(rs.getString("name")); } } catch (SQLException e) { e.printStackTrace(); } } }
还可以进一步封装成线程安全的工具类。
封装JDBC工具类
标签:
热心网友 时间:2022-04-07 19:12
public void fillParamters(PreparedStatement pstr, Object... objects)热心网友 时间:2022-04-07 20:30
是企业而定喽,做小型系统多用JDBC,中大型系统的话,多用框架结构。我个人认为目前用JDBC的不多热心网友 时间:2022-04-07 22:04
看的蛋疼 我写了一个的BaseDao 咱用拼音热心网友 时间:2022-04-07 23:56
请贴出错误信息,进行分析.热心网友 时间:2022-04-08 02:04
你这几个方法写的真是让哥烦,自己去搜几个好点的,,,