添加从sql数据库列表中检索的新记录

时间:2017-01-19 16:39:24

标签: java mysql arraylist

我需要添加新记录到列表,从数据库中检索, - 这似乎是简单的,但如何连接(合并)这两种方法:

public void addNewUser(){
    myList= new ArrayList<>();
    Values newValue = new Values(this.id, this.orderNo, this.productName, this.price, this.qty);
    newValue.setEditable(true);
    myList.add(newValue);
}

我使用这样的方法从sql数据库中检索用户列表:

private List<Values> valuesList;
private Values allValues;

private static List<Values> getUsers() {
    try {
        databaseConnection();
        String SQL = "SELECT * FROM Registration";
        System.out.println("Retrieve values from Registration table...");
        PreparedStatement prepStatement = connection.prepareStatement(SQL);
        valuesList = new ArrayList<>();
        ResultSet resultSet = prepStatement.executeQuery();
        boolean found = false;
        while (resultSet.next() == true) {
            allValues = new Values();
            allValues.setId(resultSet.getInt("id"));
            allValues.setOrderNo(resultSet.getString("orderNo"));
            allValues.setProductName(resultSet.getString("productName"));
            allValues.setPrice(resultSet.getBigDecimal("price"));
            allValues.setQty(resultSet.getInt("qty"));
            valuesList.add(allValues);
            found = true;
        }
        resultSet.close();
        prepStatement.close();
        close(connection);
        if (found) {
            return valuesList;
        } else {
            return null;
        }
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
        System.out.println("Error in getUsers()-->" + e.getMessage());
    }
    return (null);
}

public List<Values> getInformation() {
    return getUsers();
}

这是我的显示页面:

 <h:dataTable value="#{user.information}" var="x" border="1">
    <h:column>
     <f:facet name="header">
      <h:outputText value="Id"></h:outputText>
     </f:facet>
     <h:outputText value="#{x.id}"></h:outputText>
   </h:column>
   <h:column>
     <f:facet name="header">
      <h:outputText value="Order No"></h:outputText>
     </f:facet>
     <h:inputText value="#{x.orderNo}" rendered="#{x.editable}"></h:inputText>
     <h:outputText value="#{x.orderNo}" rendered="#{not x.editable}"></h:outputText>
   </h:column>
   <h:column>
     <f:facet name="header">
      <h:outputText value="Product name"></h:outputText>
     </f:facet>
     <h:inputText value="#{x.productName}" rendered="#{x.editable}"></h:inputText>
     <h:outputText value="#{x.productName}" rendered="#{not x.editable}"></h:outputText>
   </h:column>
   <h:column>
     <f:facet name="header">
      <h:outputText value="Price"></h:outputText>
     </f:facet>
     <h:inputText value="#{x.price}" rendered="#{x.editable}"></h:inputText>
     <h:outputText value="#{x.price}" rendered="#{not x.editable}"></h:outputText>
   </h:column>
   <h:column>
     <f:facet name="header">
      <h:outputText value="Quantity"></h:outputText>
     </f:facet>
     <h:inputText value="#{x.qty}" rendered="#{x.editable}"></h:inputText>
     <h:outputText value="#{x.qty}" rendered="#{not x.editable}"></h:outputText>
   </h:column>
 </h:dataTable>
 <h:commandButton value="AddNew" action="#{user.add}"></h:commandButton>

1 个答案:

答案 0 :(得分:0)

如果你想在列表中添加第一个方法之类的其他值,那么你可以这样做:

//myList = new ArrayList<>(); you dont need to use this, this can empty your list

myList = getUsers();//get your List
Values newValue = new Values(this.id, this.orderNo, this.productName, this.price, this.qty);

//add a new element to your list
newValue.setEditable(true);
myList.add(newValue);

<强> N.B

您的 xhtml

出现问题
<h:commandButton value="AddNew" action="#{user.add}"></h:commandButton>

因此,如果您尝试拨打addNewUser(),那么这不适合您。

<强>解决方案

这可以调用您的方法addNewUser()

<h:commandButton value="AddNew" action="#{user.addNewUser}"></h:commandButton>

之后:

您应该更新您的dataTable

<h:commandButton value="AddNew" action="#{user.addNewUser}" update="idOfYourDataTable"/>

不要忘记在您的dataTable中添加ID:

<h:dataTable value="#{user.information}" var="x" border="1" id="idOfYourDataTable">

...

另一件事:

<h:dataTable value="#{user.information}"

确保List<Values> information中有managedBean,因为您输入的代码没有列表信息。

希望这可以帮到你。