2017-06-11 65 views
-2

プログラミングに慣れていないため、このエラーを修正する方法がわかりません:java.sql.SQLEception :パラメータインデックスが範囲外です(1>パラメータ数、0)。最初のJFrameが実行され、データベースに接続されているというメッセージが表示されますが、エラーがポップアップし、データベースに何も保存されません。 は、ここに私のコードです:エラー:パラメータインデックスが範囲外です(1>パラメータ数、0)

import java.sql.*; 
import javax.swing.*; 

public class SaveData extends javax.swing.JFrame { 
Connection conn=null; 
PreparedStatement pst=null; 
ResultSet rs=null; 

public SaveData() { 
    initComponents(); 
}     

private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {           
    conn=MySQLConnect.ConnectDB(); 
    String Sql="Select * from TripData"; 
    try{ 
     pst=conn.prepareStatement(Sql); 
     pst.setString(1, txtTripDate.getText()); 
     pst.setString(2, txtStartDest.getText()); 
     pst.setString(3, txtEndDest.getText()); 
     pst.setString(4, txtMileage.getText()); 
     pst.setString(5, txtCost.getText()); 
     if(rs.next()){ 
      JOptionPane.showMessageDialog(null, "Trip Saved"); 
      InfoSaved s=new InfoSaved(); 
      s.setVisible(true); 
     } 
     else{ 
      JOptionPane.showMessageDialog(null, "Invalid Information", 
"Please enter again", JOptionPane.ERROR_MESSAGE); 

     } 
    }catch(Exception e){ 
     JOptionPane.showMessageDialog(null, e);  } 
}          
+0

例外は、コマンドラインアプリで問題が再現できることを示しています。つまり、Swingとは何も関係ありません。ヒント:1)無関係のタグを追加しないでください。 2)コマンドラインアプリケーションでSQL部分をデバッグします。最初。 –

+0

データベースに何かを保存したい場合、SELECTステートメントは役に立ちません。 INSERTを試してください。 – Eran

+0

SQLにパラメータマーカー( '?')がないので、 'setString(1、...)'は何をすると思いますか?なぜですか? ---また、 'rs.next()'は 'NullPointerException'で失敗します。 ---最後に、 'SELECT' SQL文は何を信じていますか?なぜですか? *ヒント:*データベースに*保存しません。 – Andreas

答えて

0

SQL文字列を設定したい各パラメータの-placeholderが含まれていなければならないのか。

0

私は[PSTは声明であれば、それは動作します]あなたがこのような何かをしたいと思う:

private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {           
     conn=MySQLConnect.ConnectDB(); 
     String Sql="Select * from TripData"; 
     try{ 
      pst = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
      rs = pst.executeQuery(Sql); // Gets all the TripData rows 
      rs.moveToInsertRow();  // Moves to "insert" row 
      // Updates "insert" row columns 
      rs.updateString("colum_name", txtTripDate.getText()); 
      rs.updateString("colum_name", txtStartDest.getText()); 
      rs.updateString("colum_name", txtEndDest.getText()); 
      rs.updateString("colum_name", txtMileage.getText()); 
      rs.updateString("colum_name", txtCost.getText()); 
      rs.insertRow(); // Inserts the "insert" row to your database 
      if(rs.rowInserted()){ 
       JOptionPane.showMessageDialog(null, "Trip Saved"); 
       InfoSaved s=new InfoSaved(); 
       s.setVisible(true); 
      } 
      else{ 
       JOptionPane.showMessageDialog(null, "Invalid Information", "Please enter again", JOptionPane.ERROR_MESSAGE); 
     } 
     }catch(Exception e){ 
      JOptionPane.showMessageDialog(null, e);  
     } 
    } 

EDITED: [PreparedStatementのようPST用コード]
あなたのクエリを変更する必要があり、 SELECT命令でINSERTすることはできません。

private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {           
    conn=MySQLConnect.ConnectDB(); 
    String Sql="INSERT INTO TripData(COLUMN_NAME, COLUMN_NAME, COLUMN_NAME, COLUMN_NAME, COLUMN_NAME) VALUES(?, ?, ?, ?, ?)"; 
    try{ 
     pst = conn.prepareStatement(Sql); 
     pst.setString(1, txtTripDate.getText()); 
     pst.setString(2, txtStartDest.getText()); 
     pst.setString(3, txtEndDest.getText()); 
     pst.setString(4, txtMileage.getText()); 
     pst.setString(5, txtCost.getText()); 
     int affectedRows = pst.executeUpdate(); 
     if(affectedRows != 0){ 
      JOptionPane.showMessageDialog(null, "Trip Saved"); 
      InfoSaved s=new InfoSaved(); 
      s.setVisible(true); 
     } 
     else{ 
      JOptionPane.showMessageDialog(null, "Invalid Information", "Please enter again", JOptionPane.ERROR_MESSAGE); 
    } 
    }catch(Exception e){ 
     JOptionPane.showMessageDialog(null, e);  
    } 
} 

ご迷惑をおかけして申し訳ありません。

+0

ありがとう、私は今いくつかの間違いを見る。私はそのコードを試しましたが、次のエラーが表示されます:java.lang.RuntimeException:互換性のないソースコード - 互換性のない型:java.sql.Statementをjava.sql.PreparedStatementに変換できません。 – Hayley

+0

アップ、私はあなたがPrepared Statementを使用しているのを忘れています、ごめんなさい。このコードはStatementインスタンス用です。私は自分の答えを編集しています。 – Lydzje

関連する問題