Java - JDBC executeUpdate()不起作用

时间:2014-11-19 23:29:27

标签: java oracle ojdbc

我正在尝试使用jdbc插入/更新/删除行。插入工作正常,我只更改了查询字符串(或 insertTableSQL )通过调试,我怀疑 executeUpdate()没有终止,控制台没有显示任何错误消息。 (只是空白)

[编辑]
执行executeUpate()时程序被卡住了,这意味着我甚至看不到返回值

我没有使用查询字符串,而是尝试了 PreparedStatement ,但没有运气:(

String deleteRecordSQL = "DELETE mytable WHERE id = ?";
PreparedStatement ps = dbConnection.prepareStatement(deleteRecordSQL);
ps.setInt(1, 6);
ps.executeUpdate();

完整代码:

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class DeleteRow {

private static final String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DB_CONNECTION = "";
private static final String DB_USER = "";
private static final String DB_PASSWORD = "";

public static void main(String[] argv) {

    try {

        deleteRecordFromDbUserTable();

    } catch (SQLException e) {

        System.out.println(e.getMessage());

    }

}

private static void deleteRecordFromDbUserTable() throws SQLException {

    Connection dbConnection = null;
    Statement statement = null;

    try {
        dbConnection = getDBConnection();
        statement = dbConnection.createStatement();
        statement.executeUpdate("DELETE mytable WHERE id = 6");

        System.out.println("Record is deleted!");


    } catch (SQLException e) {

        System.out.println(e.getMessage());

    } finally {

        if (statement != null) {
            statement.close();
        }

        if (dbConnection != null) {
            dbConnection.close();
        }

    }

}

private static Connection getDBConnection() {

    Connection dbConnection = null;

    try {

        Class.forName(DB_DRIVER);

    } catch (ClassNotFoundException e) {

        System.out.println(e.getMessage());

    }

    try {

        dbConnection = DriverManager.getConnection(
                           DB_CONNECTION, DB_USER,DB_PASSWORD);
        return dbConnection;

    } catch (SQLException e) {

        System.out.println(e.getMessage());

    }

    return dbConnection;

}

}

任何帮助?

3 个答案:

答案 0 :(得分:2)

这不是官方的答案,但问题是如何解决的

有Java更新通知,我跟着它。更新后,JRE系统库(JavaSE - 1.7)的状态将更改为未绑定。我将执行环境更改为JavaSE - 1.6(Oracle WebLogic Server 11gR1(10.3.6)JRE),问题解决了......很奇怪..

没有语法问题

DELETE FROM mytable WHERE id = 6
DELETE mytable WHERE id = 6

如果有人能解释我如何解决这个问题,我们将非常感谢您的帮助。

FYI。

C:\>java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) Client VM (build 24.65-b04, mixed mode, sharing)

答案 1 :(得分:1)

由于它被卡住了,它必须等待一些可能被锁定的资源。 对于简单的更新查询,我遇到过这个问题。这里更新查询是在sql developer工具上运行的,并且没有完成提交。

感谢a comment by Prabhmanmeet Singh on this link

答案 2 :(得分:0)

如果没有得到异常,你没有说明这种或那种,你需要检查executeUpdate()的返回值,这是受影响的行数。如果它为零,则不删除任何行,可能是因为没有匹配WHERE子句。如果它不为零,那么删除了很多行。当根本没有发生任何事情时,你当然不应该打印"Record is deleted!"。您的程序可能对用户撒谎。

NB insertTableSQL是包含SQL DELETE语句的变量的愚蠢名称。