老师给的jdbc连接的例子,封装之后

本文介绍了一个封装好的数据库操作实例,包括三个核心类:工具类用于读取配置文件,DBManager类负责获取数据库连接,JdbcTemplate类用于执行数据库操作。此外,还介绍了日志记录的重要性及使用common-logging和log4j进行日志管理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是一个封装数据库操作的例子:(三个类,两个文件,三个jar包)

(一) 第一个jar包:驱动为从网上下载的某一数据库 jdbc驱动程序(例如:E:\安装包\mysql-connector-java-5.1.43\mysql-connector-java-5.1.43-bin.jar

第二个jar包:E:\QQFile\853340603\FileRecv\MobileFile\lib\lib\commons-logging-1.0.4.jar

common-loggingapache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱。所以使用common-logging,通常都是配合着log4j来使用。使用它的好处就是,代码依赖是common-logging而非log4j 避免了和具体的日志方案直接耦合,在有必要时,可以更改日志实现的第三方库。

第三个jar包:log4j-1.2.16.jar

log4j主要是输出你操作的过程,比如:在一个hibernate框架的程序里面,如果你设置使用log4j输入信息的话,可以输出数据库Driver、用户、密码、Sql语句等等,方便你检查错误

日志记录,对于企业应用软件来说很有必要,他记录了对软件的每一次操作,以及当软件发生异常时的记录。对于开发人员后期的维护,提供了有用的第一手资料。

日志嘛。虽然 System.out.println() 也能起到调试的作用,但很不方便。比如说,有一个调试信息输出,我只要测试一下就不用了,这样我们得把这一行删掉,如果下次又想用了,那还得再加上去。

如果是用日志工具的话,日志拥有一个级别的概念,我们不需要的话只需要在一个地方把日志的输出级别调高,那那些低级别的日志就不会输出了。如果以后我又想再看看那些日志的话,再把级别调低就可以了

它是一种调试的辅助工具,

(二) 第一个文件:日志文件:log4j.properties(为什么后缀是.Properities

Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。

Properties中的主要方法

(1)load(InputStreaminStream)

这个方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象。如下面的代码:

Properties pro =new Properties();

FileInputStreamin = new FileInputStream("a.properties");

pro.load(in);

in.close();

(2)store(OutputStreamout, String comments)

   这个方法将Properties类对象的属性列表保存到输出流中。如下面的代码:

FileOutputStreamoFile = new FileOutputStream(file, "a.properties");

pro.store(oFile,"Comment");

oFile.close();

如果comments不为空,保存后的属性文件第一行会是#comments,表示注释信息;如果为空则没有注释信息。

  注释信息后面是属性文件的当前保存时间信息。

(3)getProperty/setProperty

         这两个方法是分别是获取和设置属性信息。)

不知道可不可以为空,里面的数据是每次执行加载上的吗

第二个文件:datainfo.properties 数据库配置文件;链接数据库需要用到的

DRIVER=oracle.jdbc.driver.OracleDriver

DBURL=jdbc:oracle:thin:@localhost:1521:

DBNAME=ORCL

USERNAME=scott

USERPWD=tiger

 

(三)   第一个类:工具类:放在工具包中;用于读取配置文件;

packagecom.neuedu.util;

 

/**

 * 2012-8-3 上午08:58:23

 * @author zhangjun

 */

 

 

importjava.io.FileNotFoundException;

importjava.io.IOException;

import java.util.Properties;

 

importorg.apache.commons.logging.Log;

importorg.apache.commons.logging.LogFactory;

 

/**

 * @author

 * 2013-7-28 上午08:58:23

 * 这个类主要作用是读取配置文件

 */

public classPropertyUtil {

 

      private Properties prop;

      private static PropertyUtil propertyUtil =null;

      private Log logger =LogFactory.getLog(PropertyUtil.class);

     //单例模式 

      private PropertyUtil() {

      }

     

      public static PropertyUtil getInstance() {

             if (propertyUtil == null) {

                    propertyUtil = newPropertyUtil();

             }

             return propertyUtil;

      }

     

      /**

       * 读取服务器配置文件

       */

      public Properties getProperty(String path){

             if (logger.isDebugEnabled()) {

                    logger.debug("读取配置文件:" + path);

             }

             prop = new Properties();

//           BufferedInputStream in;

             try {

//                  in = newBufferedInputStream(new FileInputStream(path));

//                  prop.load(in);

                    //在外部加载一个文件 datainfo.properties

                    prop.load(this.getClass().getClassLoader().getResourceAsStream(

                    "datainfo.properties"));

             } catch (FileNotFoundException e) {

                    if (logger.isErrorEnabled()){

                           logger.error("找不到配置文件", e);

                    }

             } catch (IOException e) {

                    if (logger.isErrorEnabled()){

                           logger.error("读取文件失败", e);

                    }

             }

             if (logger.isDebugEnabled()) {

                    logger.debug("读取配置文件成功");

             }

             return prop;

      }

}

 

第二个类:DBManager.java 获取数据库连接,通过getconnection方法返回数据库连接conn  注意:自动提交的设置

packagecom.neuedu.db;

 

/**

 * 2013-7-28 下午05:43:26

 * @author

 */

 

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.SQLException;

importjava.util.Properties;

 

importorg.apache.commons.logging.Log;

importorg.apache.commons.logging.LogFactory;

 

importcom.neuedu.util.PropertyUtil;

 

/**

 * @author   管理数据库连接

 */

public class DBManager {

 

    private Properties prop;

    private String path = "src/datainfo.properties";

    private PropertyUtil propertyUtil;

    private static DBManager dbManager = null;

    private Log logger = LogFactory.getLog(DBManager.class);

 

    private DBManager() {

    }

 

    public static DBManager getInstance() {

        if (dbManager == null) {

            dbManager = new DBManager();

        }

        return dbManager;

    }

 

    /**

     * @return 与数据库进行连接

     */

    public Connection getConnection() {

        if (propertyUtil == null) {

            propertyUtil = PropertyUtil.getInstance();

            if (prop == null) {

                prop = propertyUtil.getProperty(path);

                if (logger.isInfoEnabled()) {

                    logger.info("读取数据库配置文件: " + path);

                }

            }

        }

        Connection conn = null;

        try {

            Class.forName(prop.getProperty("DRIVER"));

            conn = DriverManager.getConnection(prop.getProperty("DBURL")

                            + prop.getProperty("DBNAME"), prop.getProperty("USERNAME"),

                    prop.getProperty("USERPWD"));

            conn.setAutoCommit(false);// 先这样简单自动提交,以后再业务层管理事务,就需要设置为false

            if (logger.isInfoEnabled()) {

                logger.info("读取数据库配置文件成功!");

            }

        } catch (ClassNotFoundException e) {

            if (logger.isErrorEnabled()) {

                logger.error("找不到数据库驱动!");

            }

        } catch (SQLException e) {

            if (logger.isErrorEnabled()) {

                logger.error("连接失败!");

            }

        }

        return conn;

    }

 

}

第三个类:JdbcTemplate.java 操作数据库,主要有查询和增加,修改,删除数据这几个,传入sql语句,和组参数,然后返回结果集合集或受影响的行数:

注意:在进行操作之前需要先注入数据库链接;将结果集中的一行数据封装到entiymapping,在query()函数中通过entitymapping将对象封装到集合中,返回结果集合

以上三个类为单利模式,值得学习

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值