2012-07-23 43 views
1

我想創建可以計算Oracle表中的行數的Java方法。到目前爲止,我做了這個:如何創建Java方法來計算Oracle表中的行數

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"); 

你能幫我解決這個問題嗎?

+0

如果你不知道列名,你可以使用'java.sql.ResultSetMetaData#getColumnName' – JIV 2012-07-23 15:28:54

回答

4
count = result.getInt(1); 

這是必需的,因爲數爲int。並且您可以指定查詢返回的行的索引,您不需要按名稱訪問它。

但你也可以這樣做:

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

這應做到:

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

你需要爲你在查詢中指定來獲取值使用相同的名稱。你也可以讓你的

count = result.getString("row"); 

工作通過更改查詢

SQLStatement = "SELECT count(*) as row FROM ? WHERE USERSTATUS = ?"; 
+1

檢查[鏈接](http://www.techonthenet.com/sql/count.php)的一些附加信息。 – alex 2012-07-23 13:58:16

1

你不能在一個SQL查詢中使用綁定變量代替數據庫對象的,可以嗎?它只能用於參數綁定。 試試這個,

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

這可能是受到SQL注入攻擊,所以你可能要檢查DBtablename參數是一個有效的數據庫對象名稱(即最長的不帶空格的30個字節,幷包含唯一有效的字符數據庫對象標識符)。

count = result.getInt("row_count"); 
相關問題