error java.sql.SQLException:参数索引超出范围(1>参数数量,即0

问题描述:

这里是我的代码 我写了下面的java方法,当我打电话给我时,给我错误 1 :)我当用户在文本框中输入challan号码时必须更新日期。error java.sql.SQLException:参数索引超出范围(1>参数数量,即0

public class datechnagemainmenu extends javax.swing.JFrame { 

public static final String DATE_FORMAT_NOW = "dd/MMM/YYYY "; 
Calendar cal = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); 
Date date = new Date(); 

/** 
* Creates new form datechnagemainmenu 
*/ 
public datechnagemainmenu() { 
    initComponents(); 

    String dt = sdf.format(cal.getTime()); 

    System.out.println(dt); 
    jLabel4.setText(dt); 
} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    jLabel1 = new javax.swing.JLabel(); 
    jLabel7 = new javax.swing.JLabel(); 
    jPanel1 = new javax.swing.JPanel(); 
    jLabel2 = new javax.swing.JLabel(); 
    jLabel3 = new javax.swing.JLabel(); 
    jLabel4 = new javax.swing.JLabel(); 
    jPanel2 = new javax.swing.JPanel(); 
    jLabel5 = new javax.swing.JLabel(); 
    jSeparator1 = new javax.swing.JSeparator(); 
    jPanel3 = new javax.swing.JPanel(); 
    jLabel6 = new javax.swing.JLabel(); 
    jLabel8 = new javax.swing.JLabel(); 
    jLabel9 = new javax.swing.JLabel(); 
    jTextField1 = new javax.swing.JTextField(); 

    jLabel1.setText("jLabel1"); 

    jLabel7.setText("jLabel7"); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Carlsberg india pvt ltd", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP)); 

    jLabel2.setText("Phone number:42570000"); 

    jLabel3.setText("ver -02/03/1.01"); 

    jLabel4.setText("date"); 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addGap(106, 106, 106) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(jLabel2) 
       .addGroup(jPanel1Layout.createSequentialGroup() 
        .addGap(12, 12, 12) 
        .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE))) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 36, Short.MAX_VALUE) 
      .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap()) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addComponent(jLabel2) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jLabel3) 
      .addGap(0, 0, Short.MAX_VALUE)) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jLabel4) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 

    jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); 

    jLabel5.setText("main menu"); 

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); 
    jPanel2.setLayout(jPanel2Layout); 
    jPanel2Layout.setHorizontalGroup(
     jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel2Layout.createSequentialGroup() 
      .addGap(159, 159, 159) 
      .addComponent(jLabel5) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 
    jPanel2Layout.setVerticalGroup(
     jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(jLabel5) 
      .addGap(25, 25, 25)) 
    ); 

    jPanel3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); 

    jLabel6.setText("Please enter the bill no"); 

    jLabel9.setText("give <zero> to exit"); 

    jTextField1.setText("0"); 
    jTextField1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jTextField1ActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); 
    jPanel3.setLayout(jPanel3Layout); 
    jPanel3Layout.setHorizontalGroup(
     jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel3Layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(jPanel3Layout.createSequentialGroup() 
        .addComponent(jLabel6) 
        .addGap(18, 18, 18) 
        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
       .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() 
        .addGap(0, 0, Short.MAX_VALUE) 
        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() 
          .addComponent(jLabel8) 
          .addGap(54, 54, 54)) 
         .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() 
          .addComponent(jLabel9) 
          .addContainerGap()))))) 
    ); 
    jPanel3Layout.setVerticalGroup(
     jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel3Layout.createSequentialGroup() 
      .addGap(18, 18, 18) 
      .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(jLabel6) 
       .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addGap(18, 18, 18) 
      .addComponent(jLabel8) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jLabel9) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING) 
     .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(18, 18, 18) 
      .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(27, 27, 27) 
      .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(0, 7, Short.MAX_VALUE)) 
    ); 

    pack(); 
}// </editor-fold>       

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {            
    // TODO add your handling code here: 

    //System.out.println(jTextField1); 
    System.out.println("gfj"); 
    if (evt.getSource() == jTextField1) //add 
    { 

     try { 
      String host = "jdbc:mysql://localhost:3306/indospirit"; 
      String uName = "root"; 
      String uPass = "paras123"; 

      //Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      java.sql.Driver d = new com.mysql.jdbc.Driver(); 

      Connection con = DriverManager.getConnection(host, uName, uPass); 


      String sql =("update challan set date=('dt') where challan_no='"+jTextField1+"' "); 

      System.out.println(sql); 
      PreparedStatement ps; 
      ps = con.prepareStatement(sql); 

      ps.setString(1,jTextField1.getText().trim()); 
      ps.setString(2,jLabel4.getText().trim()); 
      int i = ps.executeUpdate(); 



     if(i>0) 
      JOptionPane.showMessageDialog(null,"Record Updated"); 
     else 
      JOptionPane.showMessageDialog(null,"Record NOT Updated"); 
      } 

     catch (SQLException ex) { 
      System.err.println(ex.toString()); 
     } catch (Exception ex1) { 
      System.err.println(ex1.toString()); 
     } 
}           

} 
+0

在google上搜索“参数索引超出范围的SQL异常”。 –

这不是Swing错误,这是SQL错误。只用SQL代码粘贴方法会让这个更容易阅读。

您准备好的语句没有任何参数,所以当您尝试设置值时会出现该错误。使用 ?参数。详情请参阅http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

此行

String sql =("update challan set date=('dt') where challan_no='"+jTextField1+"' "); 

需要寻找这样

String sql =("update challan set date=? where challan_no=?"); 

更改根据指数?在查询中

ps.setString(1,jTextField1.getText().trim()); 
ps.setString(2,jLabel4.getText().trim()); 
+0

+1;不仅要解决你的问题,而且这个建议使任何java代码更难以篡改。原始版本很容易遭受SQL注入 –

+0

准备好的语句和创建语句之间有什么区别。 – user2818060

这是一个SQL异常。您已将参数传递给准备好的语句,但尚未在SQL字符串(语句)中使用它们。

+0

感谢Jacob纠正了我愚蠢的错误。下次我会小心的。 – Deep