2012-03-08 27 views
0

我有一个托管bean,它使SQL查询到Oracle数据库。这只是我如何进行SQL查询的一个非常简单的例子。这是表结构:SQL - 如何使用一个SQL查询返回多行?

GLOBALSETTINGS 
--------------------------------- 
SessionTTL   VARCHAR2(40 BYTE) 
MAXACTIVEUSERS NUMBER 
ACTIVEUSERS   VARCHAR2(20 BYTE) 

我用这个表只是为了存储应用程序设置。在下面列出的例子中,我可以用一条SQL语句获取一个字符串。我想用SQL查询来获取三行的内容 - SessionTTL,MAXACTIVEUSERS,ACTIVEUSERS。可能吗?

public String CheckUserDB(String userToCheck) throws SQLException { 
     String storedPassword = null;   
     String SQL_Statement = null; 

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

    try { 
     conn.setAutoCommit(false); 
     boolean committed = false; 
      try { 
        SQL_Statement = "SELECT Passwd from USERS WHERE Username = ?"; 

        PreparedStatement passwordQuery = conn.prepareStatement(SQL_Statement); 
        passwordQuery.setString(1, userToCheck); 

        ResultSet result = passwordQuery.executeQuery(); 

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

        conn.commit(); 
        committed = true; 
      } finally { 
        if (!committed) conn.rollback(); 
        } 
     } 
      finally {    
      conn.close(); 

      } 

    return storedPassword;  
    }       

P.S我想要行的内容。

+2

为什么你提交和查询回滚? – Viruzzo 2012-03-08 14:57:14

+1

也许从一个例子中切割和粘贴?在INSERT,UPDATE等上有意义,但在SELECT上充其量可能是多余的(可能会出现此会话的未提交的SQL语句!)。 – 2012-03-08 15:07:29

+0

@Viruzzo:SELECT语句不启动事务,因此是很有意义以结束交易,以及(DBMS的一些实际要求你也explictely结束“只读”交易)。虽然我同意这个例子(和Oracle),但它并不是真的需要,但它也不会造成任何损害。 – 2012-03-08 15:17:37

回答

3

我希望我明白你问什么,但我担心我没有,因为它似乎太简单了,但无论如何...

我想你想3列,而不是行的内容。是的,你可以,你只需指定你想在你的SQL语句返回的列:

SELECT SessionTTL, MAXACTIVEUSERS, ACTIVEUSERS FROM GLOBALSETTINGS WHERE (condition)... 

你也可以使用*作为所有列的快捷IOF你不想明确指定:

SELECT * FROM GLOBALSETTINGS WHERE (condition)... 

如果我读这正确的(抱歉,如果错了)的一些背景知识阅读SQL syntax可能是有用的

1

,所有你想要做的是改变你的SQL命令在数据库表中选择所有列。

要做到这一点:

string SqlAll = @"SELECT Database.SessionTTL, Database.MAXACTIVEUSERS, Database.ACTIVEUSERS FROM Database"; 

这将检索数据库中的所有列。如果您想要过滤逻辑原因(如TOP 20)以获得结果集的前20个结果,则也可以在查询中包含条件语句。

1

如果你喜欢同一个SQL查询返回多个行,你可能想看看ArrayList的,因为你需要一个循环,其中的代码将通过你的记录和匹配,并找到所有可能的结果,直到记录的终点名单。