java - 需要帮助来创建数据库 (Java)

标签 java database arraylist

正如标题所示,我需要帮助来创建数据库。什么样的数据库数据库并不重要,我只需要它能够工作!

该程序是一个“音乐列表”,您可以添加歌曲、删除歌曲和编辑歌曲。

我已经编程了大约一个月,所以如果您也能解释数据库方法如何工作等,而不是仅仅给我答案,我将不胜感激:-)。

数据库需要存储3个ArrayList的数据。 3 个数组列表都存储字符串,我使用 JList(模型)的索引连接数组列表。

我需要的功能是:

  • 将 3 个数组列表存储到数据库中。可能是数组列表与索引连接的问题,例如歌曲(索引1),艺术家(索引1)需要存储在一起。
  • 我需要能够从数据库中的特定索引处删除。
  • 我需要能够在数据库的特定索引处进行编辑。我需要能够从单独的数组列表中调用内容,例如:从歌曲(索引 5)获取内容,因此将所有 3 个数组列表添加到 1 个字符串不是一个选项。

我不确定使用 3 个数组列表来存储数据是个好主意,所以如果有更好的替代方案,我很高兴知道:-)

当我从数据库调用数据时,数据应该调用到方法addString()。此方法需要 3 个字符串,并将它们添加到同一索引。所以我猜数据库不应该包含任何类型的索引。

“edit”方法位于editSong();中,“remove”方法位于ite.addActionListener中。

第3个数组是:fl,包含歌曲名称; art,其中包含艺术家姓名;youurl,其中包含 youtube url。

代码如下:

公共(public)类 MusicList 扩展 JFrame{

public JTextField af;
private JList jl;
private JButton add;
private JButton edit;
private JButton test;
private JPanel jp;
private JScrollPane sp;
private JTextField artist;
private JButton save;
private JButton listb;
private JPopupMenu jpo;
private JMenuItem ite;
private JButton editsave;
private JButton editlist;
private JTextField youtube;
private JLabel ytl;
private JLabel arti;
private JLabel songg;
int g;
//creates a DefaultListModel.. actions at the JList can be made through here. e.g if adding to jlist is m.addElement();
DefaultListModel<String> m = new DefaultListModel<String>();
//creates arraylists
List<String> fl = new ArrayList<String>();
List<String> art = new ArrayList<String>();
List<String> youurl = new ArrayList<String>();

public MusicList(){
    super("Musiclist - Alpha");
    setLayout(null);

    jl = new JList(m);
    add(jl);
    //creates a scrollpane, "implements jlist"
    sp = new JScrollPane(jl);
    sp.setBounds(30,30,195,200);
    add(sp);
    //creates the textfield to contain songname
    af = new JTextField(12);
    String afs = af.getText();
    af.setBounds(20,30,210,20);
    add(af);
    af.setVisible(false);
    //opens the add menu
    add = new JButton("add song");
    add.setBounds(20,250,100,20);
    add(add);
    //opens the edit menu
    edit = new JButton("edit song");
    edit.setBounds(135,250,100,20);
    add(edit);
    //this button checks if art and fl(arraylists) match to the index.
    test = new JButton("test");
    test.setBounds(300, 40, 80, 20);
    add(test);
    //the textfield which will pass the artist string.. used in add and edit
    artist = new JTextField();
    artist.setBounds(20,70,210,20);
    add(artist);
    artist.setVisible(false);
    //adds back button in "add" menu
    listb = new JButton("back");
    listb.setBounds(135,250,100,20);
    add(listb);
    listb.setVisible(false);
    //adds save button on "add" menu
    save = new JButton("save");
    save.setBounds(20,250,100,20);
    add(save);
    save.setVisible(false);
    //adds the back button on "edit" menu
    editlist = new JButton("back");
    editlist.setBounds(135, 250, 100, 20);
    add(editlist);
    editlist.setVisible(false);
    //adds the save button on "edit" menu
    editsave = new JButton ("save");
    editsave.setBounds(20,250,100,20);
    add(editsave);
    editsave.setVisible(false);
    //adds the youtube textfield
    youtube = new JTextField();
    youtube.setBounds(20,110,120,20);
    add(youtube);
    youtube.setVisible(false);
    //adds jlabel
    ytl = new JLabel("https://www.youtube.com/watch");
    ytl.setBounds(20,90,200,20);
    add(ytl);
    ytl.setVisible(false);

    arti = new JLabel("Artist");
    arti.setBounds(20,50,170,20);
    add(arti);
    arti.setVisible(false);

    songg = new JLabel("Song");
    songg.setBounds(20,10,170,20);
    add(songg);
    songg.setVisible(false);
    //button to open the add window
    add.addActionListener(
            new ActionListener(){
            public void actionPerformed(ActionEvent event){

                jl.setVisible(false);
                sp.setVisible(false);
                add.setVisible(false);
                edit.setVisible(false);
                listb.setVisible(true);
                save.setVisible(true);
                af.setVisible(true);    
                artist.setVisible(true);
                youtube.setVisible(true);
                ytl.setVisible(true);
                songg.setVisible(true);
                arti.setVisible(true);
                af.requestFocus();
                }});


    edit.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent event){ 

                    System.out.println(jl.getSelectedIndex());
                    //checks if theres an selected index.. unselected index = -1.
                    if(jl.getSelectedIndex()<0){
                        JOptionPane.showMessageDialog(null, "Please select a song to edit");
                    }else{
                    //open edit window
                    jl.setVisible(false);
                    sp.setVisible(false);
                    add.setVisible(false);
                    edit.setVisible(false);
                    editlist.setVisible(true);
                    editsave.setVisible(true);
                    af.setVisible(true);    
                    artist.setVisible(true);
                    youtube.setVisible(true);
                    ytl.setVisible(true);
                    songg.setVisible(true);
                    arti.setVisible(true);
                    //takes selected index, and set text of textfield af and artists to selected index.
                    final int i = jl.getSelectedIndex();
                    if(i>=0){
                    System.out.println(i);
                    af.setText(fl.get(i));
                    artist.setText(art.get(i));
                    youtube.setText(youurl.get(i));
                    }}}});
    //test button.. checks if index + song + artist match.
    test.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent event){

                    final int i = jl.getSelectedIndex();
                    if(i>=0){
                        //String j = (m.getElementAt(i));
                        //System.out.println(j);
                        System.out.println(fl.get(i));
                        System.out.println(art.get(i));
                        System.out.println(youurl.get(i));
                        }}});



    jl.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
           //adds a actionlistener to Jlist
            JList jl = (JList)evt.getSource();
            //if double click---
            if (evt.getClickCount() == 2) {
                int index = jl.locationToIndex(evt.getPoint());
                String url = ("https://www.youtube.com/watch"+youurl.get(index));

                if(Desktop.isDesktopSupported()){
                    Desktop desktop = Desktop.getDesktop();
                    try {
                        desktop.browse(new URI(url));
                    } catch (IOException | URISyntaxException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else{
                    Runtime runtime = Runtime.getRuntime();
                    try {
                        runtime.exec("xdg-open " + url);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

            } else if (evt.getClickCount() == 3) {   // Triple-click
                int index = jl.locationToIndex(evt.getPoint());
                }}});
    //listb is the "back to list" button.
    listb.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent event){
                //if u are at add window, listb will take u back to the list of songs.
                    jl.setVisible(true);
                    sp.setVisible(true);
                    add.setVisible(true);
                    edit.setVisible(true);
                    listb.setVisible(false);
                    save.setVisible(false);
                    af.setVisible(false);
                    artist.setVisible(false);
                    youtube.setVisible(false);
                    ytl.setVisible(false);
                    songg.setVisible(false);
                    arti.setVisible(false);
                }});

    save.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent event){
                    //takes the afart, and save it to the JList(first passed to addString)
                    String getart = artist.getText();
                    String getaf = af.getText();
                    String afart = (getaf+" - "+getart);
                    String yt = youtube.getText();
                    //pass afart to addString method
                    addString(getaf,getart,yt);
                    af.setText(null);
                    youtube.setText(null);
                    jl.requestFocus();
                    artist.setText(null);
                    //set the window back to "list of songs"
                    jl.setVisible(true);
                    sp.setVisible(true);
                    add.setVisible(true);
                    edit.setVisible(true);
                    listb.setVisible(false);
                    save.setVisible(false);
                    af.setVisible(false);
                    artist.setVisible(false);
                    youtube.setVisible(false);
                    ytl.setVisible(false);
                    songg.setVisible(false);
                    arti.setVisible(false);
                    }});
    //adds another mouselistener to jl
    jl.addMouseListener(
            new MouseAdapter(){

                public void mousePressed(MouseEvent e)  {check(e);}
                public void mouseReleased(MouseEvent e) {check(e);}
                //mouse event right click
                public void check(MouseEvent e) {
                    if (e.isPopupTrigger()) { //if the event shows the menu
                        jl.setSelectedIndex(jl.locationToIndex(e.getPoint())); //select the item
                        //creates a popupmenu.
                          JPopupMenu jpo = new JPopupMenu();
                            //creates a item that links to popupmenu.. JMenuItem works like a button
                          //this JMenuItem is a remove button
                          JMenuItem ite = new JMenuItem("remove");
                            jpo.add(ite);
                            jpo.show(jl, e.getX(), e.getY()); //and show the menu  
       //JMenuItem actionListener.         
      ite.addActionListener(
              new ActionListener(){
                  public void actionPerformed(ActionEvent e){
                     //takes selectedIndex, and remove it from the two arraylist, + the Modellist(jlist)
                      final int i = jl.getSelectedIndex();
                        if(i>=0){
                            m.removeElementAt(i);
                            fl.remove(i);
                            art.remove(i);
                            youurl.remove(i);
                        }}});}}});
//ActionListener for the back button in the edit menu
    editlist.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    jl.setVisible(true);
                    sp.setVisible(true);
                    add.setVisible(true);
                    edit.setVisible(true);
                    editlist.setVisible(false);
                    editsave.setVisible(false);
                    youtube.setVisible(false);
                    ytl.setVisible(false);
                    af.setVisible(false);
                    artist.setVisible(false);
                    songg.setVisible(false);
                    arti.setVisible(false);
                    youtube.setText(null);
                    af.setText(null);
                    artist.setText(null);
                }});
    //ActionListener for the save buttin in the edit menu
    editsave.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    //takes 2 string, and the int from getSelected index, and pass it to editSong(); method.
                    String aff = af.getText();
                    String artt = artist.getText();
                    String yte = youtube.getText();
                    final int f = jl.getSelectedIndex();
                    //System.out.println(f);
                    editSong(f,aff,artt,yte);
                    //close the edit window
                    jl.setVisible(true);
                    sp.setVisible(true);
                    add.setVisible(true);
                    edit.setVisible(true);
                    editlist.setVisible(false);
                    editsave.setVisible(false);
                    youtube.setVisible(false);
                    ytl.setVisible(false);
                    af.setVisible(false);
                    artist.setVisible(false);
                    songg.setVisible(false);
                    arti.setVisible(false);
                    youtube.setText(null);
                    af.setText(null);
                    artist.setText(null);
                }});

}   
//addString method adds new string to JList, and put them at the next avaiable index.
public void addString(String o, String l, String yt){
    //adds the songname and artistname to the arratlist.
    fl.add(o);
    art.add(l);
    youurl.add(yt);
    String p = (o+" - "+l);
    //adds the artists+songname to the jlist.
    m.addElement(p.toString()); 
}
public void editSong(int i, String song, String artt,String yte){
    String s = song;
    String a = artt;
    String sa = (s+" - "+a);
    //fl.add(i,null);
    //remove object at the indexnumber "i"(current index selected) from arraylists.
    fl.remove(i);
    art.remove(i);
    youurl.remove(i);
    //adds the new string passed in from "editsave", and put them to selectedIndex..
    fl.add(i,s);
    art.add(i,a);
    youurl.add(i,yte);
    //remove old JList element, and put in the new.
    m.removeElementAt(i);
    m.add(i,sa);
    }

}

最佳答案

我建议您再花一个月的时间来了解什么是 MVC 以及 EventBus 的工作原理。有很多关于这方面的教程。 您还应该再花一个月的时间来真正关心数据库的工作原理以及它们的主要区别是什么,因为它将改变您编写所有其他部分的方式。

要回答您的问题,您不应该以相同的方法修改 View 、模型,然后将内容保存到数据库中。如果您仍然想这样做,最好的方法是使用 JDO 数据库,例如 http://db.apache.org/jdo/或 Google App Engine。

但是这里无法回答执行此操作的方法,这可能是一项过于复杂的任务。

关于java - 需要帮助来创建数据库 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21204266/

相关文章:

Java Tensorflow + Keras 等价于 model.predict()

java - 使用 Guava 的 Tables.toTable

database - 时间戳如何导致 "global deadlock"?

java - 从 EditText 添加到 ArrayList

arrays - 如何从PowerShell中的数组中删除项目?

java - 如何使用泰坦 API?

java - 列出 map 中的值

database - 表修订/历史记录?

sql-server - 在 SQL Server 数据库上分散负载

java - 如何将分号附加到 ArrayList<String> 中的每个元素