gpt4 book ai didi

java - DAO 加载数据

转载 作者:行者123 更新时间:2023-11-29 05:16:00 25 4
gpt4 key购买 nike

我正在尝试使用 DAO 从 MySQL 数据库访问数据。我想输出数据到数组,但我有 java.lang.NullPointerException。请帮我解决这个问题。

PlayersWindow.java

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
PlayersWindow window = new PlayersWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public PlayersWindow() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
initialize();
}
private void initialize() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {

IDAO dao = DAOFactory.getDAOInstance(TypeDAO.MySQL);
Player mas[] = dao.loadPlayers(); //HERE IT GIVES NULLPOINTEREXCEPTION

Object[] headers = { "id", "name", "playing pos", "height", "weight", "nationality", "date birth" };

model = new DefaultTableModel(headers, 0);
model.addRow(mas);
playersTable = new JTable(model);
}

MeSQLDAO.java

public class MySQLDAO implements IDAO{

private static String GET_PLAYERS = "SELECT * FROM fbdb.Players";
Connection con = null;
public MySQLDAO() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost/fbdb";
con = DriverManager.getConnection(url,"root","root");
}

public Player[] loadPlayers() throws SQLException{

Player [] mas = null;
PreparedStatement st = con.prepareStatement(GET_PLAYERS);
ResultSet rs = st.executeQuery();
rs.last();
mas = new Player[rs.getRow()];
rs.first();
int i =0;
while (rs.next()){
mas[i] = new Player (rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4),
rs.getInt(5), rs.getString(6), rs.getDate(7));

i++;
}
return mas;
}
}

DAOFactory.java

public class DAOFactory {
private static IDAO dao = null;
public static IDAO getDAOInstance(TypeDAO type){
if(type == TypeDAO.MySQL){
if(dao == null){
dao = new MySQLDAO();
}
else return dao;
}
return null;
}
}

IDAO.java

public interface IDAO {

Player[] loadPlayers() throws SQLException;
public boolean savePlayer(Player p) throws SQLException;
public boolean deletePlayer(Player p) throws SQLException;
Player editPlayer(Player p) throws SQLException;
}

TypeDAO.java

 public enum TypeDAO {
MySQL;
}

异常(exception)情况:

java.lang.NullPointerException
at fbApp.PlayersWindow.initialize(PlayersWindow.java:119)
at fbApp.PlayersWindow.<init>(PlayersWindow.java:91)
at fbApp.PlayersWindow$1.run(PlayersWindow.java:70)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

最佳答案

问题是您总是在 DaoFactory 中返回 null。以下是修复方法:

public class DAOFactory {
private static IDAO dao = null;
public static IDAO getDAOInstance(TypeDAO type){
if(type == TypeDAO.MySQL){
if(dao == null){
dao = new MySQLDAO();
}
}
return dao;
}
}

编辑:这是一个更紧凑的形式:

public class DAOFactory {
private static IDAO dao = null;
public static IDAO getDAOInstance(TypeDAO type){
if((type == TypeDAO.MySQL)&&(dao == null))dao = new MySQLDAO();
return dao;
}
}

关于java - DAO 加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32868314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com