[Mysql] error:incorrect datetime value: '' for column 'rdate'

3011 ワード

mysqlデータベースを使用するときにエラーメッセージが表示されるのは、com.mysql.jdbc.MysqlData Truncation:Data truncation:Incorrect datetime value:'for column'rdate'
解決策は次のとおりです.
1 java.util.Date 変換 java.sql.Date
java.sql.Date sd;

java.util.Date ud;

//initialize the ud such as ud = new java.util.Date();

sd = new java.sql.Date(ud.getTime());

2データベースに挿入するフィールドがDateタイプの場合
PreparedStatement.setDate(int,java.sql.Date)メソッドを使用できます.
その中のjava.sql.Dateは上記の方法で得ることができます
データベースでTO_を提供することもできますDATE関数
たとえば 既存 ud
TO_DATE(new SimpleDateFormat().format(ud,"yyyy-MM-dd HH:mm:ss"),
"YYYY-MM-DD HH24:MI:SS")
javaでの表示フォーマットとデータベースで提供されるフォーマットの違いに注意してください.
sql="update tablename set timer=to_date('"+x+"','yyyymmddhh24miss') where ....."
ここでxは変数が類似している:2008052131223
3「yyyy-mm-dd」形式の文字列をjava.sql.Dateに変換する方法
方法1
SimpleDateFormat bartDateFormat =   new SimpleDateFormat("yyyy-MM-dd"); 

String dateStringToParse = "2007-7-12"; 

try{ 

       java.util.Date date = bartDateFormat.parse(dateStringToParse); 

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

       System.out.println(sqlDate.getTime()); 

} 

catch (Exception ex) { 

     System.out.println(ex.getMessage()); 

}

方法2
String    strDate    =    "2002-08-09";  

StringTokenizer    st    =    new    StringTokenizer(strDate,    "-");  

java.sql.Date    date    =    new   java.sql.Date(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()));

4 java.util.Dateとjava.sql.Dateの違い
JAva.sql.Date,java.sql.Time,java.sql.Timestampの3つはjava.util.Dateのサブクラス(パッケージクラス)です.
しかし、java.sql.Dateタイプの値がデータベースのDateフィールドに挿入されると、データの切り取りが発生するのはなぜですか?
JAva.sql.Dateは、SQL DATEに合わせて設定されたデータ型です.「正規化」のjava.sql.Dateには年月日情報のみが含まれており、ミリ秒単位でクリアされます.フォーマットは似ています:YYYY-MM-DD.ResultSetのgetDate()メソッドを呼び出して戻り値を取得すると、javaプログラムは「仕様」のjava.sql.Dateを参照してデータベース内の数値をフォーマットします.したがって、データベースに存在する非正規化された部分の情報が奪われます.
sunが提供するResultSet.javaでgetDateにこのようにコメントしたもの:
Retrieves the of the designated column in the current row of this ResultSet object as a “java.sql.Date” object in the Java programming language.
同じ理屈.Java.sql.Date値をPrepareStatementのsetDateメソッドでデータベースに格納すると、javaプログラムは受信したjava.sql.Dateを正規化し、非正規化された部分が奪われます.しかし、我々java.sql.Dateは一般的にjava.util.Dateから変換され、例えばjava.sql.Date sqlDate=new java.sql.Date(new java.util.Date().gettime().
明らかに、このように変換されたjava.sql.Dateは、Java.sql.Dateではありません.java.util.Dateの正確な値を保存するには、
Java.sql.Timestampを利用する必要があります.
5 Calendarについて
Calendar calendar=Calendar.getInstance();//      ,      

int year=calendar.get(Calendar.YEAR);//   

int month=calendar.get(Calendar.MONTH);//   ,  ,     1

month=month+1;

int date=calendar.get(Calendar.DATE);//    

String today=""+year+"-"+month+"-"+date+"";