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

公共类 RecordFields { 公共 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 说的是,要填充 PostgreSQLDATE类型列,您可以使用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 回答