[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
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
方法2
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
同じ理屈.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について
解決策は次のとおりです.
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+"";