有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数据库错误。sql。SQLEception:参数索引超出范围(1>参数数,为0)

我是编程新手,不知道如何修复这个错误:java。sql。SQLEception:参数索引超出范围(1>;参数数,即0)。第一个JFrame运行时,我收到一条消息,它已连接到数据库,但随后弹出错误,没有任何内容保存到我的数据库中。 这是我的密码:

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);       }
}                                       

共 (2) 个答案

  1. # 1 楼答案

    SQL字符串必须包含-要设置的每个参数的占位符

  2. # 2 楼答案

    我认为你想做这样的事情[如果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);       
            }
        }
    

    编辑: [pst代码作为准备的报表]
    您必须更改查询,不能通过SELECT order插入(如果您希望这样做)

    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);       
        }
    }
    

    对不起,我弄错了