我想从jdbctemplate调用一个存储过程,并需要在存储过程中生成pk

时间:2016-02-04 04:46:18

标签: java spring stored-procedures jdbctemplate

String sql = "{call college.create_student(?,?,?,?)}";
String studentUniqueNum = jdbcTemplate.queryForList(sql,
new Object[] { roll_num,name,phone,email},String.class);

在java Class中

public int CalculateScore(char color)
{
    var boardStr = String.Join("", gameBoard);
    return GetCharacterSequences(color, boardStr)
        .Sum(str => str.Length * 2);
}

//Returns same character sequences of length more than two.
private IEnumerable<string> GetCharacterSequences(char color, string boardStr)
{
    return Regex.Matches(boardStr, $@"({color})\1+").OfType<Match>()
        .SelectMany(match => match.Groups.OfType<Group>())
        .Select(@group => @group.Value)
        .Where(str => str.Length > 1);
}

我正在尝试在存储过程中生成主键。请帮忙

PS:我是第一次这样做。

2 个答案:

答案 0 :(得分:0)

对于简单的过程,您可以使用jdbcTemplate的更新方法:

jdbcTemplate.update("call college.create_student(?, ?, ?, ?)", param1, param2, param3, param4);

此方法将返回您的主键。

答案 1 :(得分:0)

实现目标的步骤

  1. 创建一个pojo类,它保存Name(String)和Type(int)需要与store过程输入变量和另一个pojo匹配 具有相同参数的输出类。

  2. 在服务类中,为输入创建一个2 List,为输出上面创建的pojo类创建一个。

  3. 实例化pojo并添加名称和类型,该名称和类型应该是与商店过程输入和类型参数匹配的名称 对于所有输入变量。

  4. 创建一个扩展Spring框架StoredProcedure的函数,并获取jdbctemaplate,过程名称,输入和输出 list。迭代这个列表并使用spring的delcareparameter 框架工作为每个输入和创建Sql参数 输出参数然后编译。

  5. 创建一个hashMap,用于映射输入参数的值,其中key是输入变量名称,value是实际输入。

  6. 最后一步使用spring的execute方法并传递上一步中创建的hashmap。

  7. 最终结果再次返回一个hashmap,它实际上保存了输出参数及其值(如步骤2中所述)。