0

PostgreSQLデータベースにレコードを挿入したい。そのフィールドのほとんどは文字列ですが、java.sql.dateとBIGINTもあります。どうやってやるの?私のコードは機能していないようです。

    public Record(RecordFields data)
    {
        CreateNewRecord(data);
    }

        private void CreateNewRecord(RecordFields recordFields)
        {
            try
            {    

                    String addRecord = "INSERT INTO " + GlobalFields.TABLE + " VALUES (? , ? , ? , ? , ? , ? , ? , ? , ?);";

                    Connection conn = DataBase.Connect();

                    PreparedStatement query = conn.prepareStatement(addRecord);
                    query.setLong(1, recordFieldsID);
                    query.setString(2, recordFields.surname);
                    query.setString(3, recordFields.name);
                    query.setString(4, recordFields.sex);

                    DateTime date = recordFields.bornDate.toDateTime();
                    query.setTimestamp(5, new Timestamp(date.getMillis()));

                    query.setString(6, recordFields.adress);
                    query.setString(7, recordFields.contact);
                    query.setString(8, recordFields.insurance);
                    query.setString(9, recordFields.commentary);

                    query.executeUpdate(addRecord);
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }


    }    

テーブルジェネレータ:

public static void CreateTable()
    {
        try
        {
            Connection conn = DataBase.Connect();

            try
            {
                Statement stat = conn.createStatement();

                String createTable = "CREATE TABLE " + GlobalFields.TABLE 
                    + "(id BIGINT PRIMARY KEY,"
                    + "surname TEXT,"
                    + "name TEXT,"
                    + "sex CHAR(1),"                 
                    + "bornDate DATE,"
                    + "adress TEXT,"
                    + "contact TEXT,"
                    + "insurance TEXT,"
                    + "commentary TEXT);";

                stat.executeUpdate(createTable);
            }
            finally
            {
                conn.close();
            }
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        } 
    } 

public class RecordFields {public RecordFields(){}

public long id;
public String surname;
public String name;
public String sex;
public MutableDateTime bornDate;
public String adress;
public String contact;
public String insurance;
public String commentary;

}

4

2 に答える 2

1
stat.executeUpdate(createTable);

犯人です。PreparedStatementsでは、executeUpdateはパラメーターを取りません

したがって、その行を次のように変更します-トムアンダーソンが説明したように

stat.executeUpdate();

そして、あなたは完了です

また、

INSERT table VALUES (values)

コードを不必要に脆弱にします。使用する

INSERT INTO table (fieldlist) VALUES (valuelist)

代わりは。

そしてまた2:

DateTime date = recordFields.bornDate.toDateTime();
query.setTimestamp(5, new Timestamp(data.getMillis()));

かなり複雑なバージョンのことわざです

query.setTimestamp(5,new Timestamp(recordFields.bornDate.getMillis()));

編集:postgressqlの日付に関して

Tomが言っているのは、PostgreSQLのDATE型列に入力するには、java.sql.date型変数( "common"ではなくjava.util.Date)またはを使用できるということjavax.sql.TimeStampです。しかし、これは現在の問題(executeUpdateの呼び出しのパラメーターによって引き起こされる)とはまったく関係がなく、ここで行うこと(Timestamp型変数を使用して設定する)は問題ありません。

于 2012-10-20T15:14:09.853 に答える
0

この質問を見てください。

基本的に、コードは次の形式である必要があります。

String query = "..."; 
PreparedStatement stat = conn.prepareStatement(query); 
ResultSet rs = stat.executeQuery(); 
while (rs.next()) { 
  // TODO 
} 

問題のあるメソッドのすべてのソースコードが含まれていないため、完全に診断することは困難です。

于 2012-10-20T15:06:13.003 に答える