求一个通用BaseDAO类

QQ669300324 2011-12-20 09:29:32
如题,要可以调用存储过程的哦。
...全文
63 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
24K純帥 2011-12-20
  • 打赏
  • 举报
回复
用眼神瞬杀你 2011-12-20
  • 打赏
  • 举报
回复
package com.dao;

import java.io.Serializable;
import java.sql.*;

import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

public class BaseDAO implements Serializable {
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL = "jdbc:sqlserver://localhost:1433;databasename=JavaWeb";
private static final String UID = "sa";
private static final String PWD = "123456";

public static Connection getConnection() {
Connection con = null;
try {
Class.forName(DRIVER);
con = DriverManager.getConnection(URL, UID, PWD);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}

// 运行有结果,没参数的sql语句
public static Result runSelectSql(String sql) {
Connection con = null;
PreparedStatement ps = null;
ResultSet res = null;
Result result = null;
try {
con = getConnection();
ps = con.prepareStatement(sql);
res = ps.executeQuery();
result = ResultSupport.toResult(res);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
res.close();
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}

// 运行有结果,有参数的sql语句
public static Result runSelectSql(String sql, Object[] params) {
Connection con = null;
PreparedStatement ps = null;
ResultSet res = null;
Result result = null;
try {

con = getConnection();
ps = con.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
res = ps.executeQuery();
result = ResultSupport.toResult(res);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
res.close();
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}

// 运行没结果,没参数的sql语句
public static boolean runUpdateSql(String sql) {
Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
ps = con.prepareStatement(sql);
ps.executeUpdate();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
try {
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}

// 运行没结果,有参数的sql语句
public static boolean runUpdateSql(String sql, Object[] params) {
Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
ps = con.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
ps.executeUpdate();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
try {
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

// 有结果,有参数的存储过程
public static Result runProcSelect(String procName, Object[] params) {
Connection con = null;
CallableStatement cs = null;
ResultSet res = null;
Result result = null;
try {
con = getConnection();
String proc = "{call " + procName + "(";
for (int i = 0; i < params.length; i++) {
proc += "?,";
}
proc = proc.substring(0, proc.length() - 1) + ")}";
cs = con.prepareCall(proc);

for (int i = 0; i < params.length; i++) {
if (params[i] != null) // 说明是输入参数
{
cs.setObject(i + 1, params[i]);
} else // 否则输出参数,就要注册
{
// 第一个为位置,第二个是类型
cs.registerOutParameter(i + 1, java.sql.Types.VARCHAR);
}
}
res = cs.executeQuery();// 只是执行了存储过程,但是还没有把执行赋给输出参数
result = ResultSupport.toResult(res);
for (int i = 0; i < params.length; i++) {
if (params[i] == null) // 说明是输出参数
{
params[i] = cs.getObject(i + 1); // 把执行存储过程之后位于cs的值赋给参数pamras
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
cs.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}

// 没结果,有参数的存储过程
public static boolean runProcUpdate(String procName, Object[] params) {
Connection con = null;
CallableStatement cs = null;
try {
con = getConnection();
String proc = "{call " + procName + "(";
for (int i = 0; i < params.length; i++) {
proc += "?,";
}
proc = proc.substring(0, proc.length() - 1) + ")}";
cs = con.prepareCall(proc);

for (int i = 0; i < params.length; i++) {
if (params[i] != null) // 说明是输入参数
{
cs.setObject(i + 1, params[i]);
} else // 否则输出参数,就要注册
{
// 第一个为位置,第二个是类型
cs.registerOutParameter(i + 1, java.sql.Types.VARCHAR);
}
}
cs.executeUpdate();// 只是执行了存储过程,但是还没有把执行赋给输出参数
for (int i = 0; i < params.length; i++) {
if (params[i] == null) // 说明是输出参数
{
params[i] = cs.getObject(i + 1); // 把执行存储过程之后位于cs的值赋给参数pamras
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
try {
cs.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}
}

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧