2012-03-12 2 views
0

데이터베이스를 사용하는 것이 상대적으로 새롭고 어떤 이유로 '실행'이 작동하지 않습니다.데이터베이스 쿼리 문제

statment2.execute("insert into table Value (" + int + "," + date + "," + int + ",'" + string + "')"); 

오류는 "누락 된 쉼표"입니다. 날짜는 해당 필드에서만 날짜로 지정됩니다.

나는

Date date = new Date(); 
date.setMonth(month); 
date.setYear(year); 
date.setDate(weekStart); //weekStart is always monday 

난 그냥 평범한 오래된 날짜 또는 date.toString를 사용해야합니까 다음과 같이 설정? Calendar를 사용할 예정 이었지만 Calendar 객체를 사용하여 DB 날짜를 설정하는 방법을 모르겠습니다. 나는 "gety/m/d"방법을 보지 못했습니다.

내 쿼리 또는 데이터베이스에서 날짜를 잘못 설정하여 Date 개체를 사용하고 있습니까?

편집 :

는 응답을 시도 잘못된 형식을 가지고 - 예상 날짜 수를 얻었다. 이는 것 해결되지 것 PreparedStatement의 사용
sqlDate.valueOf(dateString I created) 
sqlDate.toString() 
sqlDate 

를 시도? 보안상의 이유로 더 나아질 것으로 생각됩니다.

+3

거의 일 - 1) 데이터베이스에 의존을, 모든 데이터베이스는이 문제를 처리합니다 다르게. 자신의 문서를 확인하십시오. 2) 직접 SQL을 작성하는 대신 JDBC 준비 문을 조사해야합니다. 이러한 유형의 문제를 피할 수 있습니다. –

답변

2

먼저 PreparedStatement을 사용하여 쿼리에 값을 삽입해야합니다. 이것은 SQL Injection 문제를 피하는 것을 포함하여 많은 이점을 가지고 있습니다. PreparedStatement를 사용하면 지금보고있는 오류를 피할 수 있습니다. PreparedStatement를 사용하는 코드는 다음과 같습니다.

Connection conn = null; 
    PreparedStatement pstmt = null; 
    try { 
     conn = getConnection(); 
     String query = "insert into table (column1,column2,column3,column4) values(?, ?, ?,?)"; 

     pstmt = conn.prepareStatement(query); 
     pstmt.setInt(1, 1); 
     pstmt.setDate(2, sqlDate); 
     pstmt.setInt(3, 3); 
     pstmt.setString(3, "test"); 
     pstmt.executeUpdate(); 
    } catch (Exception e) { 
     //log the error messages log.error(e,e); 
     //throw the actual exception upstream 
    } finally { 
     pstmt.close(); 
     conn.close(); 
    } 

"DB"날짜의 의미가 확실하지 않습니다. 당신은 SQL 날짜 개체 후에있는 경우 java.sql.Date 객체에이 방법 java.util.Date가 객체를 변환 할 수 있습니다

java.util.Date date = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 
+0

흠, 잘못된 형식 가져 오기 예상 날짜에 번호가 있습니다. – cphilpot

+0

String query = "테이블 (column1, column2, column3, column4)의 값 (?,?,?,?)에 정확하게 삽입하거나 column1을 리터럴 이름으로 바꾸어야합니까? (시작하려고한다) – cphilpot

+0

@cphilpot - column1을 실제 이름으로 바꾼다. PreparedStatement의 일부가 아니다. 표준 SQL. – CoolBeans