【发布时间】:2020-12-29 18:31:21
【问题描述】:
数据库中有两张表,一张是 Student 表,列有 roll_no(PK)、name、grade 和 DOB,另一张表 StudentLeft,列有 roll_no、name、grade 和 leave_date。
我想从学生表中删除用户输入卷号的学生的记录,并将卷号,姓名,年级和离开日期(删除记录并添加到表中的日期)添加到StudentLeft 表。
这是我的方法。
public static void main(String[] args) throws SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null, preparedStatement1 = null, preparedStatement2 = null;
ResultSet resultSet = null;
String selectQuery = "", updateQuery = "", deleteQuery = "";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = dataSource.getConnection();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
int rollNo = Integer.parseInt(args[0]);
try {
selectQuery = "SELECT name, grade FROM Student WHERE roll_no = ?";
updateQuery = "INSERT INTO StudentLog values WHERE roll_no = ?, name = ?, standard = ?";
deleteQuery = "DELETE Student WHERE roll_no = ?";
connection.setAutoCommit(false);
preparedStatement = connection.prepareStatement(selectQuery);
preparedStatement.setInt(1, rollNo);
resultSet = preparedStatement.executeQuery();
preparedStatement1 = connection.prepareStatement(updateQuery);
preparedStatement1.setInt(1, rollNo);
while (resultSet.next()) {
String name = resultSet.getString("name");
String grade = resultSet.getString("grade");
preparedStatement1.setString(2, name);
preparedStatement1.setString(3, grade);
preparedStatement1.addBatch();
}
preparedStatement1.executeBatch();
preparedStatement2 = connection.prepareStatement(deleteQuery);
preparedStatement.setInt(1, rollNo);
connection.commit();
}
catch (SQLException e) {
e.printStackTrace();
}
try {
if (!preparedStatement.isClosed() || !preparedStatement1.isClosed() || !preparedStatement2.isClosed()) {
preparedStatement.close();
preparedStatement1.close();
preparedStatement2.close();
}
if (!connection.isClosed())
connection.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
这些是错误。
java.sql.BatchUpdateException: ORA-00936: missing expression
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10500)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)
at Q3.main(Q3.java:48)
Exception in thread "main" java.lang.NullPointerException
at Q3.main(Q3.java:62)
我正在使用 oracle 11g express 数据库。
【问题讨论】:
-
好的......你的代码中有什么(不)工作?您能具体说明您的问题是什么吗?
-
无法正确理解错误是什么。在执行批处理中显示两个错误,另一个在我关闭准备好的语句的区域中显示。
-
编辑你的问题并写下这些错误
-
并且您希望我们知道错误是什么,而您没有向我们显示任何可能出错的信息,更不用说错误消息了?您正在打印您的堆栈跟踪(就我个人而言,我会将它们放在日志文件中),因此您应该确切知道出了什么问题
标签: java database jdbc oracle11g