我正在使用eclipse与MS SQL Server链接来完成一项任务,但是我遇到了一些问题。当我编写代码从数据库中的任何表中读取时,它正确地显示所有数据意味着连接是好的但是当我执行存储过程时我面临两个问题1.)每当我排除一个callableStatement变量时调用execute()方法没有数据发送到数据库2.)每当我包含调用execute()方法的可调用变量时,我得到一个错误,指出[Microsoft] [ODBC SQL Server驱动程序]无效的参数类型。你能帮我理解发生了什么吗
void insertCustomer(int trn, String Ln,String fn,String mn,String dob,String email,String ms,String tel,String pa,String ma,String en,String dp,int emp)
{
// Declare the JDBC object.
Connection con = null;
try
{
// Establish the connection.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:dbase");
con.setAutoCommit(false);
CallableStatement sp = con.prepareCall("{? = call addcustomer(?,?,?,?,?,?,?,?,?,?,?,?,?)}");
sp.setInt(1,trn);
sp.setString(2,Ln);
sp.setString(3,fn);
sp.setString(4,mn);
sp.setString(5,ms);
sp.setString(6,dob);
sp.setString(7,email);
sp.setString(8,tel);
sp.setString(9,pa);
sp.setString(10,ma);
sp.setString(11,en);
sp.setInt(12,emp);
sp.setString(13,dp);
sp.execute();//this is where the problem is
sp.close();
}//end of try
catch(Exception E)
{
E.printStackTrace();
}//end of catch
}//end of insert customer
这是存储过程的代码
alter procedure addcustomer
(
@Trn int,
@LName varchar(30),
@FName varchar(30),
@MName varchar(30),
@MStatus varchar(20),
@Dob date,
@Email varchar(100),
@Telphone varchar(20) ,
@Permanent_addr varchar(300),
@mailing_addr varchar(300),
@engine_num varchar(25),
@emp_id int,
@date_of_purchase date,
@PartO varchar(300)
)
AS
BEGIN
Begin tran
INSERT INTO customer
VALUES(@Trn, @LName,@FName,@MName,@MStatus, @Dob,@Email,@Telphone,@Permanent_addr, @mailing_addr,@PartO)
exec addPurchase @Trn,@engine_num,@emp_id,@date_of_purchase
IF(@@ERROR <>0)
BEGIN
SELECT'An Unexpected error has occur'
ROLLBACK TRANSACTION
RETURN 1
END
COMMIT TRANSACTION
END
答案 0 :(得分:0)
registerOutputParameter()
方法执行语句之前指定它们。试试这个(我假设VARCHAR
是输出参数的类型):
CallableStatement sp = con.prepareCall("{? = call addcustomer(?,?,?,?,?,?,?,?,?,?,?,?,?)}");
sp.registerOutParameter(1,Types.VARCHAR);
sp.setInt(2,trn);
sp.setString(3,Ln);
sp.setString(4,fn);
sp.setString(5,mn);
sp.setString(6,ms);
sp.setString(7,dob);
sp.setString(8,email);
sp.setString(9,tel);
sp.setString(10,pa);
sp.setString(11,ma);
sp.setString(12,en);
sp.setInt(13,emp);
sp.setString(14,dp);
sp.execute();