2012-07-23 63 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");