请帮忙,我已经完成了更改代码的一切工作,但没有什么能真正成功,我重访此站点是因为,这里的人都是他们的专长,所以为什么我要求的不多? >
这是我的情况,在我的代码中,我通过查询调用表中的所有数据,搜索特定名称或姓氏,因此在我运行代码时,方法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
一样,如果有人可以帮助我,那将是目前最伟大的事情。
答案 0 :(得分:0)
我只需将SQL Server Driver
更改为上一个版本,就是这样,然后在Eclippse中清理项目。