简体   繁体   English

通过JDBC在JList中获取数据-缺少链接

[英]Getting Data in JList via JDBC - The missing link

I've been stuck at a seemingly simple problem for hours and I just can't find the solution. 我一直被一个看似简单的问题困扰了好几个小时,而我却找不到解决方案。 I'm trying to implement a very simple Forum in Java and I'm trying to load the entrys at the moment. 我正在尝试用Java实现一个非常简单的Forum,并且现在正在尝试加载条目。

My forum is a JList that is filled with JPanels and that accepts entries via the JLists DefaultListModel and the addMessage method. 我的论坛是一个JList,其中填充了JPanels,并通过JLists DefaultListModeladdMessage方法接受条目。 So if I add an entry without the database it looks like this: 因此,如果我添加一个没有数据库的条目,它看起来像这样:

MessageList m = new MessageList(); 

m.addMessage("NAME AUTOR", "<html><body style='width: 675px;'>Lorem ipsum dolor sit amet.", "22.01.13", "SOA");

The messageList class looks like this: messageList类如下所示:

public class MessageList extends JList{

DefaultListModel messageModel = new DefaultListModel();

  MessageRenderer messageRenderer = new MessageRenderer();

     public MessageList( ){
        this.setCellRenderer(messageRenderer);
        this.setModel(messageModel);

     }

     public void addMessage(String author, String text, String date, String tag){
         messageModel.addElement(new Message(author, text, date, tag));
     }

}

I've also written the Code for getting an ArrayList (called allBtr ) with the Message Objects (called ConBeitrag ) from the database: 我还编写了用于从数据库中获取带有消息对象(称为ConBeitrag )的ArrayList (称为allBtr )的代码:

ArrayList<ConBeitrag> allBtr = new ArrayList<ConBeitrag>();

ConBeitrag conBtr = new ConBeitrag();

try {
    allBtr = conBtr.getAllBtr();
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

The message objects look like this: 消息对象如下所示:

public class ConBeitrag {

    private int beitragid;
    private int projektid;
    private int mitarbeiterid;
    private String beitragText;
    private String erstellt_am;
    private String geaendert_am;
    private String schlagwort1;
    private String schlagwort2;

    private  MdBeitrag mdBtr = new MdBeitrag();

    public ConBeitrag (){

    }

    public ConBeitrag(int beitragid, int projektid, int mitarbeiterid, String beitragText, String erstellt_am, String geaendert_am){

        this.beitragid = beitragid;
        this.projektid = projektid;
        this.mitarbeiterid = mitarbeiterid;
        this.erstellt_am = erstellt_am;
        this.geaendert_am = geaendert_am;
        this.beitragText = beitragText;
        this.schlagwort1 = schlagwort1;
        this.schlagwort2 = schlagwort2;
    }

    public ArrayList<ConBeitrag> getAllBtr() throws SQLException{

        MdBtrInterface modInt;
        modInt = new MdBeitrag();

        ArrayList<ConBeitrag> AlBtr = modInt.getAllBtr();

        for(ConBeitrag object: AlBtr){
              System.out.println(object.beitragText);
        }

        return AlBtr;

    }
}

Now what would be the smartest way to get the ArrayList into a form that I can pass into the addMessage method? 现在,将ArrayList转换成可以传递给addMessage方法的形式的最聪明方法是什么? I've kind of approached this from the GUI end, then from the database end, and now I'm stuck in the middle. 我从GUI端开始,然后从数据库端开始,现在我陷入了中间。

Overwritten toString() method: 覆盖toString()方法:

@Override
public String toString() {
     return mitarbeiterid + beitragstext + erstellt_am + schlagwort1 + schlagwort2; 
}

"The messages are stored inside the ArrayList as Objects if that helps. So if I run "System.out.println(allBtr);" it gives me "[ConBeitrag@48f4104f, ConBeitrag@f5ad7f4, ConBeitrag@1517dc0c]" “如果有帮助的话,消息将作为对象存储在ArrayList中。因此,如果我运行“ System.out.println(allBtr);”,它将给我“ [ConBeitrag @ 48f4104f,ConBeitrag @ f5ad7f4,ConBeitrag @ 1517dc0c]”

You need to override the toString method in your ConGeitrag class. 您需要在ConGeitrag类中重写toString方法。 Something like this. 这样的事情。

    public class ConBeitrag {      
         ...

         @Override
         public String toString(){
              return author + ", " + text + ", " + date + ", " + tag; 
         }
    }

You can make the return any format you want. 您可以return任何格式。 Test this one out and make changes as desired to the format. 对此进行测试,并根据需要对格式进行更改。

Try this out as a Helper method (after you've overridden the toString) 尝试将其作为Helper方法(覆盖toString之后)

    public JList createJList(ResultSet rs){

        DefaultListModel model = new DefaultListModel();

        while (rs.next()){
            String author = rs.getString("author");   // Just an example. You may
            String text = rs.getString("text");       // need to retrieve your
            String date = rs.getString("date");       // data differently
            String tag = rs.getString("tag");

            Message message = new Message(author, text, date, tag);
            model.addElement(message);
        }

        JList list = new JList(model);

        return list; 
    }

I don't really see a need for a Custom JList for this situation. 对于这种情况,我真的没有看到需要Custom JList的需求。

Test run: output : 3testtestnullnull . 测试运行:输出: 3testtestnullnull Besides the formatting, it works fine 除了格式化,它还可以正常工作

public class ConBeitragTest {

    public static void main(String[] args) {
        ConBeitrag con = new ConBeitrag(1, 2, 3, "test", "test", "test");
        System.out.println(con);
    }
}

class ConBeitrag {

    private int beitragid;
    private int projektid;
    private int mitarbeiterid;
    private String beitragText;
    private String erstellt_am;
    private String geaendert_am;
    private String schlagwort1;
    private String schlagwort2;

    public ConBeitrag() {

    }

    public ConBeitrag(int beitragid, int projektid, int mitarbeiterid, String beitragText, String erstellt_am, String geaendert_am) {

        this.beitragid = beitragid;
        this.projektid = projektid;
        this.mitarbeiterid = mitarbeiterid;
        this.erstellt_am = erstellt_am;
        this.geaendert_am = geaendert_am;
        this.beitragText = beitragText;
        this.schlagwort1 = schlagwort1;         // This is null
        this.schlagwort2 = schlagwort2;         // This is null
    }

    @Override
    public String toString() {
        return mitarbeiterid + beitragText + erstellt_am + schlagwort1 + schlagwort2;
    }

}

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

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