0

クラスごとに値が異なります。同じテーブルに挿入する必要があります。たとえば、このチュートリアルの例をここで試してみると、http ://www.vogella.com/articles/MySQLJava/article.html

私がそのようなコードを持っている場合(別のクラスでDB接続が正常に行われたと仮定して):

// 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つのクラスに値1を挿入し、2番目のクラスに値2を挿入したいとします。プログラムの最後までに、main関数で更新を実行します。私が書いたことに注意してください:

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

main関数にあります。main関数を含むクラスでpreparedStatementをパブリック変数として定義しようとしました。たとえば、別のクラスに値2を挿入する必要がある場合は、次のように入力します。

preparedStatement.setString(2, "TestEmail");

しかし、これにより、メイン関数でエラーが発生します。パラメータ2に値が指定されていません。したがって、1つのテーブルに異なるクラスの値を挿入するにはどうすればよいですか?

4

2 に答える 2

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();
    }

    }

クラス1で

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 に答える
0

mainで「preparedStatement」変数を使用しているので、これはパブリック静的変数である必要があると思います。また、他のクラスがこの変数に対してメソッドを実行することを期待しているため、これらのクラスの静的初期化子または静的コンストラクターで実行していると想定しています。問題は、mainからこれらのクラスを参照しない限り(したがって、静的初期化子が実行されない)、これらのクラスがロードされないことです(クラスで静的メソッドを呼び出すか、新しいインスタンスを作成します)。私はあなたがそうしていないと思います。そのため、これらのクラスの静的初期化子は実行されず、実行する準備ができているpreparedStatementがありません。

于 2012-06-29T09:33:52.387 に答える