如何将表值参数从java传递到sql server存储过程?
我有一个如何将表值参数从java传递到sql server存储过程?,java,sql-server,sql-server-2008,jdbc,mssql-jdbc,Java,Sql Server,Sql Server 2008,Jdbc,Mssql Jdbc,我有一个学生类,具有以下属性: Name, Department, Address, Grade. 现在我有了一个ArrayList,它包含了一些Student这样的对象 List<Student> stuList = new ArrayList<Student>(); stuList.add(new Student("Tom","Comp", "123 street", "A")); stuList.add(new Student("Jery","Comp", "4
学生
类,具有以下属性:
Name, Department, Address, Grade.
现在我有了一个ArrayList
,它包含了一些Student
这样的对象
List<Student> stuList = new ArrayList<Student>();
stuList.add(new Student("Tom","Comp", "123 street", "A"));
stuList.add(new Student("Jery","Comp", "456 street", "A+"));
stuList.add(new Student("Mac","Maths", "Dum Street", "B"));
List stuList=newarraylist();
添加(新学生(“汤姆”、“康普”、“123街”、“A”);
添加(新学生(“杰里”、“康普”、“456街”、“A+”));
添加(新学生(“Mac”、“数学”、“Dum Street”、“B”);
我需要将此arraylist传递给sql server存储过程,并将学生对象数据插入表中。
如何在Java中最好地实现这一点?我需要一个存储过程
Java版本8,Sql Server 2014,如果它有任何用途的话。通过我提供的输入,我能够做到这一点。谢谢马克,也谢谢你的意见。以下是您可能会觉得有用的工作代码
String jdbcurl = "jdbc:sqlserver://TestServer:1433;DatabaseName=Student";
connection = DriverManager.getConnection(jdbcurl,"username","password");
SQLServerDataTable stuTypeDT = new SQLServerDataTable();
stuTypeDT.addColumnMetadata("StudentId", java.sql.Types.NUMERIC);
stuTypeDT.addColumnMetadata("Name", java.sql.Types.VARCHAR);
stuTypeDT.addColumnMetadata("Department", java.sql.Types.VARCHAR);
stuTypeDT.addColumnMetadata("Address", java.sql.Types.VARCHAR);
stuTypeDT.addRow("1","Tom", "A", "123 Street");
stuTypeDT.addRow("2","Jery", "B", "456 Street");
stuTypeDT.addRow("3","Mac", "C", "Vancour");
String ececStoredProc = "EXEC InsertStudentInfo ?";
SQLServerPreparedStatement pStmt = (SQLServerPreparedStatement)connection.prepareStatement(ececStoredProc);
pStmt.setStructured(1, "dbo.StudentInfoType", stuTypeDT);
pStmt.execute();
另请参见并注意,这需要SQL Server JDBC 6.0预览(!)驱动程序。MS在其6.0-Preview的Apr-1版本中添加了此功能,此处提供:作为强制转换PreparedStatement的替代方法,您可以将SQLServerDataTable实例传递给PreparedStatement.setObject(int,Object)方法。这适用于dbo架构中定义的TVP类型。SQLServerDataTable不再作为驱动程序下载的一部分提供。@FinniMcFinger MS驱动程序包中有几个JAR。你确定你找对地方了吗?我只是从MS站点重新下载了它,并验证了该类是否在jar中。您必须选择MS JDBC驱动程序6.0版本。然后,站点要求您选择一个文件,我选择了sqljdbc_6.0.7507.100_enu.tar.gz。下载后,在该归档文件中,我只使用了sqljdbc42.jar。@allenru您是对的。它位于sqljdbc42.jar中。我在查看sqljdbc6.jar。干杯