0

我在不同的班级有不同的价值观。我需要将它们插入同一张表中。例如,通过在此处尝试本教程中的示例:http ://www.vogella.com/articles/MySQLJava/article.html

如果我有这样的代码(假设数据库连接在另一个类中成功完成):

// PreparedStatements can use variables and are more efficient
    preparedStatement = connect.prepareStatement("insert into  FEEDBACK.COMMENTS
                         values (default, ?, ?, ?, ? , ?, ?)");
            // "myuser, webpage, datum, summery, COMMENTS from FEEDBACK.COMMENTS");
            // Parameters start with 1
            preparedStatement.setString(1, "Test");
            preparedStatement.setString(2, "TestEmail");
            preparedStatement.setString(3, "TestWebpage");
            preparedStatement.setDate(4, new java.sql.Date(2009, 12, 11));
            preparedStatement.setString(5, "TestSummary");
            preparedStatement.setString(6, "TestComment");
            preparedStatement.executeUpdate();

假设在一个类中我想插入值 1,在第二个类中我想插入值 2,等等。在我的程序结束时,在 main 函数中,我想执行更新。请注意,我写了:

preparedStatement = connect.prepareStatement("insert into  FEEDBACK.COMMENTS 
                    values (default, ?, ?, ?, ? , ?, ?)");

在主函数中。我试图在包含主函数的类中将preparedStatement定义为公共变量,例如,如果我需要在另一个类中插入值2,我输入:

preparedStatement.setString(2, "TestEmail");

但这会导致主函数出错:没有为参数 2 指定值。那么,如何在一个表中插入来自不同类的值?

4

2 回答 2

0

由于您在 main 中使用“preparedStatement”变量,我假设它必须是一个公共静态变量。而且由于您希望其他类对此变量执行方法,因此我假设您是在这些类的静态初始化程序或静态构造函数中执行此操作。问题是这些类没有加载(因此它们的静态初始化程序没有运行),除非您从 main 引用这些类(在类上调用静态方法或创建新实例)。我认为你没有这样做。这就是为什么这些类的静态初始化程序都没有运行并且您没有准备好执行的preparedStatement 的原因。

于 2012-06-29T09:33:52.387 回答
0

尝试这个

主班

    public Class Main{
    public static void main(String args[]){
         Class1 youClassOne = new Class1();
         Class2 youClasstwo = new Class2();
         Connection conn = getConection();//implement this method.
         PreparedStatement preparedStatement = conn.prepareStatement("insert into  FEEDBACK.COMMENTS values (default, ?, ?, ?, ? , ?, ?)");
         youClassOne.addValues(preparedStatement);
         youClasstwo.addValues(preparedStatement);
         preparedStatement.executeUpdate();
    }

    }

在 Class1

public class Class1{

   public void  addValues(PreparedStatement preparedStatement){
            preparedStatement.setString(1, "Test");
            preparedStatement.setString(2, "TestEmail");
            preparedStatement.setString(3, "TestWebpage");
            preparedStatement.setDate(4, new java.sql.Date(2009, 12, 11));
            preparedStatement.setString(5, "TestSummary");
            preparedStatement.setString(6, "TestComment");
        }
}

我还没有测试过。希望它有效。如果您遇到任何问题,请告诉我

于 2012-06-29T09:16:15.997 回答