`
sunjj
  • 浏览: 1423 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

对JDBC的小小封装

阅读更多
今天对JDBC进行了小小的封装
传入任意查询 SQL 语句,以表格的形式返回查询结果:

public class DB
{
    Connection conn;
   
    PreparedStatement ps = null;
   
    ResultSet rs = null;
   
    StringBuilder result = new StringBuilder();
   
    String[][] resultTable = null;

    public DB() throws Exception{
       
    }

    public String[][] queryForList(String sqlStr) throws Exception
    {
        if (sqlStr == null || sqlStr == "")
            throw new RuntimeException("缺少参数");
       
        if (!sqlStr.startsWith("select"))
            throw new RuntimeException("SQL语法错误");
        sqlStr = sqlStr.trim().replaceAll(";", "");
        //计算行数
        String countStr = "select count(*) from ( " + sqlStr + " )";
        conn = DBUtil.getConnection();
        ps = conn.prepareStatement(countStr);
        rs = ps.executeQuery();
        int rowCount = 0;
        if (rs.next())
            rowCount = rs.getInt(1) + 1;
        // 计算列数
        // 先提取select 和 from 之间的字符串
        String tempStr = sqlStr;
        tempStr = tempStr.substring("select".length(), tempStr.indexOf("from"));
        String[] array = tempStr.split(",");
        int colCount = array.length;
       
        ps = conn.prepareStatement(sqlStr);
        rs = ps.executeQuery();
        resultTable = new String[rowCount][colCount];
        resultTable[0] = tempStr.split(",");
        int rows = 1;
        while (rs.next())
        {
            int cols = 0;
            while (true)
            {
                try
                {
                    rs.getString(++cols);
                }
                catch (Exception e)
                {
                    break;
                }
            }
            String[] row = new String[cols-1];
            for (int i = 1; i < cols ; i++)
            {
                row[i - 1] = rs.getString(i);
            }
            if (rows <rowCount)
                resultTable[rows++] = row;
           
        }
       
        DBUtil.closeConnection(conn, ps, rs);
       
        for(int i=0;i<resultTable.length;i++){
            for(int j=0;j<resultTable[i].length;j++){
                System.out.print(resultTable[i][j]+" ");
            }
            System.out.println();
        }
       
        return resultTable;
    }
}
分享到:
评论
10 楼 sunjj 2011-03-03  
jenlp520 写道
select * from AA

怎么办....


最好希望传入标准的SQL语句 呵呵
9 楼 sunjj 2011-03-03  
finallygo 写道
1.ps,rs,conn请正确关闭
2.请使用ResultSetMetaData
3.字符串比较请用equals
4.请保证能在mysql下运行


1. DBUtil.closeConnection(conn, ps, rs);
   在这里面全部关闭了
2.嗯
3.用equals 更好
4,目前是在Oracle下跑的

看的比较仔细啊
8 楼 神雕囧侠 2011-03-01  
强大的一楼!!!
7 楼 cectsky 2011-03-01  
freish 写道
我记得有些数据库字段取别名的时候可以用as,也可以不用的吧?

oracle可以不用
6 楼 jenlp520 2011-03-01  
select * from AA

怎么办....
5 楼 jjkingwei 2011-03-01  
这东西上首页了???
4 楼 freish 2011-03-01  
我记得有些数据库字段取别名的时候可以用as,也可以不用的吧?
3 楼 freish 2011-03-01  
select a as name,b as sex, c age from user

你的表头成什么了。。。
2 楼 cectsky 2011-03-01  
异常设计的有些欠缺
1 楼 finallygo 2011-03-01  
1.ps,rs,conn请正确关闭
2.请使用ResultSetMetaData
3.字符串比较请用equals
4.请保证能在mysql下运行

相关推荐

    jdbc针对存储过程通用的jdbc封装.zip

    这个"jdbc针对存储过程通用的jdbc封装.zip"文件很可能包含了一个Java库或示例代码,它对JDBC进行了封装,以简化调用数据库存储过程的过程。存储过程是预编译的SQL语句集合,它们在数据库服务器上执行,提供了性能...

    spring-jdbc-4.0.0.RELEASE.jar

    spring-jdbc-4.0.0.RELEASE.jar这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。

    sqlite数据库操作封装类

    这个封装类可能已经包含了对JDBC驱动的管理,包括加载驱动、建立连接、关闭连接等。 封装类的核心功能可能包括以下几个部分: 1. **连接管理**:创建并管理SQLite数据库的连接。这通常涉及`DriverManager.get...

    JAVA的小小程序

    总之,"JAVA的小小程序"和相关的JDBC简介及小试卷是Java学习道路上的重要资源。通过实践这些小程序和解答试卷,不仅可以巩固理论知识,还能提高实际编程技能,这对于任何Java开发者来说都是极其宝贵的。

    jsp+servelt+javabean做的小小bbs

    4. 连接数据库,使用JDBC操作数据,如查询、插入、更新和删除。 5. 使用session和cookie来实现用户会话管理,保持用户登录状态。 6. 可能使用Ajax技术实现部分页面的异步更新,提高用户体验。 在开发过程中,通常还...

    对SAE主从数据库连接的管理和封装.docx

    在SAE(新浪云应用引擎)环境中,对主从数据库的管理和封装是一个具有挑战性的任务,因为SAE是一个封闭的平台,它对开发者施加了一些特定的限制。本篇文章主要探讨如何在SAE中处理主从数据库连接的问题,并提供相关...

    Java封装ibatis操作数据库.rar

    在Java开发中,Ibatis是一个流行的数据访问框架,它提供了比原生JDBC更为便捷的数据库操作方式。这个名为"Java封装ibatis操作数据库.rar"的压缩包文件,显然是一个包含有针对Ibatis进行DAO层封装的代码示例或者库。...

    Java封装hibernate操作数据库.rar

    在"CommonLibJDK15(4hibernate)"这个子目录中,可能包含了支持Hibernate运行的公共库,如JDBC驱动、Hibernate核心库等。使用JDK15版本,说明此项目已经采用了较新的Java语言特性,如模块系统、增强的switch语句等,...

    mybatis框架课程.docx

    MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,使开发者只需要关心业务逻辑,而不需要关心复杂的数据库访问细节。 MyBatis的优点 1. 简化了JDBC编程:MyBatis通过封装JDBC的操作,使开发者...

    小小的项目

    3. **数据访问**:与数据库交互的代码,可能使用JDBC(Java Database Connectivity)API,或者ORM框架如Hibernate或MyBatis来操作数据库。 4. **JavaBean**:`javaBean`文件通常包含表示业务对象的类,如`News`类,...

    一个网上书店的jsp+java的完整代码

    【正文】 本项目是一个基于JSP(JavaServer Pages)和JavaBean技术的网上书店系统,提供...通过对该项目的分析和学习,可以深入理解Web开发的基本流程,提升对JSP和JavaBean技术的理解,以及数据库设计和管理的能力。

    MyBatis 事务管理解析:颠覆你心中对事务的理解!.docx

    总之,MyBatis 的事务管理机制是基于 JDBC 的简单封装,同时也支持与外部框架集成,以提供更加高效和灵活的事务处理方案。理解这些基本概念,可以帮助开发者更好地控制和调试应用程序的事务行为,避免数据不一致的...

    et-framework.zip

     这个jar 文件包含对ET对JDBC 数据访问进行封装的所有类。和事务访问数据库 5 et-common  这个jar 文件包含ET 框架基本的核心工具类。et 其它组件要都要使用到这个包里的类,是通用的...

    javaWeb所有常用的jar包

    3. **dbutils**: Apache Commons DBUtils是一个简单易用的数据库操作库,它提供了对JDBC的简单封装,可以简化数据库操作,例如执行SQL语句、处理结果集等。 4. **dom4j**: 这是一个Java文档对象模型库,主要用于XML...

    hive客户端java代码示例.zip

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得开发者能够通过SQL语句对存储在Hadoop集群上的大规模数据进行分析和处理。...

    连接sqlserver2005的驱动类

    在JSP中,你可以将这些步骤封装到JavaBean或自定义标签库中,以提高代码复用性和可维护性。同时,为了更好的性能和安全性,建议使用连接池管理数据库连接,如Apache的DBCP或C3P0。 总的来说,“连接sqlserver2005的...

    JAVA的SQL帮助类,帮助快速使用SQL语句更新,删除,查询数据

    这就是SQL帮助类存在的原因,它封装了这些底层细节,使代码更简洁、易读。 一个典型的SQL帮助类通常包含以下功能: 1. **数据库连接管理**:提供连接池功能,如使用C3P0、HikariCP或Druid,以提高性能并减少资源...

    ibatis和mybatis的前世今生.txt

    它通过将SQL语句封装在XML配置文件中,并提供了一套简洁的API接口,简化了开发人员的操作步骤,提高了开发效率。 1. **ibatis为何出现?** - **背景需求**:在使用JDBC进行数据库操作时,开发者常常需要手动编写...

    Mongodb in Mycat指南.docx

    对于非关系型数据库(NoSQL)的支持,Mycat通过封装NoSQL API并基于JDBC来实现。这使得Mycat能够在Java应用中处理多种类型的数据库,包括文档型数据库MongoDB。 在Mycat 1.3版本中,已经实现了对MongoDB的支持。要...

    演示版

    在 Dao 类中,我们封装了对数据库的所有操作,使得业务代码无需直接与数据库打交道,从而降低了耦合度,提高了代码的可测试性和可维护性。在 "demo-dao-jdbc-master" 中,我们可能可以看到 Dao 接口及其具体的实现类...

Global site tag (gtag.js) - Google Analytics