【问题标题】:Java adding extra passed variablesJava添加额外的传递变量
【发布时间】:2012-02-15 09:46:07
【问题描述】:

首先,我应该提一下,我对 Java 还是很陌生。

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

这是我现在的代码:http://pastebin.com/K8zCKt9f

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

我确信有一种更简单/更清洁的方法可以做到这一点,但我似乎无法弄清楚。任何帮助表示赞赏,谢谢!

【问题讨论】:

  • 在我看来,每次调用 mysql 方法时您都会获得连接。我从您的代码中不明白为什么它会以一种方法而不是另一种方法触发。您是要避免复制连接代码吗?为避免在每次调用时重新创建连接,请使用连接池。

标签: java mysql jdbc irc bots


【解决方案1】:

使用成员变量来存储连接,在构建Ross-object时构造连接:

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,因此: public String MySQL (String statement, Connection conn) throws SQLException, ClassNotFoundException { What should I add in String result = MySQL(语句);?我试过 String result = MySQL(statement, null);但这似乎不起作用。
  • ' 字符串结果 = MySQL(statement, conn); ' conn 变量是类的成员变量,可在所有成员方法中使用,并存储在构造函数中实例化的连接。您可能应该阅读有关面向对象编程的更多信息...
  • 对,但是我实际上不能添加conn,因为它没有传递到方法head onMessage中。当我传入它时,onMessage 方法似乎不起作用(它不回复 IRC 上的任何消息)。
  • onMessage 方法的签名(返回类型和传入的参数)由您的类扩展的 PircBot 类决定。您不能更改返回类型或参数。但是同样,conn 是一个成员变量,你可以在 Ross 类内部的任何(非静态)方法中使用它,因为它是类的成员,不需要在方法的参数中传递它,你只需写 ' String result = MySQL(statement, conn); ' 并且代码读取存储在 'private Connection conn; 中的变量; '在调用构造函数'public Ross()'期间。
  • 感谢您的帮助和深入的解释。我真的很感谢你的帮助。原来我只是放错了私人连接连接的位置;
猜你喜欢
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 2023-03-30
  • 2021-07-18
  • 2018-07-20
相关资源
最近更新 更多