首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DAO加载数据

DAO加载数据
EN

Stack Overflow用户
提问于 2015-09-30 14:09:43
回答 2查看 332关注 0票数 1

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

PlayersWindow.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
 public enum TypeDAO {
        MySQL;
    }

例外情况:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-30 14:24:13

问题是,您总是在DaoFactory中返回null。下面是如何修复它:

代码语言:javascript
复制
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;
}
}

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

代码语言:javascript
复制
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;
  }
}
票数 2
EN

Stack Overflow用户

发布于 2015-09-30 14:46:47

更改DAOFactory实现,如下所示:

代码语言:javascript
复制
public class DAOFactory {
    private static IDAO dao = null;
    public static IDAO getDAOInstance(TypeDAO type){
        if(type == TypeDAO.MySQL){
            if(dao == null){
               return dao = new MySQLDAO();
            }
            else return dao;    
        }
        return null;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32868314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档