从Java中的mysql数据库表中检索数据

时间:2013-04-11 08:44:21

标签: java mysql jdbc xhtml arraylist

我在从数据库中检索数据时遇到问题。 我有一个功能

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;  
import java.sql.SQLException;
import java.sql.Statement;

public class DataAccess {
private Connection conn;
private User user = new User();

public DataAccess(){
    connect();
}

public boolean connect() {
    boolean success = true;

    String driverName ="com.mysql.jdbc.Driver";
    String conURL = "jdbc:mysql://localhost:3306/final_project";
    String user = "root";
    String pass = "1009";

    try {
        Class.forName(driverName).newInstance();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        System.err.println(e.getMessage() + "------Cannot Load Driver");
        success = false;
    }

    try {
        conn = DriverManager.getConnection(conURL, user, pass);
    } catch (SQLException e) {
        System.err.println(e.getMessage() + "--SQL States: " + e.getSQLState() + "---- ErrorCode: " + e.getErrorCode());
        success = false;
    }
    return success;
}

public void insertBooks (Books books)
{
    try {           
        PreparedStatement stmt = conn.prepareStatement("insert into Books (Title, Author, ISBN, Total) VALUES (?, ?, ?, ?);");
        stmt.setString(1, books.getTitle());
        stmt.setString(2, books.getAuthor());
        stmt.setInt(3, books.getISBN());
        stmt.setDouble(4, books.getPrice());

        stmt.executeUpdate();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void selectBooks () {
    try {
        Statement stm = conn.createStatement();
        ResultSet rs = stm.executeQuery("SELECT * FROM books");
        while (rs.next()) {
            Books books = new Books();

            books.setTitle(rs.getString(1));
            books.setAuthor(rs.getString(2));
            books.setISBN(rs.getInt(3));
            books.setPrice(rs.getDouble(4));

            user.add(books);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}

从表格中选择并获取并设置每个字段作为标题,作者,isbn和价格,然后将其添加到用户类中的bookList对象。 当我使用函数

public ArrayList<Books> getBookList() {
    return bookList;
}

什么都没有。

用户类:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import java.util.ArrayList;

@ManagedBean(name = "user")
@SessionScoped
public class User {
private String firstName;
private String lastName;
private ArrayList<Books> bookList = new ArrayList<Books>();
private ArrayList<Books> shopBookList = new ArrayList<Books>();
private double total;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public ArrayList<Books> getBookList() {
    return bookList;
}

public void setBookList(ArrayList<Books> bookList) {
    this.bookList = bookList;
}

public double getTotal() {
    for (Books bk : bookList) {
        total += bk.getPrice();
    }
    return total;
}

public void setTotal(double total) {
    this.total = total;
}

public ArrayList<Books> getShopBookList() {
    return shopBookList;
}

public void setShopBookList(ArrayList<Books> shopBookList) {
    this.shopBookList = shopBookList;
}

public String add(Books books) {
    bookList.add(books);
    DataAccess da = new DataAccess();
    da.insertBooks(books);
    return "Added";
}

public String searchBooks() {
    DataAccess da = new DataAccess();
    da.selectBooks();
    return "books";
}

public String shop(Books books) {
    shopBookList.add(books);
    return null;
}

public String start() {
    bookList = new ArrayList<Books>();
    firstName = "";
    lastName = "";
    total = 0;
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
    return "index";
}

}

图书课程:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "books")
@SessionScoped

public class Books {
private String title;
private String author;
private int ISBN;
private double price;

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}

public int getISBN() {
    return ISBN;
}

public void setISBN(int iSBN) {
    ISBN = iSBN;
}

public double getPrice() {
    return price;
}

public void setPrice(double total) {
    this.price = total;
}

}

应该从user.booklist中获取数据的页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">

<h:body>
<h:form>
    <h1>Books Page</h1>
    <hr />
    <label>The following books are available:</label><br />
    <h:dataTable value="#{user.bookList}" var="bk" border="1">
        <h:column>
            <f:facet name="header">ISBN</f:facet>
            <h:outputText value="#{bk.ISBN}" />
        </h:column>
        <h:column>
            <f:facet name="header">Title</f:facet>
            <h:outputText value="#{bk.title}" />
        </h:column>
        <h:column>
            <f:facet name="header">Author</f:facet>
            <h:outputText value="#{bk.author}" />
        </h:column>
        <h:column>
            <f:facet name="header">Price</f:facet>
            <h:outputText value="#{bk.price}" />
        </h:column>
        <h:column>
            <f:facet name="header">Add</f:facet>
            <h:commandLink value="Add" action="#{user.shop(bk)}" />
        </h:column>
    </h:dataTable>
    <h:commandButton value="Home" action="index" />
    <h:commandButton value="Checkout" action="checkout" />
</h:form>
</h:body>
</html>

3 个答案:

答案 0 :(得分:1)

我发现了问题所在。我忘了提到我使用的是jsf技术,还使用会话来存储对象和值。每次我尝试使用selectbooks方法时,它都会创建一个新用户而不是使用当前会话用户。因此,它总是会生成一个新用户并为当前会话用户提供空值。

答案 1 :(得分:0)

如Abi所述,您添加到错误的列表中。 以更一般的方式,您应该使用OpenJPA,它更容易管理持久性。

答案 2 :(得分:0)

public User selectBooks () {
    try {

        User userObject=new User();

        //ArrayList<Books> bookList=new ArrayList<Books>();

        Statement stm = conn.createStatement();
        ResultSet rs = stm.executeQuery("SELECT * FROM books");
        while (rs.next()) {
            Books books = new Books();

            books.setTitle(rs.getString(1));
            books.setAuthor(rs.getString(2));
            books.setISBN(rs.getInt(3));
            books.setPrice(rs.getDouble(4));

            user.getBookList().add(books);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return userObject;
}