2012-10-20 3 views
0

PostgreSQL 데이터베이스에 레코드를 삽입하고 싶습니다. 대부분 필드는 String이지만 java.sql.date와 BIGINT도 있습니다. 내가 어떻게 할 수 있니? 내 코드가 작동하지 않는 것 같습니다.쿼리 오류에서 다른 데이터 유형을 postgreSQL에 삽입하십시오.

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; 

}

+2

어떤 오류가 발생합니까? –

+1

아마 어떻게 작동하지 않는지 설명 할 수 있습니다. 출력은 무엇입니까? 예외가 던져지고 있습니까? 세부 사항은 무엇입니까? – btiernay

+0

org.postgresql.util.PSQLException : PreparedStatement에서 쿼리 문자열을 사용하는 쿼리 메서드를 사용할 수 없습니다. \t at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate (AbstractJdbc2Statement.java : 294) \t at EngineClasses.Record.CreateNewRecord (Pacjent.java:62) \t at EngineClasses.Record. (Record.java:37) \t at mainPackage.Test.main (Test.java:38) –

답변

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

편집 : 대한 톰은 PostgreSQL의 DATE 유형 열을 채우기 위해 즉 말하는 Date in postgressql

당신 유형 변수를 java.sql.date ("공통"java.util.Date과 반대) 또는 javax.sql.TimeStamp. 하지만 그것은 현재 문제 (executeUpdate 호출의 매개 변수로 인해 발생하는 문제)와는 전혀 관련이 없으며 여기서 수행하는 작업 (Timestamp 유형 변수를 사용하여 설정)은 정상입니다.

+0

매개 변수가있는 종류의 쿼리를 보내려면 어떤 방법을 사용해야합니까? –

+0

또한이 질문에 대해 살펴보십시오. http://stackoverflow.com/questions/12182751/date-in-postgressql 및 탐구 해보십시오. Tom Anderson의 답변입니다. 이해할 수없는 것처럼 보입니다. –

+0

고맙습니다 :) –

0

은 01,239,477,597에서보세요질문입니다.

는 기본적으로 코드는 다음과 같은 형식이 있어야합니다 당신은 문제가있는 방법의 모든 소스 코드를 포함하지 않았기 때문에

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

를 완전히 진단하기 어렵습니다.

+0

이제 모든 필요한 코드가 포함되어 있습니다. –

관련 문제