我已经使用用户名系统建立了与我的 Oracle 数据库的连接
连接成功,我能够执行所有基本的 sql 操作,例如插入、更新、删除...但我无法执行我的存储过程。 当我尝试从 netbeans 调用我的存储过程时,我遇到了一些错误。请帮我解决这个问题。
netbeans按钮执行的代码
int eid = Integer.parseInt(eidtf.getText());
String ename = enametf.getText();
String dob = dobtf.getText();
String sex = male.getText();
if (female.isEnabled() == true) {
sex = female.getText();
}
String designation = destf.getText();
int basic = Integer.parseInt(basictf.getText());
//String sql = "exec calc(" +eid +","+ basic +",'"+ ename +"','"+ sex +"','"+ dob +"','"+ designation +"')";
try {
CallableStatement cs = con.prepareCall("{call calc(? ? ? ? ? ?)}");
cs.setInt(2, 50);
cs.setInt(1, 126);
cs.setString(3, ename);
cs.setString(4, sex);
cs.setString(5, dob);
cs.setString(6, designation);
cs.execute();
JOptionPane.showMessageDialog(this, "Insertion has been done successfully!!!");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Error: " + ex.getMessage() + "\nCause: " + ex.getCause() + "\nError Code: " + ex.getErrorCode() + "\nStack: " + ex.getClass());
}
下表和程序如下:
create table emp_payroll
(eid number(4) primary key,
ename varchar(20),
dob date,
sex char(1),
designation varchar(20),
basic number(5,2),
da number(5,2),
hra number(5,2),
pf number(5,2),
mc number(5,2),
gross number(5,2),
ded number(5,2),
net_pay number(5,2)
);
create or replace procedure calc
(x_eid in emp_payroll.eid%type :=123,
x_basic in emp_payroll.basic%type,
x_name in emp_payroll.ename%type,
x_sex in emp_payroll.ename%type,
x_dob in emp_payroll.ename%type,
x_des in emp_payroll.ename%type
)
as
x_da emp_payroll.basic%type;
x_hra emp_payroll.basic%type;
x_pf emp_payroll.basic%type;
x_mc emp_payroll.basic%type;
x_gross emp_payroll.basic%type;
x_ded emp_payroll.basic%type;
x_net_pay emp_payroll.basic%type;
begin
x_da:=.6* x_basic;
x_hra:=.6* x_basic;
x_pf:=.6* x_basic;
x_mc:=.6* x_basic;
x_gross:=x_basic+x_da+x_hra;
x_ded:=x_pf+x_mc;
x_net_pay:=x_gross-x_ded;
insert into emp_payroll values(x_eid,x_name,x_dob,x_sex,x_des,x_basic,x_da,x_hra,x_pf,x_mc,x_gross,x_ded,x_net_pay) ;
end calc;
/
当我在 sqlplus 中运行以下命令时:
exec calc(123,50,'Har','m','2000年4月12日','学生');
我得到了预期的o/p。 但是当我在 netbeans 中做同样的事情时 我没有得到预期的操作,但出现了一些错误。
感谢快速帮助。 提前致谢...
最佳答案
CallableStatement
的 javadoc说:
The interface used to execute SQL stored procedures. The JDBC API provides a stored procedure SQL escape syntax that allows stored procedures to be called in a standard way for all RDBMSs. This escape syntax has one form that includes a result parameter and one that does not. If used, the result parameter must be registered as an OUT parameter. The other parameters can be used for input, output or both. Parameters are referred to sequentially, by number, with the first parameter being 1.
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} {call <procedure-name>[(<arg1>,<arg2>, ...)]}
如您所见,参数之间用逗号分隔,这与任何语言中将参数传递给函数/过程/方法的语法几乎相同。
这意味着您的代码应该是:
CallableStatement cs = con.prepareCall("{call calc(?,?,?,?,?,?)}");
关于java - 我在使用 netbeans 时收到此错误 pls 00103,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204233/