DAO loading data
DAO loading data
我正在尝试使用 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.run(PlayersWindow.java:70)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.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;
}
}
更改您的 DAOFactory
实现,如下所示:
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;
}
}
我正在尝试使用 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.run(PlayersWindow.java:70)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.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;
}
}
更改您的 DAOFactory
实现,如下所示:
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;
}
}