通过JDBC规范来持久化实体域对象

来源:互联网 发布:防复制软件 编辑:程序博客网 时间:2024/06/06 04:34

一、用到的接口和类以及工具

    接口和类

     DriverManager    :驱动管理器,用来加载连接数据库的驱动

     Connection       :数据库连接

     Statement        :负责执行SQL语句

     PreparedStatement :负责执行SQL语句,具有预先编译部分语句的功能,可以防止SQL注入

     ResultSet          :执行SQL语句后返回的结果集

     

     工具:

     c3p0              :连接池     (c3p0-0.9.1.2.jar

二、具体顺序

      ①加载Mysql的驱动

       两种方式:<1>DriverManager.rdegisterDriver(new Driver());

                 <2>Class.forName(“com.mysql.jdbc.Driver”);

       第一种方式会在DriverMannager中注册两个驱动,因为registerDriver()方法中还会再次实例化一个Driver,为了解决这个问题,用第二种方式,运用反射可以只创建一个驱动。

       ②获得连接

       两种方式:

       <1>直接获得Connection,每次要执行SQL语句时创建一个Connection,得到结果后,关闭Connection

       语句:dbUrl=”jdbc:mysql://localhost:3306/数据库名”;(可简写jdbc:mysql:///数据库名)

            dbUser=”数据库管理账号”;

            dbPwd=”密码”;

            Connection con= DriverManager.getConnection(dbUrl,dbUser,dbPwd);

        <2>连接池

            连接池中维护了一定数量的Connection,可以从连接池中获得Connection,用                  完后放回连接池,可以节省系统资源。

            有两种连接池的工具(c3p0dbcp),区别是c3p0有回收空闲连接的功能

            c3p0用法:

            配置c3p0的配置文件(xmlproperties两种)

           放在src目录下自动会加载名称为:c3p0-config.xml

           <c3p0-config>

       <default-config>

      <property name="driverClass">com.mysql.jdbc.Driver</property>

      <property name="jdbcUrl">jdbc:mysql:///day18</property>

      <property name="user">root</property>

      <property name="password">abc</property>

      </default-config>

       </c3p0-config>

 

       获得Connection

       ComboPooledDataBase database = new ComboPooledDataBase();

       Connection con = database.getConnection();

       Con.close();此时不是在物理上关闭连接,而已释放连接,将连接放回连接池。

③在Service层开启事务

     Con.setAutoCommit(false);

④持久化对象

     PreparedStatement pst = con.preparedStatement(“sql语句 ??”);//?代表参数

     pst.set数据类型(****”,“****) //第一个*号代表参数位置,从1开始,第二个是参数

     pst.execute();

     

  ⑤查询对象

    PreparedStatement pst = con.preparedStatement(“sql语句 ??”);//?代表参数

    pst.set数据类型(****”,“****) //第一个*号代表参数位置,从1开始,第二个*是参数

    ResultSet resultset = pst.executeQuery();

   

    While(resultset.hasNext()){

        resultset.get数据类型;

       }

⑥提交事务

       con.commit();

⑦关闭资源

   con.close();

0 0
原创粉丝点击