使用存储过程(带参数的)
由于学习完了 数据的展示 javabean我就以为我基本上可以很缓慢的做一些jsp的程序了,在这期间我有大概的看了一下jdbc的相关东西。当然很混乱,这时我想做一个分页的技术。这种思维还是在我上大学时候学习asp的技术时的固定思维,当时以为解决了分页就学会了asp,呵呵。等在学习。net的时候分页技术就相对简单了很多。这一点上现在我在学习java时候,还是很欣赏.net。不愧是微软的东西。做了两年。net了,现在又来学习java,真的感觉挺对不起我这两年的衣食父母的。可是为了赚更多的该死的人民币。我只能这样三心二意了。
好了下面言归正传,正是我调用存储过程的例子(带输入输出参数的)
private static String getTitleSql(String type, String startDate,
String endDate) throws DAOException {
DBconn db = null;
String sql = null; //须返回的sql语句
ResultSet rs = null;
Connection con = null;
CallableStatement call = null;
try {
db = new DBconn();
con = db.getConnection();
call = con.prepareCall("{call p_dtsgfztj_getsql_top(?,?,?,?,?)}"); //调用存储过程
call.registerOutParameter(4, java.sql.Types.VARCHAR); //登记输出参数为字符串(out)
call.registerOutParameter(5, java.sql.Types.INTEGER); //登记输出参数为数字(out)
call.setString(1, startDate); //为in参数赋值
call.setString(2, endDate); //为in参数赋值
call.setString(3, type); //为in参数赋值
rs = call.executeQuery(); //置入结果集中
sql = call.getString(4); //取出字符串
}
catch (ConnectionException e) {
throw new DAOException(e, "报表统计失败!");
}
catch (SQLException e) {
throw new DAOException(e);
}
finally {
if (rs != null) {
try {
rs.close(); //关闭结果集
}
catch (Exception e) {
e.printStackTrace();
}
}
if (call != null) {
try {
call.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
if (con != null) {
try {
con.close(); //关闭连接
}
catch (Exception e) {
e.printStackTrace();
}
}
}
return sql;
}
-------------------------------------
弄这个的时候有一个很逗得小插曲,我把where条件整个的字符串作为参数写了一个存储过程。在查询分析器里是没有任何问题到的。结果到了java里就不可以了。总是所不能把varchar转换成int。活来只能放弃了。所以我现在想是不是call.setString(1, startDate); 只能设置某列的参数阿。而不能是一个where条件的字符串