java报数据越界的错

年轻的小老弟 2016-04-06 04:12:57
package StudentInfo;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.sql.*;

public class StudentInfo {
JFrame f=new JFrame("学生信息");
JPanel p1=new JPanel(new GridLayout(3,1,20,10));
JPanel p11=new JPanel();
JPanel p12=new JPanel();
JPanel p13=new JPanel();
JLabel l1=new JLabel("学号:");
JLabel l2=new JLabel("姓名:");
JLabel l3=new JLabel("专业:");
JTextField tf1=new JTextField(10);
JTextField tf2=new JTextField(10);
JTextField tf3=new JTextField(10);
String[] colname={"学号","姓名","专业"};
DefaultTableModel mod=new DefaultTableModel(null,colname);
JTable tab=new JTable(mod);
JScrollPane sp=new JScrollPane(tab);
JPanel p2=new JPanel(new GridLayout(4,1,20,20));
JButton b1=new JButton("插入");
JButton b2=new JButton("更新");
JButton b3=new JButton("删除");
JButton b4=new JButton("查询");
PreparedStatement ps1=null,ps2=null,ps3=null;
Statement sm=null;
Connection conn=null;
ResultSet rs=null;

StudentInfo(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=StudentInfo","sa","12348765");
sm=conn.createStatement();
ps1=conn.prepareStatement("insert into Student values(?,?,?)");
ps3=conn.prepareStatement("select * from Student where id like ? or name like ? or profession like ?");
ps2=conn.prepareStatement("delete from Student where id=?");
init();
}catch(SQLException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public void init(){
f.setSize(500, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocation(600,200);
f.setVisible(true);
f.setResizable(false);
f.add("North",p1);
f.add("Center",sp);
f.add("East",p2);
p11.add(l1); p11.add(tf1);
p12.add(l2); p12.add(tf2);
p13.add(l3); p13.add(tf3);
p1.add(p11); p1.add(p12); p1.add(p13);
p2.add(b1); p2.add(b2); p2.add(b3); p2.add(b4);
Action act=new Action();
b1.addActionListener(act);
b2.addActionListener(act);
b3.addActionListener(act);
b4.addActionListener(act);
mod.addTableModelListener(new TAction());
}
private class TAction implements TableModelListener{
public void tableChanged(TableModelEvent e){
if(e.getType()==0){
/*try{
int n=tab.getEditingRow();
int c=tab.getEditingColumn();
String v=tab.getValueAt(n, 0).toString();
String va=tab.getValueAt(n, c).toString();
String str="update Student set "+tab.getEditingColumn()+"="+va+"where id="+v;
sm.executeUpdate(str);
}catch(SQLException e2){
e2.printStackTrace();
}
}*/
}
}
private class Action implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
if(e.getSource()==b1){
Object[] data={tf1.getText(),tf2.getText(),tf3.getText()};
mod.addRow(data);
ps1.setInt(1, Integer.parseInt(tf1.getText()));
ps1.setString(2, tf2.getText());
ps1.setString(3, tf3.getText());
ps1.executeUpdate();
}else if(e.getSource()==b2){
int i=0;
rs=sm.executeQuery("select * from Student");
while(rs.next()){
if(i>mod.getRowCount()-1)
mod.setRowCount(mod.getRowCount()+1);
mod.setValueAt(rs.getInt("id"),i,0);
mod.setValueAt(rs.getString("name"),i,1);
mod.setValueAt(rs.getString("profession"), i, 2);
i++;
}
}else if(e.getSource()==b3){
ps2.setInt(1,Integer.parseInt(tab.getValueAt(tab.getSelectedRow(), 0).toString()));
ps2.executeUpdate();
mod.removeRow(tab.getSelectedRow());
}else if(e.getSource()==b4){
if(tf1.getText()==""){
ps3.setInt(1, 00000000000000000);
}
else{
ps3.setInt(1, Integer.parseInt(tf1.getText()));
}
if(tf2.getText().matches("\\s+"))
ps3.setString(2, "");
else
ps3.setString(2, tf2.getText());
if(tf3.getText().matches("\\s+"))
ps3.setString(3, "");
else
ps3.setString(3, tf3.getText());
rs=ps3.executeQuery();
mod.setRowCount(0);
int i=0;
while(rs.next()){
if(i>mod.getRowCount()-1)
mod.setRowCount(mod.getRowCount()+1);
mod.setValueAt(rs.getInt("id"),i,0);
mod.setValueAt(rs.getString("name"),i,1);
mod.setValueAt(rs.getString("profession"), i, 2);
i++;
}
}
}catch(SQLException e1){
e1.printStackTrace();
}finally{
try{
if(rs!=null)
rs.close();
rs=null;
}catch(SQLException e1){
e1.printStackTrace();
}
}
}
}
public static void main(String[] args){
new StudentInfo();
}
}

只要添加那一段代码就会报数组越界的错,不添加就没问题
头快晕了
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementData(Unknown Source)
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
at javax.swing.JTable.getValueAt(Unknown Source)
at StudentInfo.StudentInfo$TAction.tableChanged(StudentInfo.java:77)
at javax.swing.table.AbstractTableModel.fireTableChanged(Unknown Source)
at javax.swing.table.AbstractTableModel.fireTableCellUpdated(Unknown Source)
at javax.swing.table.DefaultTableModel.setValueAt(Unknown Source)
at StudentInfo.StudentInfo$Action.actionPerformed(StudentInfo.java:103)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
...全文
183 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
年轻的小老弟 2016-04-06
  • 打赏
  • 举报
回复
引用 2 楼 qnmdcsdn 的回复:
打印出来n和c的值看看


一点更新按钮就报错。
然后在n和c下面添加了println,然后触发就这样
  • 打赏
  • 举报
回复
引用 3 楼 a396100265 的回复:
[quote=引用 2 楼 qnmdcsdn 的回复:] 打印出来n和c的值看看
一点更新按钮就报错。 然后在n和c下面添加了println,然后触发就这样[/quote] 1附件有语法错误,sql语句拼的有问题吧,打印出来看看
年轻的小老弟 2016-04-06
  • 打赏
  • 举报
回复
还有一个问题就是113行那里,如果tf1不填的话,不会执行if下的语句而去执行else的语句,然后就报错了。
  • 打赏
  • 举报
回复
打印出来n和c的值看看

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧