Java添加额外传递的变量

Java添加额外传递的变量,java,mysql,jdbc,irc,bots,Java,Mysql,Jdbc,Irc,Bots,首先,我应该提到我对Java非常陌生 我使用PircBot和JDBC来创建一个irc机器人,它返回一些MySQL值。我遇到的问题是,我想制作准备好的语句来防止SQL注入。然而,因为我不能向我的方法中添加额外的变量,我似乎无法使它工作 这是我目前的代码: 基本上,我希望使用准备好的SQL语句,但我不能将连接conn传递到onMessage方法中,而不将其弄乱(onMessage不会在IRC上触发)。这意味着每次有if语句时,我都必须创建一个新的连接,而不是现在MySQL方法的工作方式 我相信有一种

首先,我应该提到我对Java非常陌生

我使用PircBot和JDBC来创建一个irc机器人,它返回一些MySQL值。我遇到的问题是,我想制作准备好的语句来防止SQL注入。然而,因为我不能向我的方法中添加额外的变量,我似乎无法使它工作

这是我目前的代码:

基本上,我希望使用准备好的SQL语句,但我不能将连接conn传递到onMessage方法中,而不将其弄乱(onMessage不会在IRC上触发)。这意味着每次有if语句时,我都必须创建一个新的连接,而不是现在MySQL方法的工作方式


我相信有一种更简单/更干净的方法可以做到这一点,但我似乎无法找到它。感谢您的帮助,谢谢

使用成员变量存储连接,并在构造Ross对象时构造连接:

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...

现在,您可以在类的其他方法中使用成员变量conn。

在我看来,每次调用mysql方法时,您都会得到一个连接。从你的代码中我不明白为什么它会在一种方法而不是另一种方法中触发。你是在试图避免连接代码的副本吗?为了避免在每次调用时重新创建连接,请使用连接池。那么,我应该为调用MySQL方法添加的第二个参数是什么?我添加了该代码,以便它获取连接信息,但现在我需要将两个变量传递到MySQL,因为这样做:公共字符串MySQL(String语句,connection conn)抛出SQLException,ClassNotFoundException{我应该在String result=MySQL(语句)中添加什么??我尝试了String result=MySQL(语句,null);但这似乎不起作用。'String result=MySQL(statement,conn)“conn变量是类的成员变量,在所有成员方法中都可用,并存储构造函数中实例化的连接。您可能应该阅读更多关于面向对象编程的内容……对,但我不能实际添加conn,因为它没有传递到方法头onMessage中。传入时,onMessage mmethod似乎不起作用(它不回复IRC上的任何消息)。onMessage方法的签名(返回类型和传入参数)由类扩展的类PircBot指定。您不能更改返回类型或参数。但是,conn是一个成员变量,您可以在任何(非静态)中使用它方法,因为它是类的成员,不需要在方法的参数中传递它,只需编写'String result=MySQL(statement,conn);'并且代码在调用构造函数'public Ross()时读取存储在'private Connection conn;'中的变量’。谢谢你的帮助和深入的解释。我真的很感谢你的帮助。原来我只是把私人连接的位置放错了;