锁定老帖子 主题:对JDBC的小小封装
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-01
传入任意查询 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; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-03-01
1.ps,rs,conn请正确关闭
2.请使用ResultSetMetaData 3.字符串比较请用equals 4.请保证能在mysql下运行 |
|
返回顶楼 | |
发表时间:2011-03-01
异常设计的有些欠缺
|
|
返回顶楼 | |
发表时间:2011-03-01
select a as name,b as sex, c age from user
你的表头成什么了。。。 |
|
返回顶楼 | |
发表时间:2011-03-01
我记得有些数据库字段取别名的时候可以用as,也可以不用的吧?
|
|
返回顶楼 | |
发表时间:2011-03-01
这东西上首页了???
|
|
返回顶楼 | |
发表时间:2011-03-01
select * from AA 怎么办.... |
|
返回顶楼 | |
发表时间:2011-03-01
freish 写道 我记得有些数据库字段取别名的时候可以用as,也可以不用的吧?
oracle可以不用 |
|
返回顶楼 | |
发表时间:2011-03-01
强大的一楼!!!
|
|
返回顶楼 | |
发表时间: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下跑的 看的比较仔细啊 |
|
返回顶楼 | |