【问题标题】:How to pass Table-Valued parameters from java to sql server stored procedure?java - 如何将表值参数从java传递到sql server存储过程?
【发布时间】:2017-02-26 12:31:04
【问题描述】:

我有一个具有以下属性的 Student 类:

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"));

我需要将这个arraylist传递给sql server存储过程,并将学生对象数据插入到表中。 如何在 Java 中最好地实现这一点?我需要有一个存储过程。

Java 版本 8、Sql Server 2014(如果有任何用途)。

【问题讨论】:

标签: java sql-server sql-server-2008 jdbc mssql-jdbc


【解决方案1】:

通过Mark Rotteveel 提供的输入,我能够做到。谢谢马克,Sean 也感谢您的意见。这是任何人可能会发现它有用的工作代码。

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();

【讨论】:

  • MS 在 4 月 1 日发布的 6.0 预览版中添加了此功能:microsoft.com/en-us/download/details.aspx?id=11774
  • 作为转换 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。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多