【发布时间】:2015-09-30 14:09:43
【问题描述】:
我正在尝试使用 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;
}
例外:
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)
【问题讨论】:
-
您在哪里获得 NPE ?你能提供错误跟踪吗?
-
@AmitBhati 在
Window.initialize(),行Player mas[] = dao.loadPlayers();