您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > javaweb编写自己的JDBC框架
javaweb编写自己的JDBC框架一、元数据介绍元数据指的是数据库、表、列的定义信息。1.1、DataBaseMetaData元数据Connection.getDatabaseMetaData()获得代表DatabaseMetaData元数据的DatabaseMetaData对象。DataBaseMetaData对象的常用方法:getURL():返回一个String类对象,代表数据库的URL。getUserName():返回连接当前数据库管理系统的用户名。getDatabaseProductName():返回数据库的产品名称。getDatabaseProductVersion():返回数据库的版本号。getDriverName():返回驱动驱动程序的名称。getDriverVersion():返回驱动程序的版本号。isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。复制代码1/**2*@Method:testDataBaseMetaData3*@Description:获取数据库的元信息4*@Anthor:孤傲苍狼5*6*@throwsSQLException7*/8@Test9publicvoidtestDataBaseMetaData()throwsSQLException{10Connectionconn=JdbcUtils.getConnection();11DatabaseMetaDatametadata=conn.getMetaData();12//getURL():返回一个String类对象,代表数据库的URL13System.out.println(metadata.getURL());14//getUserName():返回连接当前数据库管理系统的用户名15System.out.println(metadata.getUserName());16//getDatabaseProductName():返回数据库的产品名称17System.out.println(metadata.getDatabaseProductName());18//getDatabaseProductVersion():返回数据库的版本号19System.out.println(metadata.getDatabaseProductVersion());20//getDriverName():返回驱动驱动程序的名称21System.out.println(metadata.getDriverName());22//getDriverVersion():返回驱动程序的版本号23System.out.println(metadata.getDriverVersion());24//isReadOnly():返回一个boolean值,指示数据库是否只允许读操作25System.out.println(metadata.isReadOnly());26JdbcUtils.release(conn,null,null);27}复制代码运行结果如下:1.2、ParameterMetaData元数据PreparedStatement.getParameterMetaData()获得代表PreparedStatement元数据的ParameterMetaData对象。Select*fromuserwherename=?Andpassword=?ParameterMetaData对象的常用方法:getParameterCount():获得指定参数的个数getParameterType(intparam):获得指定参数的sql类型,MySQL数据库驱动不支持复制代码1/**2*@Method:testParameterMetaData3*@Description:获取参数元信息4*@Anthor:孤傲苍狼5*6*@throwsSQLException7*/8@Test9publicvoidtestParameterMetaData()throwsSQLException{10Connectionconn=JdbcUtils.getConnection();11Stringsql=select*fromuserwherername=?andpassword=?;12//将SQL预编译一下13PreparedStatementst=conn.prepareStatement(sql);14ParameterMetaDatapm=st.getParameterMetaData();15//getParameterCount()获得指定参数的个数16System.out.println(pm.getParameterCount());17//getParameterType(intparam):获得指定参数的sql类型,MySQL数据库驱动不支持18System.out.println(pm.getParameterType(1));19JdbcUtils.release(conn,null,null);20}复制代码1.3、ResultSetMetaData元数据ResultSet.getMetaData()获得代表ResultSet对象元数据的ResultSetMetaData对象。ResultSetMetaData对象的常用方法:getColumnCount()返回resultset对象的列数getColumnName(intcolumn)获得指定列的名称getColumnTypeName(intcolumn)获得指定列的类型复制代码1/**2*@Method:testResultSetMetaData3*@Description:结果集的元数据4*@Anthor:孤傲苍狼5*6*@throwsException7*/8@Test9publicvoidtestResultSetMetaData()throwsException{10Connectionconn=JdbcUtils.getConnection();11Stringsql=*fromaccount;12PreparedStatementst=conn.prepareStatement(sql);13ResultSetrs=st.executeQuery();14//ResultSet.getMetaData()获得代表ResultSet对象元数据的ResultSetMetaData对象15ResultSetMetaDatametadata=rs.getMetaData();16//getColumnCount()返回resultset对象的列数17System.out.println(metadata.getColumnCount());18//getColumnName(intcolumn)获得指定列的名称19System.out.println(metadata.getColumnName(1));20//getColumnTypeName(intcolumn)获得指定列的类型21System.out.println(metadata.getColumnTypeName(1));22JdbcUtils.release(conn,st,rs);23}复制代码二、使用元数据封装简单的JDBC框架系统中所有实体对象都涉及到基本的CRUD操作所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。2.1、封装通用的update方法和qurey方法定义一个JdbcUtils工具类,工具类负责获取数据库连接,释放资源,执行SQL的update和query操作,代码如下:复制代码1packageme.gacl.util;23importjava.io.InputStream;4importjava.sql.Connection;5importjava.sql.DriverManager;6importjava.sql.PreparedStatement;7importjava.sql.ResultSet;8importjava.sql.SQLException;9importjava.sql.Statement;10importjava.util.Properties;1112publicclassJdbcUtils{1314privatestaticStringdriver=null;15privatestaticStringurl=null;16privatestaticStringusername=null;17privatestaticStringpassword=null;1819static{20try{21//读取db.properties文件中的数据库连接信息22InputStreamin=JdbcUtils.class.getClassLoader().getResourceAsStream(db.properties);23Propertiesprop=newProperties();24prop.load(in);2526//获取数据库连接驱动27driver=prop.getProperty(driver);28//获取数据库连接URL地址29url=prop.getProperty(url);30//获取数据库连接用户名31username=prop.getProperty(username);32//获取数据库连接密码33password=prop.getProperty(password);3435//加载数据库驱动36Class.forName(driver);3738}catch(Exceptione){39thrownewExceptionInInitializerError(e);40}41}4243/**44*@Method:getConnection45*@Description:获取数据库连接对象46*@Anthor:孤傲苍狼47*48*@returnConnection数据库连接对象49*@throwsSQLException50*/51publicstaticConnectiongetConnection()throwsSQLException{52returnDriverManager.getConnection(url,username,password);53}5455/**56*@Method:release57*@Description:释放资源,58*要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象59*@Anthor:孤傲苍狼60*61*@paramconn62*@paramst63*@paramrs64*/65publicstaticvoidrelease(Connectionconn,Statementst,ResultSetrs){66if(rs!=null){67try{68//关闭存储查询结果的ResultSet对象69rs.close();70}catch(Exceptione){71e.printStackTrace();72}73rs=null;74}75if(st!=null){76try{77//关闭负责执行SQL命令的Statement对象78st.close();79}catch(Exc
本文标题:javaweb编写自己的JDBC框架
链接地址:https://www.777doc.com/doc-2880557 .html