2016-10-25 12 views
1

私は日付の計算が必要なプロジェクトに取り組んでいます。私は日付オブジェクトをアクセスデータベース内に格納する方法を探していますが、すべてのメソッドでエラーが発生します。Java 8を使用して日付オブジェクトをデータベースに挿入しますか?

//========================== SetupDB =====================================// 
public void setupDB() { 
    try { 
     Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); 
     c1 = DriverManager.getConnection(ABDebatePro.DBURL); 
     stmt = c1.createStatement(); 
    } 
catch (Exception e) { 
     System.out.println(e); 
} 
} 
//========================== InsertDB ====================================// 
public void insertDB(int m, String ft, String st, int s1, int s2, Date d) { 
    MatchNumber = m; 
    FirstTeam = ft; 
    SecondTeam = st; 
    FirstTeamScore = s1; 
    SecondTeamScore = s2; 
    MatchDate = d; 
    setupDB(); 
    try { 
     String sql = "insert into Schedule (MatchNumber, FirstTeam, SecondTeam, FirstTeamScore, SecondTeamScore, MatchDate) values " + "(" + m + ",'" + ft + "','" + st + "'," + s1 + "," + s2+ ",'" + d + "')"; 
     int z = stmt.executeUpdate(sql); 
     c1.close(); 
    } catch (Exception fe) { 
     System.out.println(fe); 
    } 
} 
//========================== Main ========================================// 
public static void main(String[] args) { 
Schedule sch = new Schedule(); 
try { 
    java.sql.Date date1 = java.sql.Date.valueOf("2016-10-25"); 
    sch.insertDB(3, "Turtles", "Aligators", 4, 3, date1); 
} catch (Exception ex) { 
    System.out.println(ex); 
} 

マイログイン:

insert into Schedule (MatchNumber, FirstTeam, SecondTeam, FirstTeamScore, SecondTeamScore, MatchDate) values (3,'Turtles','Aligators',4,3,'2016-10-25') 
net.ucanaccess.jdbc.UcanaccessSQLException: data exception: invalid datetime format 

マイデータベース:

Database snapshot

+0

'java.sql.Date'は、時間、分、秒を削除します。データベースにはDATEではなくDATETIMEがあります。 Javaタイムスタンプ?または、より良いJava 8クラスLocalDate、LocalDateTimeを使用することもできます。 –

答えて

2

動的SQLを使用してinsertDBにSQL文を構築していて、その文に無効な日付リテラルが含まれているという問題があります。あなたはそのようPreparedStatementパラメータ化クエリを使用する必要があります。

String sql = 
     "INSERT INTO Schedule " + 
     "(MatchNumber, FirstTeam, SecondTeam, FirstTeamScore, SecondTeamScore, MatchDate) " + 
     "VALUES " + 
     "(?,?,?,?,?,?)" 
PreparedStatement ps = c1.prepareStatement(sql) 
ps.setInt(1, m); 
ps.setString(2, ft); 
ps.setString(3, st); 
ps.setInt(4, s1); 
ps.setInt(5, s2); 
ps.setDate(6, d); 
int z = ps.executeUpdate(); 
+0

私はちょうどこれをして、私の質問を見て、あなたは答えました。よくやった!これは完全に機能します。 –

-1

例の方法私は、Java 8

マイ剥奪コードでUcanAccessドライバを使用していますあなたのため:

public void getSqlDate() { 
    Calendar cal = Calendar.getInstance(); 
    int year = 2016; 
    int month = 9; //month is zero-based 
    int day = 25 
    cal.set(year, month, date); 
    return new Date(cal.getTime()); 
} 

java.sql.Dateのコンストラクタが本当にjava.sql.Date

のために "1970年1月1日からのミリ秒00:00:00 GMT" #を表しlong値を望んでいる

参照のJavaDocことに注意してください

+0

申し訳ありませんが、これは問題を解決するものではなく、 'java.sql.Date.valueOf(" 2016-10-25 ")'は 'java.sql.Date'値を作成するための完全に許容された方法です。 –

関連する問題