小弟想用 snumber 将相关的两个表的内容返回到结果集,并显示在JTable的对应列,找不到问题
多谢大牛们~~~
if (e.getSource() == jbTwo) { // jt.removeAll(); for (int i = 0; i < jt.getRowCount(); i++) { String t_Num = jt.getValueAt(i, 0).toString();
int t_Math = Integer.parseInt(jt.getValueAt(i, 10).toString());
int t_Politic = Integer.parseInt(jt.getValueAt(i, 11)
.toString());
int t_English = Integer.parseInt(jt.getValueAt(i, 12)
.toString());
int t_FMajor = Integer
.parseInt(jt.getValueAt(i, 13).toString());
int total = t_Math + t_Politic + t_English + t_FMajor;
// System.out.println(total);
if (total > 250) {
sql = "select student.snumber,sname,ssex,sage,spolity,sthisyear,sedubackgroud,sroot,mname,scategory,maths,english,politics,f_major from student,firsttest where student.snumber =firsttest.snumber and student.snumber='0001'"; try {
oo.ps = oo.con.prepareStatement(sql);
oo.ps.setString(1, t_Num);
oo.rs = oo.ps.executeQuery();
// oo.stmt = oo.con.createStatement();
// oo.rs = oo.stmt.executeQuery(sql);
while (oo.rs.next()) {
// String t_Number =
// oo.rs.getString("student.snumber");
String t_Name = oo.rs.getString("Sname");
String t_Sex = oo.rs.getString("Ssex");
String t_Age = oo.rs.getString("Sage");
String t_Polity = oo.rs.getString("Spolity");
String t_Thisyear = oo.rs.getString("Sthisyear");
String t_EduBackgroud = oo.rs
.getString("Sedubackgroud");
String t_Root = oo.rs.getString("Sroot");
String t_Major = oo.rs.getString("Mname");
String t_Category = oo.rs.getString("Scategory");
String t_maths = oo.rs.getString("maths");
String t_english = oo.rs.getString("english");
String t_politics = oo.rs.getString("politics");
String t_major = oo.rs.getString("f_major");
// System.out.println(t_Num + " " + t_Name + " "
// + t_Sex + " " + t_Age + " " + t_Polity
// + " " + t_Thisyear + " " + t_EduBackgroud
// + " " + t_Root + " " + t_Major + " "
// + t_Category + " " + t_maths + " "
// + t_english + " " + t_politics + " "
// + t_major); String[] Info = { t_Num, t_Name, t_Sex, t_Age,
t_Polity, t_Thisyear, t_EduBackgroud,
t_Root, t_Major, t_Category, t_maths,
t_english, t_politics, t_major };
model.addRow(Info);
jt.setModel(model);
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
错误如下:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1023)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3057)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:766)
at com.AdministratorSystem.actionPerformed(AdministratorSystem.java:144)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
多谢大牛们~~~
if (e.getSource() == jbTwo) { // jt.removeAll(); for (int i = 0; i < jt.getRowCount(); i++) { String t_Num = jt.getValueAt(i, 0).toString();
int t_Math = Integer.parseInt(jt.getValueAt(i, 10).toString());
int t_Politic = Integer.parseInt(jt.getValueAt(i, 11)
.toString());
int t_English = Integer.parseInt(jt.getValueAt(i, 12)
.toString());
int t_FMajor = Integer
.parseInt(jt.getValueAt(i, 13).toString());
int total = t_Math + t_Politic + t_English + t_FMajor;
// System.out.println(total);
if (total > 250) {
sql = "select student.snumber,sname,ssex,sage,spolity,sthisyear,sedubackgroud,sroot,mname,scategory,maths,english,politics,f_major from student,firsttest where student.snumber =firsttest.snumber and student.snumber='0001'"; try {
oo.ps = oo.con.prepareStatement(sql);
oo.ps.setString(1, t_Num);
oo.rs = oo.ps.executeQuery();
// oo.stmt = oo.con.createStatement();
// oo.rs = oo.stmt.executeQuery(sql);
while (oo.rs.next()) {
// String t_Number =
// oo.rs.getString("student.snumber");
String t_Name = oo.rs.getString("Sname");
String t_Sex = oo.rs.getString("Ssex");
String t_Age = oo.rs.getString("Sage");
String t_Polity = oo.rs.getString("Spolity");
String t_Thisyear = oo.rs.getString("Sthisyear");
String t_EduBackgroud = oo.rs
.getString("Sedubackgroud");
String t_Root = oo.rs.getString("Sroot");
String t_Major = oo.rs.getString("Mname");
String t_Category = oo.rs.getString("Scategory");
String t_maths = oo.rs.getString("maths");
String t_english = oo.rs.getString("english");
String t_politics = oo.rs.getString("politics");
String t_major = oo.rs.getString("f_major");
// System.out.println(t_Num + " " + t_Name + " "
// + t_Sex + " " + t_Age + " " + t_Polity
// + " " + t_Thisyear + " " + t_EduBackgroud
// + " " + t_Root + " " + t_Major + " "
// + t_Category + " " + t_maths + " "
// + t_english + " " + t_politics + " "
// + t_major); String[] Info = { t_Num, t_Name, t_Sex, t_Age,
t_Polity, t_Thisyear, t_EduBackgroud,
t_Root, t_Major, t_Category, t_maths,
t_english, t_politics, t_major };
model.addRow(Info);
jt.setModel(model);
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
错误如下:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1023)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3057)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:766)
at com.AdministratorSystem.actionPerformed(AdministratorSystem.java:144)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
楼主【aaronhanfei】截止到2008-06-30 19:26:21的历史汇总数据(不包括此帖):
发帖数:5 发帖分:210
结贴数:5 结贴分:210
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
sql = "select student.snumber,sname,ssex,sage,spolity,sthisyear,sedubackgroud,sroot,mname,scategory,maths,english,politics,f_major from student,firsttest where student.snumber =firsttest.snumber and student.snumber=?";
异常为:
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-01000: maximum open cursors exceeded
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3149)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:216)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:91)
at com.AdministratorSystem.actionPerformed(AdministratorSystem.java:145)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-01000: maximum open cursors exceeded
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3149)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:216)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:91)
at com.AdministratorSystem.actionPerformed(AdministratorSystem.java:145)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-01000: maximum open cursors exceeded
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3149)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:216)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:91)
at com.AdministratorSystem.actionPerformed(AdministratorSystem.java:145)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1023)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3057)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:766)
------------
是连接数据库或读取数据库的问题,找几个关键处,打出测试信息,看看便知
通过查找相关文档,原来一个 statement 通常会对应一个 db cursor ,如果大量使用 statement 而不关闭就会引起此异常,关闭的代码很简单 :
if(rs!=null) //ResultSet
try {
rs.close();
} catch (SQLException e1) {
logger.error(e1.getMessage());
} if(pst!=null) //PreparedStatement
try {
pst.close();
} catch (SQLException e1) {
logger.error(e1.getMessage());
}
只需在initSID.ora文件中加上一行
open_cursors = ****
但是,很可能是由于你的程序或数据库的结构存在着一些潜伏的问题,如jlandzpa所说,没有关闭游标等。我的程序有一阵一直在报这个错误,把OPEN_CURSOR加大到了300甚至1000还在出错,后来发现是表的STORAGE设置有问题。建议你查一下自己的程序。Good Luck!