2012-06-25 31 views
0

我有以下方法: 化妝連接連接錯誤的JTextField(代碼添加)

  try { 
       kc = ArchiveConnectionHandler.makeMSSQLConnection(
         MSSQLDriver, 
         MSSQLconnString, 
         guiValues.get(1), 
         guiValues.get(2), 
         guiValues.get(3), 
         guiValues.get(4)); 

       JOptionPane.showMessageDialog(new JFrame("succes"); 

       kc.close(); 

      } catch (ClassNotFoundException e1) { 
       e1.printStackTrace(); 
      } catch (SQLException e1) { 
       e1.printStackTrace(); 
       JOptionPane.showMessageDialog(new JFrame("error"), 
         "Error"); 
      } 

連接方法

public static java.sql.Connection makeMSSQLArchConnection(String driver, String connectionString, String user, String pass, String ipaddress, String port) 
     throws ClassNotFoundException, SQLException 
{ 
    if(MSArchiveConnection == null) 
    { 
     Class.forName(driver); 
     MSArchiveConnection = DriverManager.getConnection(connectionString + "://" + ipaddress + ":" + port, user, pass); 
     if(MSArchiveConnection != null) 
     { 
      System.out.println("MSArchiveConnection!"); 
     } 
    } 
    return MSArchiveConnection; 
} 

用於發送GUI的方法值

public List<String> getGuiValues(){ 

    List<String> values = new ArrayList<String>(); 
    values.add(btngrp.getSelection().getActionCommand()); 
    values.add(kanaUsernameTf.getText()); 
    values.add(kanaPasswordTf.getText()); 
    values.add(kanaIpAdressTf.getText()); 
    values.add(KanaPortTf.getText()); 
    values.add(archiveUsernameTf.getText()); 
    values.add(archivePasswordTf.getText()); 
    values.add(archiveIpAdressTf.getText()); 
    values.add(archivePortTf.getText()); 
    values.add(archiveDbNameTf.getText()); 
    values.add(btngrp2.getSelection().getActionCommand()); 
    values.add(archiveDateTf.getText()); 
    values.add(sessionAmountTf.getText()); 
    values.add(xmlLocation.getText()); 
    values.add(oldAttachtmentLoc.getText()); 
    values.add(newAttachmentLoc.getText()); 

    return values; 
} 

我有一個方法在刪除列表中用戶輸入的GUI類中。 此列表用於與MSSQL數據庫建立連接。 該連接使用靜態方法進行。

這是我的問題,當我點擊按鈕的連接不重製。所以當我清空所有的字段並想重新測試連接時,測試仍然是成功的。誰可以給我解釋一下這個。

編輯

package com.kahuna.jkram.userinterface; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.sql.Connection; 
import java.sql.SQLException; 
import java.util.List; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

import com.kahuna.jkram.utils.ArchiveConnectionHandler; 

public class ButtonHandler implements ActionListener { 

    private ArchiveUserInterface ui; 

    public ButtonHandler(ArchiveUserInterface ui){ 

     this.ui = ui; 

     for(JButton button : ui.getButtons()) 
     { 
      button.addActionListener(this); 
     } 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     String MSSQLDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
     List<String> guiValues = ui.getGuiValues(); 
     String MSSQLconnString = "jdbc:sqlserver"; 
     String action = e.getActionCommand(); 

     Connection kc = null; 

     if(action.equals("kanaTest")) 
     { 
      if(guiValues.get(0).equals("MSSQL")) 
      { 

       try { 
        kc = ArchiveConnectionHandler.makeMSSQLConnection(
          MSSQLDriver, 
          MSSQLconnString, 
          guiValues.get(1), 
          guiValues.get(2), 
          guiValues.get(3), 
          guiValues.get(4)); 

         JOptionPane.showMessageDialog(new JFrame("Database connectie test."), 
          "De databaseverbinding is succesvol getest."); 

        kc.close(); 


       } catch (ClassNotFoundException e1) { 
        e1.printStackTrace(); 
       } catch (SQLException e1) { 
        e1.printStackTrace(); 
        JOptionPane.showMessageDialog(new JFrame("SQL Fout"), 
          "Er is een databasefout opgetreden, controleer de verbinding"); 
       } 
      } 
     } 
     else if(action.equals("archiveTest")) 
     { 
      try { 
       Connection ac = ArchiveConnectionHandler.makeMSSQLArchConnection(
         MSSQLDriver, 
         MSSQLconnString, 
         guiValues.get(5), 
         guiValues.get(6), 
         guiValues.get(7), 
         guiValues.get(8)); 

       JOptionPane.showMessageDialog(new JFrame("Database connectie test."), 
         "De databaseverbinding is succesvol getest."); 
       ac.close(); 
       System.out.println(ac.isClosed()); 

      } catch (ClassNotFoundException e1) { 
       e1.printStackTrace(); 
      } catch (SQLException e1) { 
       e1.printStackTrace(); 
       JOptionPane.showMessageDialog(new JFrame("SQL Fout"), 
         "Er is een databasefout opgetreden, controleer de verbinding"); 
      } 
     } 
     else if(action.equals("saveSettings")) 
     { 
      System.out.println("Save Settings"); 
     } 
    } 
} 
+0

是第一次連接嗎?如果是這樣,你怎麼知道連接沒有重新映射? – Chan

+0

每次我點擊按鈕,我用輸入的值重新測試連接。每次我調用靜態方法進行連接時,該方法都將打印MSArchiveConnection。但是,當我第一次點擊按鈕時,這條消息就會消失。之後,我看不到消息。 – TrashCan

+0

你不保留靜態引用嗎?你能發佈完整的代碼嗎? – Chan

回答

0

我解決了問題,感謝我指出了正確的方向。 我將方法從靜態更改爲非靜態。