java - 在Java中执行用户定义的SQL Server函数

标签 java sql sql-server

我有这个 SQL 函数:

CREATE FUNCTION Average (@year int)
RETURNS decimal(4,2)
AS
BEGIN
    DECLARE @result as decimal(4,2);
    SET @result = (SELECT AVG(CAST(MilkQuantity AS decimal(4,2))) FROM MilkProduction WHERE YEAR(Date) = @year);
    RETURN @result;
END
GO

如何在 java 中执行此函数以及将其绑定(bind)到什么数据类型?

这是我想出的方法,它有效,但似乎我在这里的线条之外着色:

PreparedStatement ps = con.prepareStatement("SELECT dbo.Average(" + year + ")");
ResultSet rs = ps.executeQuery();
rs.next();
System.out.println("Average: " + rs.getFloat(""));

最佳答案

使用 CallableStatement 如下: CallableStatement stmt = null; String sql = "begin ? := Average(?); end;"; ResultSet rs = null; try { stmt = conn.prepareCall(sql); stmt.registerOutParameter(1, INT); stmt.setString(2, "VALUE"); stmt.execute(); } Catch(){ ....}

关于java - 在Java中执行用户定义的SQL Server函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18927276/

相关文章:

php - Laravel Eloquent : get all records sorted by summary price from relation

mysql - 具有非聚合函数的分组不起作用

c# - C# 中的 SQL 更新命令

java - 声音在 Java 中不起作用

java - 从整数 ArrayList 中删除前导零

java - SensorEventListener 不会使用 unregisterListener() 方法取消注册

sql - 如何使用 Pandas 中的游标执行与数据框列值的逻辑比较

sql-server - 对于 SQL Server 2005 表来说,多少列过多?

java - 临时表的对象名称无效

java - 在 java 中编辑像素值