Search code examples
javasql-serversql-server-2008jdbcmssql-jdbc

How to pass Table-Valued parameters from java to sql server stored procedure?


I have a Student class with the following attributes:

Name, Department, Address, Grade. 

Now I have an ArrayList that contains some Student objects like this,

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

I need to pass this arraylist to the sql server stored procedure and insert the student object data into the table. How to best achieve this in Java? I am required to have a stored procedure.

Java version 8, Sql Server 2014 if its of any use.


Solution

  • With the inputs provided by Mark Rotteveel I was able to do it. Thanks Mark, Sean thanks for your input as well. Here is the working code for any of you that may find it useful.

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