如何解决索引2超出范围

时间:2018-10-14 03:44:48

标签: javafx

请帮忙,我已经完成了更改代码的一切工作,但没有什么能真正成功,我重访此站点是因为,这里的人都是他们的专长,所以为什么我要求的不多? >

这是我的情况,在我的代码中,我通过查询调用表中的所有数据,搜索特定名称或姓氏,因此在我运行代码时,方法seleccionapellido给我一个错误,控制台显示“索引2超出范围”在我的第一种方法seleccionanombre中不会发生,这很罕见,因此为什么在一种方法中发生这种情况,而在另一种方法中仅是代码崩溃,这种方法具有相同的调用。

请在这里确实需要一点帮助。

这是数据库脚本

CREATE DATABASE prueba

create table cliente(
nombre varchar (50) not null,
apellido varchar (50) not null,
id int  identity (1,1) primary key not null

)

这是我的控制器代码:

package application;

import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.cell.PropertyValueFactory;

public class ConexionController implements Initializable {


     ObservableList <Persona> data =FXCollections.observableArrayList();
       @FXML TableView<Persona>  tablacliente;
       @FXML TableColumn<Persona, String> nombrescol;
       @FXML TableColumn<Persona,String > apellidoscol;
       @FXML TableColumn<Persona, Integer>  clienteid;


       ResultSet rs=null;
       Connection Conexion=null;

        @FXML private Button btn;
        @FXML private Button mtn;
        @FXML private Button lmp;
        @FXML private Button mts;
        @FXML private Button bqd;
        @FXML private Button bqape;
        @FXML private TextField nm;
        @FXML private TextField ap;
        @FXML private TextField bq;
        @FXML private TextField bqa;

        @Override
        public void initialize(URL arg0, ResourceBundle arg1) {
            clienteid.setCellValueFactory(new PropertyValueFactory <Persona, Integer>("id_cliente"));
            nombrescol.setCellValueFactory(new PropertyValueFactory <Persona, String>("nombres"));
             apellidoscol.setCellValueFactory(new PropertyValueFactory <Persona, String>("apellidos"));
             seleccionaregistros();
             seleccionanombre();
             seleccionapellido();

        }





    public void conexion(){


        try {
            Conexion=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");

            } 

        catch (SQLException e) {
             e.printStackTrace();
         }
         if(Conexion!=null) {
             Alert alert = new Alert(AlertType.INFORMATION);
             alert.setTitle("Informacion");
             alert.setHeaderText(null);
             alert.setContentText("Conexion Exitosa");
             alert.showAndWait();

         }

    }


    public void insertaregistro() {
          Connection conn=null;
             try {

                 conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                 Statement insertar=conn.createStatement();
                 insertar.executeUpdate("insert into cliente (nombre, apellido) values ('"+nm.getText()+"', '"+ap.getText()+"')");

                 if(conn!=null) {
                     Alert alert = new Alert(AlertType.INFORMATION);
                     alert.setTitle("Informacion");
                     alert.setHeaderText(null);
                     alert.setContentText("Registro Insertado correctamente");
                     alert.showAndWait();
                 }

             } catch (SQLException e) {
                 e.printStackTrace();
             }
             seleccionaregistros();

    }



    public void seleccionaregistros() {

          Connection conn=null;{
              try {

                 conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                  Statement mostrar=conn.createStatement();
                  ResultSet rs;
                  rs= mostrar.executeQuery("select * from cliente");


                  while ( rs.next() ) 
                  {
                     data.add(new Persona(

                             rs.getString("nombre"),
                             rs.getString("apellido"),
                             rs.getInt("id")
                             ));
                     tablacliente.setItems(data);
                  }

              } catch (SQLException e) {
                  e.printStackTrace();
              }

         }

    }


    public void seleccionanombre() {
         String nombre = bq.getText();
        ObservableList <Persona> busqueda =FXCollections.observableArrayList();
         String consulta=" select * from cliente where nombre like ? " ;

         Connection conn=null;{

              try {

                  conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                  PreparedStatement ps =conn.prepareStatement(consulta);
                  ps.setString(1, nombre);
                  ResultSet rs =ps.executeQuery();

                 while ( rs.next() ) 
                  {
                     busqueda.add(new Persona(

                             rs.getString("nombre"),
                             rs.getString("apellido"),
                             rs.getInt("id")
                             ));

                  }

              } catch (SQLException e) {
                  e.printStackTrace();
              }

              tablacliente.setItems(busqueda); 
         }

    }

    public void seleccionapellido() {
         String apellido = bq.getText();
        ObservableList <Persona> busquedape =FXCollections.observableArrayList();
         String consulta=" select * from cliente where apellido like ? " ;

         Connection conn=null;{

              try {

                  conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                  PreparedStatement ps =conn.prepareStatement(consulta);
                  ps.setString(2, apellido);
                  ResultSet rs =ps.executeQuery();

                 while ( rs.next() ) 
                  {
                     busquedape.add(new Persona(

                             rs.getString("nombre"),
                             rs.getString("apellido"),
                             rs.getInt("id")
                             ));

                  }

              } catch (SQLException e) {
                  e.printStackTrace();
              }

              tablacliente.setItems(busquedape); 
         }

    }






    public void limpiatexto() {
        nm.clear();
        ap.clear();
    }


    public void cargarconexion() {
     btn.setOnAction(e->{
            conexion();
        });
    }

    public void cargarregistro() {
         mtn.setOnAction(e->{
                insertaregistro();
            });
        }
    public void borrarcasillatexto() {
         lmp.setOnAction(e->{
                limpiatexto();
            });
        }

    public void mostrartodo() {
        mts.setOnAction(e->{
            seleccionaregistros();
        });
    }

    public void buscanm() {
         bqd.setOnAction(e->{
                seleccionanombre();

            });
    }

    public void buscaape() {
                 bqd.setOnAction(e->{
                   seleccionapellido();

      });



    }




    }

这是Persona Class代码:

package application;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Persona {



    private StringProperty nombres;
    private StringProperty apellidos;
    private IntegerProperty id_cliente;

public Persona (   String nombres, String apellidos, Integer id_cliente) {
    this.nombres=  new SimpleStringProperty (nombres);
    this.apellidos= new SimpleStringProperty ( apellidos);
    this.id_cliente=new SimpleIntegerProperty (id_cliente);
}




public String getNombres() {
    return nombres.get();
}

public  void  setNombres(String nombres) {
    this.nombres=new SimpleStringProperty (nombres);
}


public String getApellidos() {
    return apellidos.get();
}

public  void  setApellidos(String apellidos) {
    this.apellidos=new SimpleStringProperty ( apellidos);
}


public Integer getId_cliente() {
    return id_cliente.get();
}

public  void  setid_cliente(Integer id_cliente) {
    this.id_cliente=new SimpleIntegerProperty (id_cliente);
}

}

这是我的FXML代码:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="497.0" prefWidth="943.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.ConexionController">
   <children>
      <Pane layoutX="16.0" layoutY="7.0" prefHeight="479.0" prefWidth="909.0">
         <children>
            <Button fx:id="btn" layoutX="14.0" layoutY="14.0" mnemonicParsing="false" onAction="#cargarconexion" prefHeight="46.0" prefWidth="117.0" text="Prueba Conexion" />
            <Button fx:id="mtn" layoutX="14.0" layoutY="131.0" mnemonicParsing="false" onAction="#cargarregistro" prefHeight="46.0" prefWidth="117.0" text="Inserta Registro" />
            <Label layoutX="21.0" layoutY="206.0" prefHeight="17.0" prefWidth="105.0" text="NOMBRES" />
            <Label layoutX="21.0" layoutY="250.0" prefHeight="17.0" prefWidth="79.0" text="APELLIDOS" />
            <TextField fx:id="nm" layoutX="100.0" layoutY="202.0" />
            <TextField fx:id="ap" layoutX="100.0" layoutY="246.0" />
            <Button fx:id="lmp" layoutX="21.0" layoutY="313.0" mnemonicParsing="false" onAction="#borrarcasillatexto" prefHeight="46.0" prefWidth="117.0" text="Limpiar Texto" />
            <TableView fx:id="tablacliente" layoutX="309.0" layoutY="14.0" prefHeight="383.0" prefWidth="343.0">
              <columns>
                <TableColumn fx:id="clienteid" prefWidth="75.0" text="ID" />
                <TableColumn fx:id="nombrescol" prefWidth="139.0" text="NOMBRES" />
                  <TableColumn fx:id="apellidoscol" prefWidth="128.0" text="APELLIDOS" />
              </columns>
            </TableView>
            <Button fx:id="mts" layoutX="165.0" layoutY="14.0" mnemonicParsing="false" onAction="#mostrartodo" prefHeight="46.0" prefWidth="117.0" text="Mostrar" />
            <TextField fx:id="bq" layoutX="309.0" layoutY="417.0" prefHeight="25.0" prefWidth="241.0" />
            <Button fx:id="bqd" layoutX="576.0" layoutY="417.0" mnemonicParsing="false" onAction="#buscanm" prefHeight="25.0" prefWidth="132.0" text="BUSCAR NOMBRE" />
            <Button fx:id="bqape" layoutX="725.0" layoutY="417.0" mnemonicParsing="false" onAction="#buscaape" prefHeight="25.0" prefWidth="156.0" text="BUSCAR POR APELLIDO" />
            <TextField layoutX="729.0" layoutY="359.0" />
         </children>
      </Pane>
   </children>
</AnchorPane>

我不知道方法seleccionapellido会发生什么,它与方法seleccionnombre一样,如果有人可以帮助我,那将是目前最伟大的事情。

1 个答案:

答案 0 :(得分:0)

我只需将SQL Server Driver更改为上一个版本,就是这样,然后在Eclippse中清理项目。