我的问题没有得到很好的答案,找到了怎么做。这是仅当记录不存在时才将记录插入表的方式:
1)在您的架构上创建或替换函数(这是检查2个参数,您可以将其设置为检查任意多个)PL / SQL非常具体,按照我写的复制和粘贴应该可以成功编译。需要多次尝试才能使语法正确。此函数检查要写入的表,以及要检查的相应列名是否已经一起存在。
create or replace function Found(
var1 type,
var2 type)
return number
is
numberOfSelectedRows number := 0;
begin
select count(*)
into numberOfSelectedRows
from TABLE
where COLUMN_NAME = var1
and COLUMN_NAME = var2;
return numberOfSelectedRows;
end Found;
2)编写java来执行pl/sql函数:这是用NetBeans完成的。单击该按钮时,它将从其他表中加载 FORM 数据,并确定要插入的表中是否已存在该记录。
try {
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
con = DriverManager.getConnection(""+LOGIN.url+"");
String str1 = jTextField_VariableName.getText();
String str2 = jTextField_VariableName.getText();
String q = "insert into TABLE (var1 type, var2 type) VALUES ('"+str1+"', '"+str2+"')" ;
cs = con.prepareCall("{?=call Found(?, ?)}"); // cs = CallableStatement - defined in class CallableStatement cs = null;
cs.setString(2, str1);
cs.setString(3, str2);
cs.registerOutParameter(1, Types.INTEGER);
cs.execute();
if(cs.getInt(1)>= 1)
{
JOptionPane.showMessageDialog(null, " this record already exists");
}
else
{
try{
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
con = DriverManager.getConnection(""+LOGIN.url+"");
pst = con.prepareStatement(q);
pst.execute();
}catch(SQLException ex) {Logger.getLogger(REGISTER_STUDENT.class.getName()).log(Level.SEVERE, null, ex);}
}
} catch (SQLException ex) {Logger.getLogger(REGISTER_STUDENT.class.getName()).log(Level.SEVERE, null, ex);}