2017-06-24 4 views
-1

こんにちは、テキストフィールドに年、月、日のすべての文字列を入力してから、 1つの文字列を作成し、文を使ってこれを日付に変換し、それをデータベースに挿入するコードはここにあります。文字列から日付および/または時刻を変換するときに変換が失敗しましたSQL Server 2016

int CustomerID = Integer.parseInt(txtCustomerID.getText()); 
    int CarID = Integer.parseInt(txtCarID.getText()); 
    String startdateyear = txtStartDateYear.getText(); 
    String startdatemonth = txtStartDateMonth.getText(); 
    String startdateday = txtStartDateDay.getText(); 
    String enddateyear = txtEndDateYear.getText(); 
    String enddatemonth = txtEndDateMonth.getText(); 
    String enddateday = txtEndDateDay.getText(); 
    String StartDate = startdateyear + startdatemonth + startdateday; 
    String EndDate = enddateyear + enddatemonth + enddateday; 
    int HiringPrice = Integer.parseInt(txtHiringPrice.getText()); 
    String Pay = txtPay.getText(); 
    carDA.insert(CustomerID, CarID, StartDate, EndDate, HiringPrice, Pay);/ 

これは挿入クエリです:私はプログラムを実行すると

stm.executeUpdate("INSERT INTO CarOrder VALUES (" + CarID +"," + CustomerID +",CONVERT(DATE," + "'" +StartDate+ "', 111), CONVERT(DATE," + "'" +EndDate+"', 111)," +HiringPrice+ "," +"'"+Pay+ "')"); 

それは、このメッセージをスロー:

Conversion failed when converting date and/or time from character string. 

私があれば、それはこれをやっている理由を見つけるように見えるカントいずれにせよ私は私が感謝することができます。

+0

SQLインジェクションを防止するためのプリペアドステートメントについて学びます。それもあなたのコンバータの問題を解決します – Jens

+0

@ジェン私はあなたが 'あなたのコンバータの問題を解決するだろう 'と言ったときに私はあなたを取得しませんあなたは私の答えを確認してくださいできますか? –

答えて

0

のようになりますです、あなたが入力した日付形式が正しくないようです:あなたは111を使用しているため

convert(datetime, '2017/06/24', 111) -- yyyy/mm/dd 

ので、あなたの入力は、このCAST and CONVERT (Transact-SQL)

についての詳細を読む、 yyyy/mm/ddのようになります。

代わりにPreparedStatementを使用することをお勧めします。構文エラーまたはSQL Injectを避けるために、より便利で安全です。

DateFormat format = new SimpleDateFormat("yyyy/mm/dd"); 

String query = "INSERT INTO CarOrder VALUES (?, ?, CONVERT(DATE, ?, 111), CONVERT(DATE, ?, 111), ?, ?)"; 
try (PreparedStatement insert = connection.prepareStatement(query)) { 
    insert.setInt(1, CustomerID); 
    insert.setDate(2, new Date); 
    insert.setDate(3, format.parse(StartDate)); 
    insert.setDate(4, format.parse(EndDate)); 
    insert.setDouble(5, HiringPrice);//i think the price is a double maybe you make it int or float so you have to use the right type 
    insert.setString(6, Pay); 

    insert.executeUpdate(); 
} 
+1

私はあなたが変換ステートメントを必要とするならば、私は嫌ですが、はい、それは私が意味するものです – Jens

+0

**なぜこの下投票?** opはそれがなぜこの下投票 –

1

現在地無効な文字列を取得している:たとえば、startdateyear = '2016' の

String StartDate = startdateyear + startdatemonth + startdateday; 

、startdatemonth = '4'、startdateday = '1' - >開始日= '201641' - - >select CONVERT(DATE,'201641', 111) - 文字列から 日付および/または時刻を変換する際に>

メッセージ241、レベル16、状態1、行1、変換に失敗しました。あなたの文字列が全く/を含んでいないながら

なぜ地球上であなたはyy/mm/ddをある111フォーマットを使用していますか? 「201641」は年= 2020、月= 16、日= 41のように解釈されます。

関連する問題