如何使用java代码将Object传递给SQL服务器存储过程?

时间:2016-02-06 11:06:01

标签: java sql-server

public class Student{
 protected String Name;
 Protected String Marks;
 public Student(String name, String marks){
  this.Name=name;
  this.Marks=marks;
 } 
 //getters and setters for above
}

从我在下面尝试的其他课程

Student[] std=new Student[2];
std[0]=new Student("user1","80");
std[1]=new Student("user2","70");
String section = "A";

Connection conn=DriverManager.getConnection("jdbc:sqlserver://....");
CallableStatement stmt= conn.prepareCall("{Call UserDatils(?,?,?)}");
stmt.setString(2, section);
//stmt.setArray(3, std);
stmt.setObject(3, std);
stmt.registerOutParameter(1, java.sql,Types.VARCHAR);
stmt.execute();

这里的问题在于以下两行。

    //stmt.setArray(3, std);
stmt.setObject(3, std);

当我使用setObject运行上述内容时,它说:“不支持从UNKNOWN到UNKNOWN的转换。

我无法设置此值。

请帮我将上述学生信息传递给存储过程。

谢谢。

2 个答案:

答案 0 :(得分:0)

首先,我会尝试使用   std [0]而不是std。

答案 1 :(得分:0)

一般情况下,如果你需要一个对象的值到另一个对象,那么你需要来自一个对象的getter和来自其他对象的setter。这意味着你需要确切地知道这两个对象的实例成员是什么。基本上你需要知道两个涉及的对象。 类似地,在上面的情况中,当您在setObject方法中传递Student对象时,JDBC不知道如何将Student对象转换为sql对象。 JDBC为一些java对象定义了一组自定义映射到相应的sql类型。 请参阅文档:http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html

因此无法直接从任何java类型到sql类型的映射。