2016-04-12 5 views
6

Ich habe eine Student Klasse mit den folgenden Eigenschaften:Wie übergeben Sie Table-Valued-Parameter von Java an SQL Server gespeicherte Prozedur?

Name, Department, Address, Grade. 

Jetzt habe ich eine ArrayList, die einige Student Objekte wie diese enthält,

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

Ich brauche diese Arraylist an den SQL-Server zu übergeben gespeichert Prozedur und fügen Sie die Schülerobjektdaten in die Tabelle ein. Wie erreiche ich das am besten in Java? Ich muss eine gespeicherte Prozedur haben.

Java-Version 8, Sql Server 2014, wenn es irgendeinen Nutzen hat.

+0

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/f7377f1c-f235-4870-b4a9-eab041fbd7b5/is-tablevalued-parameters-available-in-java-jdbc? forum = sqldatabaseengine –

+0

Siehe auch https://blogs.technet.microsoft.com/dataplatforminsider/2016/04/04/preview-the-microsoft-jdbc-driver-6-0-for-sql-server/ und https://msdn.microsoft.com/en-us/library/mt651781.aspx Beachten Sie, dass dies den SQL Server JDBC 6.0 Preview (!) - Treiber erfordert. –

Antwort

9

Mit den Eingaben von Mark Rotteveel konnte ich es tun. Danke Mark, Sean danke für Ihre Eingabe. Hier ist der Arbeitscode für jeden von euch, der es nützlich finden könnte.

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

MS hat diese Funktion in der April-1-Version ihrer 6.0-Vorschau hier verfügbar: https://www.microsoft.com/en-us/download/details.aspx?id=11774 – nirmal

+0

Als eine Alternative zum Casting der PreparedStatement Sie können die SQLServerDataTable-Instanz an die PreparedStatement.setObject-Methode (int, Object) übergeben. Dies funktionierte für einen TVP-Typ, der im dbo-Schema definiert wurde. – allenru

+0

Die SQLServerDataTable ist nicht mehr als Teil des Treiberdownloads verfügbar. –

Verwandte Themen