对JDBC的小小封装

本文介绍了一个简单的JDBC查询封装方法,通过传入SQL语句,以表格形式返回查询结果。该方法首先验证SQL语句的有效性,然后计算查询结果的行数和列数,并将结果组织成二维数组。
今天对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个

红包金额最低5元

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

抵扣说明:

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

余额充值