Eclipse 中jdbc连接Oracle数据库的封装
来源:互联网 发布:非农数据看过你 编辑:程序博客网 时间:2024/06/04 20:14
Eclipse 中jdbc连接Oracle数据库的封装
1、定义一个DBHelper类,用于对数据库的连接进行封装,实现数据库的自定义连接
定义一个名为log4j.properties的配置文件,用于生成日志文件,便于数据库连接的测试和信息回馈。
定义一个名为jdbc.properties的配置文件用于数据库连接的配置信息的存放。
定义一个DBConfig类,用于对数据库配置文件jdbc.properties的读取和连接。
2、先在对每个类和配置文件进行实现。
1、编写jdbc.properties的配置文件
driver=oracle.jdbc.OracleDriverurl=jdbc:oracle:thin:@localhost:1521:ycuser=xhpassword=a
其中存入的是键值对<key, value>的形式,把数据库的配置信息存入,使用时只要写入键值就可以了。 driver的值是数据库加载类, url是数据库的位置, user是要登录数据库的用户名, password是登录密码。
2、编写DBConfig类,用于读取配置信息
public class DBConfig extends Properties{private static final Logger LOG = Logger.getLogger(DBHelper.class);private static DBConfig dbConfig = new DBConfig();private DBConfig(){try {LOG.debug("开始读取数据库配置文件:jdbc.properties" );<span style="white-space:pre"></span>//获取数据库配置文件<span style="white-space:pre"></span>InputStream in = DBConfig.class.getClassLoader().getResourceAsStream("jdbc.properties");<span style="white-space:pre"></span>LOG.debug("读取数据库配置文件成功。");<span style="white-space:pre"></span>LOG.debug("读取数据库配置文件成功。");<span style="white-space:pre"></span>load(in);<span style="white-space:pre"></span>//装载配置文件<span style="white-space:pre"></span>LOG.debug("加载数据库配置文件完成。");} catch (IOException e) {LOG.error("加载数据库配置文件jdbc.properties失败!!!",e);}}public static DBConfig getInstance(){return dbConfig;}public static String getValue(String configName){return dbConfig.getProperty(configName);}}
其中第一句是定义日志,日志文件下一步说。
3、编写日志文件log4j.properties
log4j.rootLogger = error, stdout,fileoutlog4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout = org.apache.log4j.TTCCLayoutlog4j.appender.fileout = org.apache.log4j.FileAppenderlog4j.appender.fileout.File = yc2015_6_21.log log4j.appender.fileout.layout = org.apache.log4j.PatternLayoutlog4j.appender.fileout.layout.conversionPattern = %d %5p %l %m%n//设置包的日志级别log4g.logger.xxx.xxx : xxx表示包名log4j.logger.com.yc = debuge
4、编写DBHelper类
public class DBHelper {//定义日志private static final Logger LOG = Logger.getLogger(DBHelper.class);// 数据库的驱动,加载只进行一次就可以了static {try {LOG.debug("开始加载驱动。" + DBConfig.getValue("driver"));// Class.forName("oracle.jdbc.OracleDriver");Class.forName(DBConfig.getValue("driver"));LOG.debug("加载驱动成功。");} catch (ClassNotFoundException e) {LOG.error("加载驱动失败!!!", e);}}// 数据库连接是在需要操作sql的时候使用public static Connection getConn() {Connection con = null;try {LOG.debug("开始连接 数据库:" + "jdbc:oracle:thin:@localhost:1521:yc");con = DriverManager.getConnection(DBConfig.getValue("url"),DBConfig.getValue("user"), DBConfig.getValue("password"));// con = DriverManager.getConnection(DBConfig.getValue("url"),// DBConfig.getInstance());LOG.debug("数据库连接成功。");} catch (SQLException e) {LOG.error("数据库连接失败!!!", e);}return con;}// 关闭连接,节省连接资源public static void close(Connection con, Statement st, ResultSet rs) {if (rs != null) { // 关闭结果集try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (st != null) { // 关闭执行工具try {st.close();} catch (SQLException e) {e.printStackTrace();}}if (con != null) { // 关闭连接try {con.close();} catch (SQLException e) {e.printStackTrace();}}}// 执行: 数据:程序 ==> 数据库, 数据库 ==> 程序// 数据: 程序 ==> 数据库/** * @param sql sql语句 * @param params sql语句中占位符所对应的值 * @return 执行sql语句受影响的行数 */public static int executeUpdate(String sql, List<Object> params) {Connection con = null; // 定义连接PreparedStatement ps = null;int count = 0;//影响的行数try {con = getConn();//取得连接LOG.debug("开始预加载sql语句:" + sql);ps = con.prepareStatement(sql);LOG.debug("预加载sql语句完成。");setParamValue(ps, params);//给占位符注指LOG.debug("开始执行sql语句:" + sql);count = ps.executeUpdate();//执行sql语句LOG.debug("执行sql语句成功");} catch (SQLException e) {e.printStackTrace();} finally {close(con, ps, null);//关闭连接}if (count > 0) {System.out.println("操作成功。。");} else {System.out.println("操作失败。。");}return count;}// 执行多条语句/** * @param sqls: SQL语句与占位符的键值对的集合 * @param isAutoCommit: 是否自动事务TRUE:自动 ,FALSE:手动 * @return */public static int executeUpdate(Map<String,List<Object>> sqls, boolean isAutoCommit){Connection con = null;//定义连接PreparedStatement ps = null;int count = 0;try {con = getConn(); //取得连接con.setAutoCommit(isAutoCommit); //自动提交for(Entry<String, List<Object>> sql : sqls.entrySet()){try {LOG.debug("开始预加载sql语句:" + sql.getKey());ps = con.prepareStatement(sql.getKey());LOG.debug("预加载sql语句完成。");setParamValue(ps, sql.getValue());//给占位符注入值LOG.debug("开始执行sql语句:" + sql.getKey());count = ps.executeUpdate();//执行sql语句LOG.debug("执行sql语句成功");} catch (SQLException e) {LOG.error("执行sql语句:" + sql + "失败!!");if(!isAutoCommit){//如果有事务,一旦出现就向外抛出异常throw new SQLException(e);}}}if(!isAutoCommit){con.commit();//如果不自动事务,就要自己提交事务}}catch (SQLException e) {count = 0;LOG.error("执行sql语句失败!!" + e);try{con.rollback();}catch (SQLException e1) {LOG.error("执行回滚任务失败!!" ,e);}}finally{close(con, ps, null); //}return count;}//数据 : 数据库 ==> 程序public static List<Map<String, Object>> executeQuery(String sql, List<Object> params){Connection con = null; // 取到连接PreparedStatement ps = null;ResultSet rs = null;List<Map<String, Object>> results = null;try {con = getConn();LOG.debug("开始预加载sql语句:" + sql);ps = con.prepareStatement(sql);LOG.debug("预加载sql语句完成。");setParamValue(ps, params);LOG.debug("开始执行sql语句:" + sql);rs = ps.executeQuery();LOG.debug("执行sql语句成功");results = new ArrayList<Map<String, Object>>();ResultSetMetaData rsmd = rs.getMetaData();int cc = rsmd.getColumnCount();while(rs.next()){Map<String, Object> record = new HashMap<String, Object>();for(int i=0; i <= cc; i++){Object obj = rs.getObject(i);if(obj instanceof Timestamp){obj = new Date(((Timestamp)obj).getTime());}record.put(rsmd.getColumnName(i).toLowerCase(),obj);}results.add(record);}} catch (SQLException e) {LOG.error("执行sql语句:" + sql + "失败!!!");} finally {close(con, ps, rs);}return results;}//public static void setParamValue(PreparedStatement ps, List<Object> params) {for (int i = 0; i < params.size(); i++) {try {Object obj = params.get(i);// 判断一个对象属于什么类型if (params.get(i) instanceof java.util.Date) {// 因为java.sql.Date包含日期和时间,java.util.Date只包含日期 不合适// 需要有时分秒的日期类型 Timestampobj = new Timestamp(((java.util.Date) obj).getTime());}LOG.debug("开始给占位符在" + (i + 1) + "的位置注值" + obj);ps.setObject(1 + i, obj);LOG.debug("开始给占位符在" + (i + 1) + "的位置注值成功!!");} catch (SQLException e) {LOG.error("给占位符" + (i + 1) + "的位置注值失败!!!");}}}public static void main(String[] args) {if (getConn() != null) {System.out.println("数据库连接成功。");} else {System.out.println("数据库连接失败!!!");}}}
0 0
- Eclipse 中jdbc连接Oracle数据库的封装
- JDBC连接数据库封装
- 用JDBC连接Oracle数据库 via Eclipse
- report中jdbc连接Oracle数据库的时候报错?
- Eclipse中使用JDBC连接MYSQL数据库
- Java中使用JDBC连接oracle数据库
- Java中JDBC连接数据库Oracle
- eclipse 连接JDBC数据库
- eclipse连接JDBC数据库
- JAVA封装连接数据库【JDBC】
- JDBC连接的封装
- Eclipse连接JDBC数据库遇到的问题
- 使用Eclipse的JDBC连接Mysql数据库
- jdbc连接oracle数据库
- oracle数据库jdbc连接
- Jdbc连接Oracle数据库
- JDBC连接Oracle数据库
- JDBC 连接 Oracle数据库
- IOS 委托和协议区别和联系 (-)
- Jade 学习心得
- ISA Server 2006 基础知识
- WebService学习笔记之WSDL
- 跨浏览器处理xml 兼容IE
- Eclipse 中jdbc连接Oracle数据库的封装
- 很机智的dialog有木有,可以参考一下。
- 【动态规划】[UVa 1099]Sharing Chocolate
- phpcms调取当前栏目的描述及当前栏目的名称
- FreeMarker几种不同方式的展现数据
- 队列小记之一
- android中TextView属性之autoText解析
- java 正则
- AEC、AGC、ANS是什么意思?