1

Oracle テーブルの行数をカウントできる Java メソッドを作成したいと考えています。これまでのところ、私はこれを作りました:

public int CheckDataDB(String DBtablename, String DBArgument) throws SQLException {
    System.out.println("SessionHandle CheckUserDB:"+DBArgument);
    int count;
    String SQLStatement = null;

    if (ds == null) {
        throw new SQLException();
    }

    Connection conn = ds.getConnection();
    if (conn == null) {
        throw new SQLException();
    }

    PreparedStatement ps = null;

    try {
        conn.setAutoCommit(false);
        boolean committed = false;
        try {
            SQLStatement = "SELECT count(*) FROM ? WHERE USERSTATUS = ?";

            ps = conn.prepareStatement(SQLStatement);
            ps.setString(1, DBtablename);
            ps.setString(2, DBArgument);

            ResultSet result = ps.executeQuery();

            if (result.next()) {
                count = result.getString("Passwd");
            }

            conn.commit();
            committed = true;
        } finally {
            if (!committed) {
                conn.rollback();
            }
        }
    } finally {
        /* Release the resources */
        ps.close();
        conn.close();
    }

    return count;
}

色々なテーブルに使いたいです。これは私が解決できない問題です:

count = result.getString("row"); 

問題を解決するのを手伝ってもらえますか?

4

3 に答える 3

4
count = result.getInt(1);

count は int であるため、これが必要です。また、クエリによって返される行のインデックスを指定できます。名前でアクセスする必要はありません。

しかし、次のこともできます。

count = result.getInt("count(*)");
于 2012-07-23T13:59:54.697 に答える
2

これはそれを行う必要があります:

count = result.getInt("count(*)");  

値を取得するには、クエリで指定したものと同じ名前を使用する必要があります。あなたも作ることができます

count = result.getString("row"); 

クエリを次のように変更して作業します

SQLStatement = "SELECT count(*) as row FROM ? WHERE USERSTATUS = ?";
于 2012-07-23T13:56:05.857 に答える
1

SQL クエリでデータベース オブジェクトの代わりにバインド変数を使用することはできませんね。パラメータバインディングにのみ使用できます。代わりにこれを試してください。

"SELECT count(*) as row_count FROM " + DBtablename + " WHERE USERSTATUS = ?";

これは SQL インジェクションに対して脆弱である可能性があるため、DBtablename パラメータが有効なデータベース オブジェクト名であることを確認することをお勧めします (つまり、最大 30 バイトの長さでスペースを含まず、データベース オブジェクト識別子として有効な文字のみが含まれます)。

count = result.getInt("row_count");
于 2012-07-23T14:27:42.773 に答える