【问题标题】:How can i get specific column from mySQL with JDBC?如何使用 JDBC 从 mySQL 获取特定列?
【发布时间】:2018-11-09 09:28:57
【问题描述】:
    PreparedStatement ps2;
    ResultSet rs2;

    String username = jTextField_username.getText();
    String userpassword = jTextField_userpassword.getText();

    String sql = "SELECT distinct kalanizin from users where username =?";
    String[] resultsetarray = null;

    try {

       ps2 = MyConnection.getConnection().prepareStatement(sql);
       ps2.setString(1, username);

       rs2 = ps2.executeQuery();
       String result = rs2.getString(0); // i want this String to hold the first result

大家好。我有一个问题一直困扰着我。正如标题中所说,通过使用 JDBC,我想从我的数据库中获取一列。例如

Select * from users where username = "blabla"

我希望 Java 执行此查询并获取它找到的第一行。然后放入字符串或整数。正如您在上面看到的我糟糕的代码,它没有做到这一点。我试图通过 using 语句来实现这一点,但它仍然没有用。谁能帮我?那将不胜感激。 附言。对不起我糟糕的变量名并使用我的本地语言作为变量

【问题讨论】:

    标签: java mysql database jdbc


    【解决方案1】:

    如果您知道列名,您可以使用getString(columnLabel) 之类的方法来代替getString(columnIndex)

    检索此 ResultSet 对象当前行中指定列的值,作为 Java 编程语言中的 String。

    columnLabel - 用 SQL AS 子句指定的列的标签。如果未指定 SQL AS 子句,则标签为列名

    【讨论】:

      【解决方案2】:

      您要的是带有columnIndex=0 的列,但列索引以1 开头

      您可以使用我前段时间使用的这段代码来查询您的整个表格

      public List<Article> findAll() {
          Connection connection = jdbConnectionWrapper.getConnection();
          List<Article> articles = new ArrayList<>();
          try {
              PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM article");
              ResultSet resultSet = preparedStatement.executeQuery();
      
              while (resultSet.next()) {
                  Article article = new Article();
      
                  article.setId(resultSet.getLong(1));
                  article.setName(resultSet.getString(2));
                  article.setPrice(resultSet.getInt(3));
      
                  articles.add(article);
              }
          } catch (SQLException e) {
              e.printStackTrace();
          }
          return articles;
      }
      

      【讨论】:

        【解决方案3】:

        您错过了ResultSet#next 电话。

        根据您的示例代码,您可以这样做:

        PreparedStatement ps2;
        ResultSet rs2;
        
        String username = jTextField_username.getText();
        String userpassword = jTextField_userpassword.getText();
        
        String sql = "SELECT distinct kalanizin from users where username =?";
        String[] resultsetarray = null;
        
        try {
           ps2 = MyConnection.getConnection().prepareStatement(sql);
           ps2.setString(1, username);
        
           rs2 = ps2.executeQuery();
           if(rs2.next()) { // moving to the first row
               String result = rs2.getString(1); // i want this String to hold the first result
           } else {
               // throw Exception ?
           }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        

        【讨论】:

        • 我尝试了您的建议,它确实有效!非常感谢塞巴斯蒂安。感激不尽
        【解决方案4】:

        我的方法是:

        1) 限制查询。您可以将限制添加为 1 到查询中。我鼓励您阅读它而不是提供示例。

        2 )例如,仅获取您需要的列。

        select u.age from users u where u.username=? 
        

        然后根据数据类型,您可以从结果集中获取它。

        【讨论】:

        • 谢谢我的好先生的回答。我为我的无知感到抱歉。我刚接触数据库以及数据库和 java 之间的连接,所以我会明确地阅读它。再次感谢
        • @EnesÇalışkan 不客气,这个网站对我们所有的学习都非常有帮助。我的谦虚建议是,不仅要努力寻找解决方案,还要寻找最有效的解决方案,至少可以说这种做法总是富有成效的。
        猜你喜欢
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多