mysqlストレージ関数の使用例の詳細

1143 ワード

sql文:
                     :
DROP FUNCTION IF EXISTS func_shop;
CREATE FUNCTION func_shop(id INT)
RETURNS DOUBLE(20,2)
BEGIN
	DECLARE out_money DOUBLE(20,2);
	SELECT SUM(sprice*snumber) INTO out_money FROM shopcart
	WHERE sid = id;
	RETURN out_money;
END;

Javaでこの関数を使用します.
//      ,           
	public double getSumMoney(int id) {
		Connection conn = null; //        
		CallableStatement clbStmt = null; // CallableStatement  
		double sum=0;
		try {
			//        
			conn = JdbcUtils.getConnection();
			//   CallableStatement  ,      
			clbStmt = conn.prepareCall("{? = call func_shop(?)}");
			clbStmt.setInt(2, id); //     id
			//    :     
			clbStmt.registerOutParameter(1, Types.DOUBLE);//   double  
			//         
			clbStmt.execute();
			//        
			sum = clbStmt.getDouble(1);
			System.out.println(sum);
		} catch (SQLException sqle) {
			sqle.printStackTrace();
		} finally {
			//          
			try {
				JdbcUtils.closeDB(conn, clbStmt);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return sum;
	}