【问题标题】:How can I send a class as a parameter in a function in Java?如何在 Java 函数中将类作为参数发送?
【发布时间】:2020-03-25 21:52:32
【问题描述】:

我已经用它的变量创建了不同的类,我正在尝试创建一个在 SQL 数据库中创建表的 Java 程序。问题是我不知道如何在函数中将类作为参数发送。

我正在开发这个功能:

public void createTable (/*Class c ?*/) {

    ArrayList<String> fields = new ArrayList<>();

    for (Field f: c.class.getDeclaredFields()) {

         fields.add(f.getName());
    }

    Statement statement;

    statement = connection.createStatement();    //This part of the function wouldn't work. But let's focus on the question
    statement.execute("insert into " + c.getSimpleName() + "(" + String.join(", ", fields) + ") values" etc...
}

请注意,我想将数据插入 SQL 数据库的函数的第二部分将无法工作,因为它尚未完成。但是,我怎么能在这个函数中接收不同的类(显然有不同的变量)并对所有类做同样的事情? (创建一个包含其字段名称的列表)。

【问题讨论】:

  • 你想传递一个类,还是那个类的一个实例(一个对象)?当您生成插入语句时,我假设您还想传递值,在这种情况下,您需要一个对象,而不是一个类。另外,请了解准备好的陈述。您不应该将值连接到查询字符串中,这会使它们容易受到 SQL 注入的攻击。最后,考虑研究像 Hibernate 这样的 ORM:你正在重新发明轮子(而且很糟糕)。

标签: java class jdbc


【解决方案1】:

对于任何在这个问题上寻找答案的人,这对我有用:

public void createTable (Class c) {

ArrayList<String> fields = new ArrayList<>();

Object ob = c.newInstance();    

for (Field f: ob.getClass().getDeclaredFields()) {

     fields.add(f.getName());
}

// etc...

}

【讨论】:

    【解决方案2】:

    这很简单,只需重构如下:

    public void createTable (Class c) {
    
        ArrayList<String> fields = new ArrayList<>();
    
        for (Field f: c.getDeclaredFields()) {
    
             fields.add(f.getName());
        }
    
        Statement statement;
    
        statement = connection.createStatement();    //This part of the function wouldn't work. But let's focus on the question
        statement.execute("insert into " + c.getSimpleName() + "(" + String.join(", ", fields) + ") values" etc...
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-28
      • 2021-07-07
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多