如何使用Java在MySQL的同一个表中插入不同类的值

时间:2012-06-29 09:06:08

标签: java mysql

我在不同的课程中有不同的价值观。我需要将它们插入同一个表中。例如,通过尝试本教程中的示例: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, ?, ?, ?, ? , ?, ?)");

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

preparedStatement.setString(2, "TestEmail");

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

2 个答案:

答案 0 :(得分: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");
        }
}

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

答案 1 :(得分:0)

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