如何从 h2 数据库中获取字符串(Java、DBUtil)

Posted

技术标签:

【中文标题】如何从 h2 数据库中获取字符串(Java、DBUtil)【英文标题】:How to get a String from h2 database (Java, DBUtil) 【发布时间】:2018-02-01 19:05:43 【问题描述】:

这是来自 DBUtil 的代码

public class DBUtil 
    static Connection conn = null;
    public static Connection getConnected() 
        try 
            Class.forName("org.h2.Driver");
            conn = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/test", "sa", "");
         catch (ClassNotFoundException e) 
            e.printStackTrace();
         catch (SQLException e) 
            e.printStackTrace();
        
        return conn;
    //end method
//end DBUtil

这是我尝试使用的方法的代码:

private class SearchForEdit implements ActionListener
    
        @Override
        public void actionPerformed(ActionEvent e) 
            String clientNumber = tfieldMiniSearchNumber.getText();
            int number;

            conn = DBUtil.getConnected();
            if(conn == null) return;

            String names=null, address=null;


            String sql ="select names from clients where client_number = ?;";
            String sql2 ="select address from clients where client_number = ?;";

            try 
                state = conn.prepareStatement(sql);
                state.setInt(1, number);
                state.execute();

                state = conn.prepareStatement(sql2);
                state.setInt(1, number);
                state.execute();

                labelWarning.setForeground(new Color(22, 205, 5));
                labelWarning.setText("<html>TEXT SUCCESS</html>");

                //names = select names from clients where client_number = number;
                //address = select address from clients where client_number = number;

                //if(names!=null && address!=null)

                //tfieldEditClientNumber to be number
                tfieldEditClientNumber.setText(""+number);
                //tfieldEditNames to be names, where names = select names from clients where client_number = number;
                //tfieldEditAddressда to be address, where address = select address from clients where client_number = number;
             catch (SQLException e1) 
                labelWarning.setForeground(Color.RED);
                labelWarning.setText("<html>Try again later</html>");
                e1.printStackTrace();
            
           
    //end

我想从数据库中取出 NAME 列的值,然后输入字符串名称。然后地址也一样。我只知道如何执行语句。非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

您需要将查询结果存储在ResultSet 中,然后遍历该ResultSet。您可以在迭代时将 ResultSet 中的值分配给变量。

下面的代码是一个迭代 ResultSet 的示例,正​​如我在下面的评论中所提到的。

while (rs.next()) 
// ResultSet columns: 1 = UserName 2 = FirstName 3 = LastName  4 = Organization
            userInfo[0] = rs.getString(1); // assign UserName result to variable
            userInfo[1] = rs.getString(2); // assign First_Name result to variable
            userInfo[2] = rs.getString(3); // assign Last_Name result to variable
            userInfo[3] = rs.getString(4); // assign Organization result to variable

当没有ResultSet 行可供迭代时,while 循环将结束。

【讨论】:

尝试 state = conn.prepareStatement(sql); state.setInt(1, number); rs1 = state.executeQuery(); System.out.println(rs1.getString("NAMES"));名称 = rs1.getString(1); tfieldEditClientNumber.setText(""+number); tfieldEditNames.setText(名称); catch (SQLException e1) labelWarning.setForeground(Color.RED); labelWarning.setText("错误!"); e1.printStackTrace();但它给了我 org.h2.jdbc.JdbcSQLException: No data is available [2000-196] 当我尝试对 rs1 进行 syso 时,结果有 1 列和 1 行。知道我应该如何进行吗? 所以缺少两件事。在执行Query() 之后,您需要定位ResultSet 以便它可以看到第一个结果,为此您需要使用rs1.next()。之后,您需要将 rs1.getString("NAMES") 更改为 rs1.getString(1)。结果集从“1”开始,并针对结果集中该行中的每一列上升。因此,您的第一个结果在 Column1 中,第二个结果在 Column2 中,依此类推。在您再次调用 .next() 之前,您现在位于第 2 行。迭代 ResultSet 的最常见方法是 while 循环,但现在关注只是得到你想要的结果。 非常有帮助!所以我只是检查了 if(rs.next()) string = rs.getString(1);如果存在,则转到结果的下一个结果,如果不存在,则我的字符串为空。我对迭代器有一个很大的误解。

以上是关于如何从 h2 数据库中获取字符串(Java、DBUtil)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 和 JDBC 在 h2 数据库中存储文本文件?

我们如何从h2数据库中提取blob数据类型列的数据?

H2 从当前时间获取 1 天前的日期

尝试在 Java Spring Boot 中从 H2 数据库中获取相关实体

无法从 h2 获取数据

如何使用 H2 嵌入式数据库获取序列中的下一个值?