Java SQL-如何使用一个SQL查询返回多行?

Java SQL-如何使用一个SQL查询返回多行?,java,sql,javabeans,Java,Sql,Javabeans,我有一个托管bean,它可以对Oracle数据库进行SQL查询。这只是我如何进行SQL查询的一个非常简单的示例。这是表结构: GLOBALSETTINGS --------------------------------- SessionTTL VARCHAR2(40 BYTE) MAXACTIVEUSERS NUMBER ACTIVEUSERS VARCHAR2(20 BYTE) 我使用此表只是为了存储应用程序设置。在下面列出的示例中,我可以用一条SQL语

我有一个托管bean,它可以对Oracle数据库进行SQL查询。这只是我如何进行SQL查询的一个非常简单的示例。这是表结构:

GLOBALSETTINGS
---------------------------------
SessionTTL          VARCHAR2(40 BYTE)
MAXACTIVEUSERS  NUMBER
ACTIVEUSERS         VARCHAR2(20 BYTE)
我使用此表只是为了存储应用程序设置。在下面列出的示例中,我可以用一条SQL语句获取一个字符串。我希望使用SQL查询获取三行的内容—SessionTL、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;       
   }                         

另外,我需要行的内容

我希望我能理解你的要求,但我恐怕我不能理解,因为这似乎太简单了,但无论如何

我认为您需要3列的内容,而不是行。是的,您可以指定希望在SQL语句中返回的列:

SELECT SessionTTL, MAXACTIVEUSERS, ACTIVEUSERS FROM GLOBALSETTINGS WHERE (condition)...
如果不想显式指定所有列,还可以使用*作为所有列iof的快捷方式:

SELECT * FROM GLOBALSETTINGS WHERE (condition)...

一些背景知识可能会有用

我希望我能理解你的要求,但我担心我不会,因为这看起来太简单了,但无论如何

我认为您需要3列的内容,而不是行。是的,您可以指定希望在SQL语句中返回的列:

SELECT SessionTTL, MAXACTIVEUSERS, ACTIVEUSERS FROM GLOBALSETTINGS WHERE (condition)...
如果不想显式指定所有列,还可以使用*作为所有列iof的快捷方式:

SELECT * FROM GLOBALSETTINGS WHERE (condition)...
一些背景阅读可能有用

如果我读对了(如果弄错了,很抱歉),您只需更改SQL命令以选择数据库表中的所有列

为此:

string SqlAll = @"SELECT Database.SessionTTL, Database.MAXACTIVEUSERS, Database.ACTIVEUSERS FROM Database";
这将检索数据库中的所有列。当出于逻辑原因进行筛选时,您也可以在查询中使用条件语句,例如从结果集中获取前20个结果的前20个结果。

如果我读对了(如果出错,请原谅),您只需更改SQL命令以选择数据库表中的所有列

为此:

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

这将检索数据库中的所有列。当出于逻辑原因进行筛选时,您也可以在查询中使用条件语句,例如从结果集中获取前20个结果的前20个结果。

如果您希望使用一个sql查询返回多行,您可能需要查看ArrayList,因为您需要一个循环,代码将遍历您的记录并匹配并查找所有可能的结果,直到记录列表的末尾。

如果您希望通过一个sql查询返回多行,您可能需要查看ArrayList,因为您需要一个循环,代码将遍历您的记录并匹配并找到所有可能的结果,直到记录列表的末尾。

为什么要提交并回滚查询?可能是从示例中剪切和粘贴?INSERT、UPDATE等操作有意义,但SELECT操作充其量是多余的(可能存在此会话的未提交SQL语句!)。@Viruzzo:SELECT语句确实会启动事务,因此结束该事务也是有意义的(某些DBMS实际上还要求您明确地结束“只读”事务). 虽然我同意本例(以及Oracle)中的说法,但这并不是真的需要,但也没有坏处。@user1103606:您希望获取多行而不是多行。@davidaber但是提交/回滚会更糟。为什么要提交并回滚查询?可能是从一个示例中剪切和粘贴?INSERT、UPDATE等操作有意义,但SELECT操作充其量是多余的(可能存在此会话的未提交SQL语句!)。@Viruzzo:SELECT语句确实会启动事务,因此结束该事务也是有意义的(某些DBMS实际上还要求您明确地结束“只读”事务). 虽然我同意本例(以及Oracle)中的说法,但这并不是真的需要,但也没有坏处。@user1103606:您希望获取多行而不是多行。@davidaber但提交/回滚会更糟。