编写自己的JDBC框架

 

编写自己的JDBC框架

用来定义数据的数据叫做元数据

元数据-DataBaseMetaData

l       元数据:数据库、表、列的定义信息。

l       Connection.getDatabaseMetaData()

l       DataBaseMetaData对象

•         getURL():返回一个String类对象,代表数据库的URL。

•         getUserName():返回连接当前数据库管理系统的用户名。

•         getDatabaseProductName():返回数据库的产品名称。

•         getDatabaseProductVersion():返回数据库的版本号。

•         getDriverName():返回驱动驱动程序的名称。

•         getDriverVersion():返回驱动程序的版本号。

•         isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。

元数据ParameterMetaData

l       PreparedStatement . getParameterMetaData()

•         获得代表PreparedStatement元数据的ParameterMetaData对象。

•         Select * from user where name=? And password=?

l       ParameterMetaData对象

•         getParameterCount()

•         获得指定参数的个数

•         getParameterType(int param)

•         获得指定参数的sql类型

元数据-ResultSetMetaData

l       ResultSet. getMetaData()

•         获得代表ResultSet对象元数据的ResultSetMetaData对象。

l       ResultSetMetaData对象

•         getColumnCount()

•         返回resultset对象的列数

•         getColumnName(int column)

•         获得指定列的名称

•          getColumnTypeName(int column)

•         获得指定列的类型

使用元数据简化JDBC代码

l       业务背景:系统中所有实体对象都涉及到基本的CRUD操作:

•         所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。

•         实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。

UserDaoImpl.java部分

    public void insert() throws SQLException{

                   /*Connection con=null;

                  PreparedStatement st=null;

                  ResultSet rs=null;

                 

                  con=DBManager.getConnection();

                  String sql = "insert into users(id,name,password,email,birthday) values(?,?,?,?,?)";

                  st=con.prepareStatement(sql);

                  st.setInt(1,6);

                  st.setString(2,"xxxx");

                  st.setString(3,"1111");

                  st.setString(4,"aa@sina.com");

                  st.setDate(5,new java.sql.Date(new Date().getTime()));

                  st.executeUpdate(sql);*/

      

       String sql = "insert into users(id,name,password,email,birth";

       Object[] params={2,"xxx","111","xxx@126.com",new Date()};

       DBManager.update(sql, params);

    }

    public void delete() throws SQLException{

       /*Connection con=null;

       PreparedStatement st=null;

       ResultSet rs=null;

       con=DBManager.getConnection();

       String sql = "delete from users where id=?";

       st=con.prepareStatement(sql);

       st.setInt(1,1);

       st.executeUpdate(sql);*/

      

       String sql = "delete from users where id=?";

       Object[] params={4};//删除4号用户

       DBManager.update(sql, params);

    }

    public void update() throws SQLException{

       /*Connection con=null;

       PreparedStatement st=null;

       ResultSet rs=null;

       con=DBManager.getConnection();

       String sql = "update isers set name=?,password=? where id=?";

       st=con.prepareStatement(sql);

       st.setString(1,"xxx");

       st.setString(2, "111");

       st.setInt(3, 5);

       st.executeUpdate(sql);*/

      

       String sql = "update isers set name=? password=?,where id=?";

       Object[] params={"www","222",1};//把1号用户的名字和密码更新为www和222

       DBManager.update(sql, params);

    }

    public void find() throws SQLException{

       Connection con=null;

       PreparedStatement st=null;

       ResultSet rs=null;

       con=DBManager.getConnection();

       String sql = "select * from users where id=?";

       st=con.prepareStatement(sql);

       st.setInt(1,6);

       rs=st.executeQuery();

       while(rs.next()){

           //JavaBean对象rs.getXXX(i)

          

       }

在DBManager.java中写以下此方法,则在UserDaoImpl.java部分可以直接调用

public static void update(String sql,Object[] params){

       //包括增删改等方法

       Connection con=null;

       PreparedStatement st=null;

       ResultSet rs=null;

      

       try {

           con=DBManager.getConnection();

           st=con.prepareStatement(sql);

           for(int i=0;i<params.length;i++){

              st.setObject(i+1,params[i]);

           }

           st.executeUpdate(sql);

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           DBManager.release(con, st, rs);

       }

    }

红色部分为在DBManager.java中写update方法之前连接数据库时所需要的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值