2012-01-20 64 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