繁体   English   中英

Java:我在从另一个类连接到数据库时遇到问题

[英]Java: I'm having an issue connecting to a database from another class

我正在制作一个简单的通讯录应用程序。 我有一个DatabaseUtility类,该类具有一种方法,connectToDatabase()负责从嵌入式数据库(Java DB)中提取信息并从中构造Contact对象。

然后将这些Contact对象放入ArrayList中,然后返回整个ArrayList。 是的,我知道这是糟糕的编程。 使用单独的方法来连接和构造对象更合乎逻辑,但这只是我正在练习的一个小项目,我想我可以接受,对吧?

无论如何,我还有一个ContactControl类,其中包含DatabaseUtility类的一个实例作为其字段之一,以及一个私有的ArrayArray of Contacts作为其字段之一。

我想要的是通过connectToDatabase()方法的返回值实例化ContactControl类中的ArrayList(正如我已经提到的,该方法返回一个ArrayList)。

但是,我一直在例外。 它没有连接到数据库。 当我运行放置在DatabaseUtility类中的main方法时,它会连接,但是当我从ContactControl类中运行main方法时,则会出现异常。

我的代码如下:

联系人类别:

package contactbook;

import java.io.IOException;
import java.io.ObjectStreamException;
import java.util.Date;

public class Contact {
    private int contactId;
    private String lastName;
    private String firstName;


    private String address;
    private String city;
    private String state;
    private String zip;
    private String picture;
    private String dob;

    public Contact()
    {
        contactId = 0;
        lastName =  "Doe";
        firstName = "John";
        dob = "01/01/1997";
        address = "123 ABC Dr.";
        city = "Pensacola";
        state = "FL";
        zip = "12345";
        picture = "default1.gif";
    }

    public Contact(int contactId, String lastName, String firstName, String address, String city, String state, String zip, String picture, String dob)
    {
        this.contactId = contactId;
        this.lastName = lastName;
        this.firstName = firstName;
        this.address = address;
        this.city = city; 
        this.state = state;
        this.zip = zip;
        this.picture = picture;
        this.dob = dob;
    }

    //setters
    public void setContactId(int contactId)
    {

    }

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

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

    public void setAddress(String address)
    {
        this.address = address;
    }

    public void setCity(String city)
    {
        this.city = city;
    }

    public void setState(String state)
    {
        this.state = state;
    }

    public void setZip(String zip)
    {
        this.zip = zip;
    }

    public void setPicture(String picture)
    {
        this.picture = picture;
    }

    public void setDob(String dob)
    {
        this.dob = dob;
    }

    //getters

    public int getContactId()
    {
        return contactId;
    }

    public String getLastName()
    {
        return lastName;
    }

    public String getFirstName()
    {
        return firstName;
    }

    public String getAddress()
    {
        return address;
    }

    public String getCity()
    {
        return city;
    }

    public String getState()
    {
        return state;
    }

    public String getZip()
    {
        return zip;
    }

    public String getPicture()
    {
        return picture;
    }

    public String getDob()
    {
        return dob;
    }

}

DatabaseUtility类:

package contactbook;



import java.io.IOException;

import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.DatabaseMetaData;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Properties;

public class DataBaseUtility {


public ArrayList<Contact> connectToDatabase() throws Exception { 
    ArrayList<Contact> contacts = new ArrayList<Contact>();
try
    {
      // Step 1: "Load" the JDBC driver
      Class.forName("org.apache.derby.jdbc.ClientDriver"); 

      // Step 2: Establish the connection to the database 
      String url = "jdbc:derby://localhost:1527/ContactBook"; 
      Connection conn = DriverManager.getConnection(url,"app","app");  
      System.out.println("Connected!");
      Statement stat = null;
      stat = conn.createStatement();
        ResultSet rs = stat.executeQuery("SELECT * FROM PERSON");
        int id = 1;
      while(rs.next())
      {

          Contact contact = new Contact();
          contact.setContactId(id);
          System.out.println(id);
          String lastName = rs.getString("lastName");
          System.out.println(lastName);
          contact.setLastName(lastName);
          String firstName = rs.getString("firstName");
          System.out.println(firstName);
          contact.setFirstName(firstName);
          String address = rs.getString("address");
          System.out.println(address);
          contact.setAddress(address);
          String city = rs.getString("city");
          System.out.println(city);
          contact.setCity(city);
          String state = rs.getString("state");
          System.out.println(state);
          contact.setState(state);
          String zip = rs.getString("zip");
          System.out.println(zip);
          contact.setZip(zip);
          String picture = rs.getString("picture");
          System.out.println(picture);
          contact.setPicture(picture);
          Date dob = rs.getDate("dob");
          System.out.println(dob);
          contact.setDob("" + dob);
          contacts.add(contact);
          System.out.println("");
          contacts.add(contact);
          id++;
      }
    }
    catch (Exception e)
    {
      System.err.println("D'oh! Got an exception!"); 
      System.err.println(e.getMessage()); 
    } 
      return contacts;
  } 

public static void main(String[] args)
{
    DataBaseUtility dbu = new DataBaseUtility();
    try
    {
        dbu.connectToDatabase();
    }
    catch(Exception e)
    {
        e.getMessage();
    }

}
} 

ContactControl类:

package contactbook;

import java.util.ArrayList;


public class ContactControl {
    private DataBaseUtility dbu;
    private ArrayList<Contact> contacts;

    public ArrayList<Contact> createContacts() throws Exception
    {
        try
        {
            contacts = dbu.connectToDatabase();
        }
        catch(Exception e)
        {
            System.out.println("Error!");
        }

        return contacts;
    }

    public Contact getContact(int id)
    {
        Contact tact = new Contact();
        for(Contact c : contacts)
        {
            if(id == c.getContactId())
            {
                tact = c;
            }
        }
            return tact;
    }

    public static void main(String[] args)
    {
        ContactControl cc = new ContactControl();
        ArrayList<Contact> tacts = new ArrayList<>();
        try
        {
            tacts = cc.createContacts();
        }
        catch(Exception e)
        {
            System.out.println("Uh oh! Problem!");
        }


    }

}

每当我运行ContactControl类的main方法时,都会出现“错误!”。 您在try-catch块中看到的消息。

我认为问题在于您在ContactControl类中调用了一个空对象。

contacts = dbu.connectToDatabase();

dbu未初始化,因此基本上为null,因此为NullPointerException。 由于您使用一些自定义消息来隐藏实际的异常消息,因此您不会看到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM