package com.jcgl.model;
import com.jcgl.db.*; import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout; import javax.swing.*; import com.jcgl.model.InBookModel;
import com.jcgl.model.RowModify;
import com.jcgl.model.YuDingModel;
import com.jcgl.tools.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;public class mydown extends JDialog implements ActionListener{
JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7,jl8,jl9;

JButton jb1,jb2,jb3,jb4,jb5;
JPanel jp1,jp2,jp3,p2;
String localId;
JTable jtable;
JScrollPane jsp;
public InBookModel yum;
Vector str1,str2,str3,str4,str5,str6,str7,str8,str10;
JComboBox jcb1=new JComboBox();
JComboBox jcb2=new JComboBox();
JComboBox jcb3=new JComboBox();;
JComboBox jcb4=new JComboBox();;
JComboBox jcb5=new JComboBox();
JComboBox jcb6=new JComboBox();
JComboBox jcb7=new JComboBox();

public mydown()
{
super();
jl1=new JLabel("KeChengMing");
jl2=new JLabel("BookName");
jl3=new JLabel("ISBN");
jl4=new JLabel("ChuBanS");
jl5=new JLabel("ClassName");
jl6=new JLabel("ShuLiang");
jl7=new JLabel("DeptName");
//jl8=new JLabel("Handler");



//jtf8=new JTextField();
//jtf9=new JTextField("未通过");


jb1=new JButton("确定");
jb1.addActionListener(this);
jb2=new JButton("取消");
jb2.addActionListener(this);

jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();

jp1.setLayout(new GridLayout(7,1));
jp2.setLayout(new GridLayout(7,1));

jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);
jp1.add(jl6);
jp1.add(jl7);
//jp1.add(jl8);
str4=new Vector();
SqlHelper sh=new SqlHelper();
String sql="select ChuBanS from YuDing_Info where 1=?";
String parars[]={"1"};
ResultSet rs=sh.query(sql, parars);
ResultSetMetaData rsmd;
try {
rsmd = rs.getMetaData();
while(rs.next())
{
for(int i=0;i<rsmd.getColumnCount();i++)
{
jcb4.addItem(rs.getString(i+1));
//str3.add(rs.getString(i+1));
}

}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally 
{sh.close();
}





//jp2.add(jtf1);
jp2.add(jcb1);
jp2.add(jcb2);
jp2.add(jcb3);
jp2.add(jcb4);
jp2.add(jcb5);
jp2.add(jcb6);
jp2.add(jcb7);
//jp2.add(jtf8);

jp3.add(jb1);
jp3.add(jb2);

this.add(jp1, BorderLayout.WEST);
this.add(jp2, BorderLayout.CENTER);
this.add(jp3, BorderLayout.SOUTH);

this.setSize(300, 250);
this.setVisible(true);
}

public static void main(String[] args){


mydown md=new mydown();
md.addEventHandler();
md.addEventHandler1();

    //m.douwnMenu("bookname",arg);   }
public void addEventHandler()
{
    jcb4.addItemListener(new ItemListener()
    {
        public void itemStateChanged(ItemEvent arg0) 
        {
            String index=jcb4.getSelectedItem().toString(); 
           
            jcb5.removeAllItems();
            System.out.println("======="+index);
            
            SqlHelper dh=new SqlHelper();
String sql="select ClassName from YuDing_Info where ChuBanS=?";
String parars[]={index};
ResultSet rs=dh.query(sql, parars);
ResultSetMetaData rsmd;
str5=new Vector();
try {
rsmd = rs.getMetaData();
while(rs.next())
{
for(int i=0;i<rsmd.getColumnCount();i++)
{

jcb5.addItem(rs.getString(i+1));
}

}


} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally 
{dh.close();
}
            
            
            
            
            
                
            
        }
    });   
            
    
    
}public void addEventHandler1()
{
jcb5.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent arg0) 
    {
        String index=jcb5.getSelectedItem().toString(); 
       
        jcb3.removeAllItems();
        System.out.println("======="+index);
        
        SqlHelper dh=new SqlHelper();
String sql="select ISBN from YuDing_Info where ClassName=?";
String parars[]={index};
ResultSet rs=dh.query(sql, parars);
System.out.println("======"+rs);
ResultSetMetaData rsmd;
str3=new Vector();
try {
rsmd = rs.getMetaData();
while(rs.next())
{
for(int i=0;i<rsmd.getColumnCount();i++)
{

jcb3.addItem(rs.getString(i+1));
//System.out.println("======"+rs.getString(i+1));
}

}


} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally 
{dh.close();
}
    }
    });
}
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}
}
/**
 * 对数据库操作的类
 */
package com.jcgl.db;
import java.util.*;
import java.sql.*;
   public class SqlHelper {


//定义需要的对象
PreparedStatement ps=null;
ResultSet rs=null;
Connection ct=null;
String driverName="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:mytest";
String user="sa";
String passwd="sa";
//构造函数初始化ct

public SqlHelper()
{
try {
Class.forName(driverName);
ct=DriverManager.getConnection(url,user,passwd);

} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
//把对数据库的增删改 写一个函数
public boolean exeUpdate(String sql,String[] parars)
{
boolean b=true;
try {
ps=ct.prepareStatement(sql);
for(int i=0;i<parars.length;i++)
{
ps.setString(i+1, parars[i]);
}
ps.executeUpdate();
} catch (Exception e) {
b=false;
e.printStackTrace();
// TODO: handle exception
}
return b;
}
public ResultSet query(String sql,String []parars)
{
try {
ps=ct.prepareStatement(sql);
for(int i=0;i<parars.length;i++)
{
ps.setString(i+1, parars[i]);
}
rs=ps.executeQuery();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return rs;
}

public void close()
{
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(ct!=null) ct.close();

} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}}
YuDing_Info表的列为 id int,KechengMing vachar,ISBN vachar,ChuBanS vachar,ClassName vachar,ShuLiang int,DeptName vachar,Statement vachar
只写一个监听不报错,写2个监听就提示空指针,可是测试,程序还能执行到第二个rs,这个到底是怎么搞的?
我的监听没写好吗?
求帮忙看看啊~~~

解决方案 »

  1.   

    public void addEventHandler()
    {
      jcb4.addItemListener(new ItemListener()
      {
      public void itemStateChanged(ItemEvent arg0)  
      {
      String index=jcb4.getSelectedItem().toString();  
        
      jcb5.removeAllItems();
      System.out.println("======="+index);
        
      SqlHelper dh=new SqlHelper();
    String sql="select ClassName from YuDing_Info where ChuBanS=?";
    String parars[]={index};
    ResultSet rs=dh.query(sql, parars);
    ResultSetMetaData rsmd;
    str5=new Vector();
    try {
    rsmd = rs.getMetaData();
    while(rs.next())
    {
    for(int i=0;i<rsmd.getColumnCount();i++)
    {jcb5.addItem(rs.getString(i+1));
    }}
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    finally  
    {dh.close();
    }    
    }
      });   
    }
    ==============这个定义的是JComboBox jcb5对JComboBox jcb4的监听,对应的label 是ClassName对ChuBanS的监听
    public void addEventHandler1()
    {
    jcb5.addItemListener(new ItemListener()
    {
    public void itemStateChanged(ItemEvent arg0)  
      {
      String index=jcb5.getSelectedItem().toString();  
        
      jcb3.removeAllItems();
      System.out.println("======="+index);
        
      SqlHelper dh=new SqlHelper();
    String sql="select ISBN from YuDing_Info where ClassName=?";
    String parars[]={index};
    ResultSet rs=dh.query(sql, parars);
    System.out.println("======"+rs);
    ResultSetMetaData rsmd;
    str3=new Vector();
    try {
    rsmd = rs.getMetaData();
    while(rs.next())
    {
    for(int i=0;i<rsmd.getColumnCount();i++)
    {jcb3.addItem(rs.getString(i+1));
    //System.out.println("======"+rs.getString(i+1));
    }}
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    finally  
    {dh.close();
    }
      }
      });
    }
    ==============这个定义的是JComboBox jcb3对JComboBox jcb5的监听,对应的label 是ISBN对ClassName的监听我想实现的是通过先选择ChuBanS后,ClassName根据所选的ChuBanS查询数据库,在查询结果中选择ClassName,ISBN根据所选的ClassName查询数据库,在查询结果中选择ISBN我只加一个监听,能运行,加2个监听就报错,问题可能就在这2个监听之间的关系没写好, 不知道怎么写
      

  2.   

    就是一级菜单更新后,对二级菜单响应remove的时候,这个响应也触发了三级菜单的监听,所以会返回二级菜单报空指针的错误
      

  3.   

    就是这句jcb5.removeAllItems();