![](/img/trans.png)
[英]java.lang.ArrayIndexOutOfBoundsException when creating array from JDBC ResultSet
[英]java JDBC ArrayIndexOutOfBoundsException when delete, update
因此,我嘗試創建一個通過JBDC連接到SQL Server數據庫的JTable,並具有諸如插入,刪除和編輯數據的功能。 它可以很好地與插入但更新,刪除一起使用。 你們能告訴我為什么我得到ArrayIndexOutOfBoundsException: -1
以及如何解決它。 這是我的代碼。 本書在這里是一個擴展JFRAME的類
public Book() {
initComponents();
model.addColumn("ID");
model.addColumn("Name");
model.addColumn("Type");
jTable1.setModel(model);
displayTable();
jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int row = jTable1.getSelectedRow();
txtName.setText(jTable1.getValueAt(row, 1).toString());
txtType.setText(jTable1.getValueAt(row, 2).toString());
}
});
}
public void displayTable() {
try {
model.setRowCount(0);
ConnectToSQL sql = new ConnectToSQL();
connection = sql.getConnection();
st = connection.createStatement();
ResultSet result = st.executeQuery("SELECT * FROM BOOK");
while (result.next()) {
model.addRow(new Object[]{result.getInt("id"), result.getString("name"), result.getString("type")});
}
} catch (SQLException ex) {
Logger.getLogger(Book.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
int row = jTable1.getSelectedRow();
String id = jTable1.getValueAt(row, 0).toString();
try {
// TODO add your handling code here:
st.executeUpdate("Update Book set name ='" + txtName.getText() + "',type='" + txtType.getText() + "' where id =" + id);
displayTable();
} catch (SQLException ex) {
Logger.getLogger(Book.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
int row = jTable1.getSelectedRow();
String id = jTable1.getValueAt(row, 0).toString();
try {
// TODO add your handling code here:
st.executeUpdate("Delete from book where id =" + id);
displayTable();
} catch (SQLException ex) {
Logger.getLogger(Book.class.getName()).log(Level.SEVERE, null, ex);
}
}
您會收到此錯誤,因為您沒有選擇任何行,因此要避免此問題,您必須使用:
if(jTable1.getSelectedRow() != -1){
int row = jTable1.getSelectedRow();
String id = jTable1.getValueAt(row, 0).toString();
//rest of your code here
}else{
//show an error for example, no row is selected
}
注意
代替 :
st.executeUpdate("Update Book set name ='" + txtName.getText() + "',type='" + txtType.getText() + "' where id =" + id);
您必須使用PreparedStatement避免任何語法錯誤或SQL注入
例如 :
String query = "Update Book set name = ?, type=? where id =?";
try (PreparedStatement update = connection.prepareStatement(query)) {
update.setString(1, txtName.getText());
update.setString(2, txtType.getText());
update.setInt(3, id);
update.executeUpdate();
}
另一件事,您的id是一個int
因此您不能像必須設置int那樣為查詢設置String:
String id = jTable1.getValueAt(row, 0).toString();
相反,您必須使用:
int id = Integer.parseInt(jTable1.getValueAt(row, 0).toString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.