【问题标题】:get value from database table where id = ? java从 id = 的数据库表中获取值?爪哇
【发布时间】:2017-03-30 04:49:54
【问题描述】:

我有一张桌子 Table name is PARKTABLE

现在我想在 jsp 中获取这些值 我的代码在这里

 <jsp:useBean id="loginBean" scope="session" class="vustudent.Login" />
        <input type="text" name="takei" value='<jsp:getProperty name="loginBean" property="loginid" />' />
        <%
            String dbId = request.getParameter("takei");
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            String url= "jdbc:derby://localhost:1527/sample;create=true; user=app; password=app";
            Connection con = DriverManager.getConnection(url);  
            Statement st= con.createStatement();
            String query = "SELECT * FROM PARKTABLE WHERE ID =\'"+ dbId + "\' ";
            ResultSet rs = st.executeQuery(query);
            // iterate through the java resultset
      if (rs.next())
      {
        String placeOne = rs.getString("Place1");
        String placeTwo = rs.getString("Place2"); 
        System.out.println("place1" +placeOne);
        System.out.println("place1" +placeTwo);
      }
        %>
        </br>
        <input type="text" name="pl1value" value='placeOne' />

它在输入文本字段中打印 placeOne 而不是其值。 我想从数据库中打印 placeOne 值红色或绿色。 我哪里错了?

【问题讨论】:

    标签: java sql jsp derby


    【解决方案1】:

    作为可怕的袋熊和叶温的帖子,他们在逻辑上是正确的。如果我是你,我实际上会使用PreparedStatement 而不是Statement。我将使用while 语句而不是if。请参阅下面的代码。

            String dbId = request.getParameter("takei");
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            String url= "jdbc:derby://localhost:1527/sample;create=true; user=app; password=app";
            Connection con = DriverManager.getConnection(url);  
            String query = "SELECT * FROM PARKTABLE WHERE ID = ?";
            PreparedStatement st= con.prepareStatement(query);
            st.setString(0,dbId);
            ResultSet rs = st.executeQuery();
    
            String placeOne = null;
            String placeTwo = null;
    
            while (rs.next()) {
                String placeOne = rs.getString("Place1");
                String placeTwo = rs.getString("Place2"); 
                System.out.println("place1" +placeOne);
                System.out.println("place1" +placeTwo);
            }
    

    我使用 PreparedStatement 来防止 SQL 注入,就像您在 Statement 上所做的那样,但是当其他程序员看到它时它更具可读性和简洁性。我用 while 检索了您在 ResultSet 中的所有结果。

    【讨论】:

      【解决方案2】:

      如下更改输入文本:

      <input type="text" name="pl1value" value='<%=placeOne%>' />
      

      然后,更改您的Java 代码如下:

      String placeOne = "";
      String placeTwo = "";
      
       if (rs.next())
            {
              placeOne = rs.getString("Place1");
              placeTwo = rs.getString("Place2"); 
              System.out.println("place1" +placeOne);
              System.out.println("place1" +placeTwo);
            }
      

      因此,即使您的查询没有返回数据,您的输入类型也可以打印默认值。

      【讨论】:

      • 我认为应该可以。但我还没有声明 id = 主键。可能是由于这个问题。这可能是原因吗?
      • 获取您的字符串查询值并在数据库中运行,然后让我知道查询是否正常。但它与主键无关。一张桌子有一个pk是可选的,但很好
      • 当我写 String query = "SELECT * FROM PARKTABLE WHERE ID = '126678' ";它工作正常并在输入字段中获得红色值但是当我写 String query = "SELECT * FROM PARKTABLE WHERE ID = 'dbId' ";它返回空输入框。
      • 你的查询中也不需要\,你可以删除。
      • 它的打印空值。我不知道为什么?你能告诉我哪里错了吗?
      【解决方案3】:

      三个改变是必要的

        String placeOne = null; // declare here
        String placeTwo = null; 
        if (rs.next())
        {
          placeOne = rs.getString("Place1");  // set value here
          placeTwo = rs.getString("Place2"); 
          System.out.println("place1" +placeOne);
          System.out.println("place1" +placeTwo);
        }
          %>
          </br>
          <input type="text" name="pl1value" value=''<%=placeOne%>' />  // print here
      

      【讨论】:

      • @FatimaEman ,是的,它的工作!但是您需要了解您的程序逻辑,还需要确保您的查询是否正确。
      • 我还没有设置 id = 主键。这可能是原因??
      • 没有错误,只是在输入字段框中打印空值
      猜你喜欢
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2015-08-20
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多