2016-06-30 3 views
1

저는 Java를 사용하여 CSV 파일의 일부 레코드를 저장하고 있습니다. 이러한 레코드 중 하나가 날짜입니다. 여기서 문제는 JDBC를 사용하여 이러한 레코드를 데이터베이스에 저장하는 것입니다. 이제 Java의 Date 객체가 데이터베이스에 데이터를 삽입하는 동안 오류를 표시합니다. 나는 이것에 잠시 붙어있다. 이 문제를 해결하는 방법을 알려주십시오. 나는 날짜를 데이터베이스에 저장하기 위해 mysql에 사용했다. 다음은 문제를 만드는 부분입니다.JDBC 날짜와 SQL 날짜

DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = new Date(); 
System.out.println(d1.format(d)); 
String sql = "INSERT INTO TESTING"+ 
      "VALUES("+"DATE_FORMAT("+d+","+"'%Y-%m-%d'"+"))"; 
stmt.executeUpdate(sql); 

MySqlWorkBench에서 직접 실행하면 날짜가 올바르게 저장됩니다. 그러나 JDBC를 통해 문제가된다.

오류

은 아래와 같습니다 :

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Jun 30 14:04:03 IST 2016,'%Y-%m-%d'))' at line 1 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402) 
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317) 
    at payex.writeDB(payex.java:221) 
    at payextestdrive.main(payextestdrive.java:11) 
+2

"데이터베이스에 퍼팅하면서 이제 자바의 Date 객체가 에러를 보여주고있다"또한 공간은 테이블 이름과 VALUES 사이에 누락 된? 문자열 연결을 사용하는 것은 * 올바른 해결책이 아닙니다 * PreparedStatement를 절대적으로 사용해야하지만 java.util.Date가 아닌 java.sql.Date를 사용해야합니다. –

+0

이 게시물도 참조 할 수 있습니다. http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date – shazinltc

+1

"INSERT INTO TESTING"+ "VALUES ..." work – wero

답변

1

오류 메시지는 매우 분명하다

right syntax to use near 'Jun 30 14:04:03 IST 2016,'%Y-%m-%d'))' 

제공 한 형식이 MMM DD HH입니다 : MM : SS의 Z의 YYYY, 시스템은 % Y- % m- % d을 예상합니다

시도

당신은 포맷 된 날짜 문자열을 추가 할 때
DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = new Date(); 
System.out.println(d1.format(d)); 
String sql = "INSERT INTO TESTING"+ 
      " VALUES("+"DATE_FORMAT('"+d1.format(d)+"',"+"'%Y-%m-%d'"+"))"; 
stmt.executeUpdate(sql); 

하거나

DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = new Date(); 
System.out.println(d1.format(d)); 
String sql = "INSERT INTO TESTING"+ 
      " VALUES('"+d1.format(d)+"')"; 
stmt.executeUpdate(sql); 
+0

답변을 주셔서 감사합니다.이 시도했지만 예외가 발생했습니다. –

+0

com.mysql.jdbc.MysqlDataTruncation : 데이터 절단 : 잘못된 날짜 시간 값 : '2008' \t에서 com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:2983) com.mysql.jdbc.MysqlIO.sendCommand에서 \t (MysqlIO.java:1631) \t에서 com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:1723) com.mysql.jdbc.Connection.execSQL에서(Connection.java:3277) \t com.mysql.jdbc.Statement.executeUpdate (Statement.java:1402) \t at com.mysql.jdbc.Statement.executeUpdate Statement.java:1317) \t at payex.writeDB (payex.java:221) \t payextestdrive.main (payextestdrive.java:11) –

1

당신은 SQL 명령에 d.toString()를 추가합니다. - 어떤 오류

String sql = "INSERT INTO TESTING VALUES(DATE_FORMAT(" + d1.format(d) +",'%Y-%m-%d'))"; 
+0

안녕하세요. 귀하의 답변에 감사드립니다. 그러나 예외가 다시 있습니다. –

+0

com.mysql.jdbc.MysqlDataTruncation : 데이터 절단 : 잘못된 날짜 시간 값 : '2008' com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:2983)에서 \t \t com.mysql.jdbc.MysqlIO.sendCommand에서 (MysqlIO.java:1631) \t com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:1723) com.mysql.jdbc.Connection.execSQL (Connection.java:3277)에서 \t com.mysql.jdbc.Statement.executeUpdate (Statement.java:1402)에서 \t \t에서 COM .mysql.jdbc.Statement.executeUpdate (Statement.java:1317) payex.writeDB에서 \t (payex.java:220) payextestdrive.main에서 \t (payextestdrive.java:11) –

관련 문제