900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > java调用存储过程 sql server Sql Server的存储过程与Java代码相连接调用(二)

java调用存储过程 sql server Sql Server的存储过程与Java代码相连接调用(二)

时间:2018-07-15 23:05:59

相关推荐

java调用存储过程 sql server Sql Server的存储过程与Java代码相连接调用(二)

我所写的项目是使用Maven开发,在pom.xml中添加如下必要依赖:

添加com.microsoft.sqlserver的mssql-jdbc 6.2.1.jre8的依赖

com.microsoft.sqlserver

mssql-jdbc

6.2.1.jre8

在下面的Java代码块中,涉及到如何在Java中创建SQL Server的“表值变量”(临时表),以及Java代码如何去调用SQL Server的存储过程,如何传递在Java代码中所写的“表值变量”(临时表)。其中,代码中所调用的 proc_test01存储过程,可参考我写的博客:SQL

Server数据库学习之 -- 存储过程-游标-表值类型综合运用

我所写的代码有些简化,以“学生 -- 班级 -- 教师”这种经典模式来讲解自己所运用的知识点。可能网友直接将我的代码粘贴-复制,运行会报错。不过其中的知识点确是无误的!

在本篇文章中,最重要的是其运用到SQL Server表值类型变量这块知识。关于在Java代码中引入的Sql Server-Jar包,不能太低,否则无法使用“表值类型变量”这块知识。

import java.util.Map;

import com.microsoft.sqlserver.jdbc.SQLServerCallableStatement;

import com.microsoft.sqlserver.jdbc.SQLServerDataTable;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.dao.DataAccessException;

import org.springframework.jdbc.core.CallableStatementCallback;

import org.springframework.jdbc.core.CallableStatementCreator;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Service;

@Service

public class ClazzService {

/**

* 批量提交班级信息

*/

public int putClazz(Clazz clazz) throws SQLException {

Integer count = 0;

Integer testCount = sqlServerJdbcTemplate.execute(

new CallableStatementCreator() {

@Override

public CallableStatement createCallableStatement(Connection con) throws SQLException {

SQLServerCallableStatement cs = (SQLServerCallableStatement) con.prepareCall("exec proc_test01 ?, ?");

// 设置存储过程中所用的临时表名

SQLServerDataTable sourceDataTable = new SQLServerDataTable();

// 为临时表sourceDataTable添加表头字段和字段类型

sourceDataTable.addColumnMetadata("TEACHER", java.sql.Types.VARCHAR);

sourceDataTable.addColumnMetadata("CLANO", java.sql.Types.VARCHAR);

sourceDataTable.addColumnMetadata("SEX", java.sql.Types.CHAR);

sourceDataTable.addColumnMetadata("NAME", java.sql.Types.VARCHAR);

sourceDataTable.addColumnMetadata("AGE", java.sql.Types.INTEGER);

sourceDataTable.addColumnMetadata("STUNO", java.sql.Types.INTEGER);

// 可一次性将多个不同学生插入到同一个班级中

for (Student student : clazz.getStudent()) {

// 将数据添加进创建的Table表中

sourceDataTable.addRow(clazz.getTeacher(), clazz.getClaNo(),

student.getSex(), student.getName(),

student.getAge(), student.getStuNo());

}

// 字符串"clazz_Table"为调用数据库存储过程“proc_test01”中,其内部编写的临时表名称

cs.setStructured(1, "clazz_Table", sourceDataTable);

cs.registerOutParameter(2, java.sql.Types.INTEGER); // 可返回值的参数

return cs;

}

},

new CallableStatementCallback() {

@Override

public Integer doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {

cs.execute();

return cs.getInt(2); // 将第“2”个参数的值返回。第“2”个参数,其类型是“返回值类型参数”

}

}

);

count = testCount; // 将testCount变量赋值给count变量

return count;

} // public int putClazz(Clazz clazz)

}

Student.java类(学生类),其代码如下

package com.entity;

public class Student {

private char sex; // 性别

private String name; // 姓名

private int age; // 年龄

private int stuNo; // 学号

public char getSex() {

return sex;

}

public void setSex(char sex) {

this.sex = sex;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public int getStuNo() {

return stuNo;

}

public void setStuNo(int stuNo) {

this.stuNo = stuNo;

}

}

Clazz.java类(班级类)

package com.entity;

import java.util.List;

public class Clazz {

private String teacher; // 班主任

private String claNo; // 班级编号

private ListstuList; //学生

public String getTeacher() {

return teacher;

}

public void setTeacher(String teacher) {

this.teacher = teacher;

}

public String getClaNo() {

return claNo;

}

public void setClaNo(String claNo) {

this.claNo = claNo;

}

public ListgetStuList() {

return stuList;

}

public void setStuList(ListstuList) {

this.stuList = stuList;

}

}

--------------------------------------------------------------------------

--------------------------------------------------------------------------

例如,写一接口,调用putClazz()函数,则可传递一组JSON数据,其数据格式如下所示。通过调用putClazz()函数,可以做到在一次提交数据过程中:一个班级可以插入多个学生信息。

JSON格式代码:

{

"teacher": "吴老师",

"clano": "打杂1班",

"stuList": [

{

"sex": "男",

"name": "吃瓜群众",

"age": 18,

"stuNo": 101001

},

{

"sex": "女",

"name": "如花",

"age": 16,

"stuNo": 101002

},

{

"sex": "女",

"name": "龅牙珍",

"age": 20,

"stuNo": 101001

}

]

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。