2012-01-20 98 views
0

首先,我應該提到我對Java很新。Java添加額外的傳遞變量

我使用PircBot和JDBC來創建返回一些MySQL值的irc bot。我遇到的問題是我想做出預防性陳述來防止SQL注入。但是,因爲我無法在我的方法中添加額外的變量,所以似乎無法使其工作。

這是我的代碼,截至目前:http://pastebin.com/K8zCKt9f

基本上,我想用準備好的SQL語句,但我不能通過連接conn將進入onMessage方法沒有它搞亂(的onMessage不會在IRC觸發)。這意味着每次有if語句時,我都必須創建一個新的連接,而不是現在使用MySQL的方法。

我敢肯定有一個更簡單/更清潔的方式來做到這一點,但我似乎無法弄清楚。任何幫助表示讚賞,謝謝!

+0

它看起來像我每次調用mysql方法時都會獲得連接。我不明白你的代碼爲什麼它會觸發一種方法而不是另一種。你試圖避免連接代碼的副本是什麼? 爲避免在每次調用時重新創建連接,請使用連接池。 –

回答

1

使用一個成員變量來存儲連接,並且羅斯對象被創建時建立的連接:

public class Ross extends PircBot { 

    private Connection conn; 


    public Ross() { 

      this.setName("RICK_ROSS"); 
      this.setVersion("v1.0"); 
      this.setLogin("not_a_bot"); 
      if (!main.password.equals("")) this.sendMessage(main.loginbot, "auth "+main.username+" "+main.password); 

      //Set up MySQL-connection 
      Connection conn = null; 
      String url = "jdbc:mysql://"; 
      Class.forName ("com.mysql.jdbc.Driver"); 
      conn = DriverManager.getConnection (url,"",""); 
    } 
    ...The rest... 

現在你可以使用這個成員變量康恩在類的其他方法。

+0

然後,我應該爲調用MySQL方法添加什麼第二個參數?我已經添加了代碼,以便它獲取連接信息,但現在我需要兩個變量傳遞到MySQL,因爲這個:public String MySQL(String statement,Connection conn)throws SQLException,ClassNotFoundException {我應該添加什麼字符串結果= MySQL的(聲明);?我試過String result = MySQL(statement,null);但這似乎並不奏效。 – Ivan

+0

'String result = MySQL(statement,conn); 'conn-variable是類的成員變量,可用於所有成員方法,並存儲在構造函數中實例化的連接。你可能應該閱讀更多關於面向對象的編程...... – esaj

+0

沒錯,但我實際上不能添加conn,因爲它沒有傳入方法頭onMessage。當我將它傳入時,onMessage方法似乎不起作用(它不回覆IRC上的任何消息)。 – Ivan