我想在PostgreSQL数据库中插入一条记录。它的大部分字段都是String,但也有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 { 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;
}
答案 0 :(得分:1)
stat.executeUpdate(createTable);
是罪魁祸首。在PreparedStatements executeUpdate takes no parameters上。
因此,请将该行修改为 - as expained by Tom Anderson
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()));
编辑:关于Date in postgressql
Tom说的是,要填充PostgreSQL DATE
类型列,您可以使用java.sql.date
类型变量(而不是“common”java.util.Date
)或{{{ 1}}。但这与当前问题完全无关(由executeUpdate调用中的参数引起)和你在这里做的(使用Timestamp类型变量设置它)是正常的。
答案 1 :(得分:0)
查看this问题。
基本上,您的代码应具有以下形式:
String query = "...";
PreparedStatement stat = conn.prepareStatement(query);
ResultSet rs = stat.executeQuery();
while (rs.next()) {
// TODO
}
因为您没有包含有问题方法的所有源代码,所以很难完全诊断。