我使用 类似Oralce网站上的批量插入方法。
其中setDefaultExecuteBatch (100);再每批中 有一条违反约束的信息(主键或者外键的约束)
其后边的数据全部丢失(被数据库回滚 )java.sql.SQLException: ORA-02291: integrity constraint (YONG.FK_RE_1) violated - parent key not found请问有没有办法,无视这条违反约束的信息引起的异常,保证后边的信息插入,只要这条不被
插入到数据库中就可以了。
我参照的程序如下:
import java.sql.*;// You need to import oracle.jdbc.driver.* in order to use the
// API extensions.
import oracle.jdbc.driver.*;class SetExecuteBatch
{
public static void main (String args [])
throws SQLException
{
// Load the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // Connect to the database
// You can put a database name after the @ sign in the connection URL.
Connection conn =
DriverManager.getConnection ("jdbc:oracle:oci8:@", "scott", "tiger"); // Default batch value set to 2 for all prepared statements belonging
// to this connection.
((OracleConnection)conn).setDefaultExecuteBatch (2); PreparedStatement ps =
conn.prepareStatement ("insert into dept values (?, ?, ?)");
ps.setInt (1, 12);
ps.setString (2, "Oracle");
ps.setString (3, "USA"); // No data is sent to the database by this call to executeUpdate
System.out.println ("Number of rows updated so far: "
+ ps.executeUpdate ()); ps.setInt (1, 11);
ps.setString (2, "Applications");
ps.setString (3, "Indonesia"); // The number of batch calls to executeUpdate is now equal to the
// batch value of 2. The data is now sent to the database and
// both rows are inserted in a single roundtrip.
int rows = ps.executeUpdate ();
System.out.println ("Number of rows updated now: " + rows);
ps.close ();
conn.close();
}
}
其中setDefaultExecuteBatch (100);再每批中 有一条违反约束的信息(主键或者外键的约束)
其后边的数据全部丢失(被数据库回滚 )java.sql.SQLException: ORA-02291: integrity constraint (YONG.FK_RE_1) violated - parent key not found请问有没有办法,无视这条违反约束的信息引起的异常,保证后边的信息插入,只要这条不被
插入到数据库中就可以了。
我参照的程序如下:
import java.sql.*;// You need to import oracle.jdbc.driver.* in order to use the
// API extensions.
import oracle.jdbc.driver.*;class SetExecuteBatch
{
public static void main (String args [])
throws SQLException
{
// Load the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // Connect to the database
// You can put a database name after the @ sign in the connection URL.
Connection conn =
DriverManager.getConnection ("jdbc:oracle:oci8:@", "scott", "tiger"); // Default batch value set to 2 for all prepared statements belonging
// to this connection.
((OracleConnection)conn).setDefaultExecuteBatch (2); PreparedStatement ps =
conn.prepareStatement ("insert into dept values (?, ?, ?)");
ps.setInt (1, 12);
ps.setString (2, "Oracle");
ps.setString (3, "USA"); // No data is sent to the database by this call to executeUpdate
System.out.println ("Number of rows updated so far: "
+ ps.executeUpdate ()); ps.setInt (1, 11);
ps.setString (2, "Applications");
ps.setString (3, "Indonesia"); // The number of batch calls to executeUpdate is now equal to the
// batch value of 2. The data is now sent to the database and
// both rows are inserted in a single roundtrip.
int rows = ps.executeUpdate ();
System.out.println ("Number of rows updated now: " + rows);
ps.close ();
conn.close();
}
}
try
{
插入语句
}
catch (exception e)
{
system.out.println(e);
}
就可以拉!捕捉这个异常但不处理,那就可以继续执行拉!