【问题标题】:java.lang.illegalargumentexception:cannot set a null TableModeljava.lang.illegalargumentexception:无法设置空表模型
【发布时间】:2014-02-21 06:39:53
【问题描述】:

我已经制作了一个 jframe,我必须在其中提供药物名称和制造商名称,然后单击搜索按钮.. 它将从 mysql 数据库中获取数据并显示在 jtable 中。 jframe 看起来像这样:

但是当我只给出药物名称并单击搜索按钮时。它没有获取数据,它只是从数据库中获取列名..:

当我同时给出两个值时:java.lang.illegalargumentexception:cannot set a null TableModel:

我的 srch_btnActionPerformed 方法是:

private void srch_btnActionPerformed(java.awt.event.ActionEvent evt)         {                                         
// TODO add your handling code here:
/*if((jTextField1.getText())!=null || (jTextField2.getText())!=null)
{*/
String sql="select * from medicine where med_name=? or manufacturer_name=?";
try{
pst=conn.prepareStatement(sql);
pst.setString(1, jTextField1.getText());
pst.setString(2,jTextField2.getText());
rs=pst.executeQuery();


if(rs.next()){
jTable1.setModel(DbUtils.resultSetToTableModel(rs));

}
else 
{
JOptionPane.showMessageDialog(null, "No entry with such names in DataBase!");
jTextField1.setText(null);
jTextField2.setText(null);
}

}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,e);

}

/* */
}            

请帮忙..

【问题讨论】:

  • 调试您的 DbUtils.resultSetToTableModel(rs) 以查看它是否返回非空值
  • 这是调试: 没有 /usr/lib/jvm/java-7-openjdk-i386/jre/lib/netx.jar 的文件 没有 /usr/lib/jvm/ 的文件java-7-openjdk-i386/jre/lib/plugin.jar 没有/usr/lib/jvm/java-7-openjdk-i386/jre/lib/jfr.jar的文件

标签: java mysql swing exception jtable


【解决方案1】:

您可以简单地修复它....在您的数据库中不要为日期添加日期设置空值,那么如果有任何其他您没有特别提到的类型的长度这些属性也不能是空值,这将是可以的/p>

【讨论】:

    【解决方案2】:

    要在你的 sql 查询中传递 null, 你可以替换

    pst.setString(1, jTextField1.getText());
    pst.setString(2,jTextField2.getText());
    

    通过以下代码:

    if ( jTextField1.getText() == null)
        pst.setNull(1, Types.VARCHAR);
    else
        pst.setString(1, jTextField1.getText());
    
    if ( jTextField2.getText() == null)
        pst.setNull(2, Types.VARCHAR);
    else
        pst.setString(2, jTextField2.getText());
    

    【讨论】:

    • 如何编写代码 f 以通过运行 where 子句查询来获取 jtable 中的数据 .. 因为每当 m 这样做时,它不会在 jtable 中给我任何数据..它只是显示列名。
    【解决方案3】:

    试试这样的:

    //全局声明

    private Vector<Vector<String>> data; //used for data from database
    private Vector<String> header; //used to store data header
    

    //在表单加载时只显示标题

    //create header for the table
    header = new Vector<String>();
    header.add("Column1"); 
    header.add("Column2");
    ...
    model=new DefaultTableModel(data,header);
    table = new JTable(model);
    

    //在actionPerformed()中

    public void actionPerformed(ActionEvent ae){
        if(ae.getSource()==search){
    data=get();
    
            for(int i=0;i<count;i++){
            Object[] d={data.get(i).get(0),data.get(i).get(1),data.get(i).get(2)};
            model.addRow(d);
    }
    }
        }
    

    这将帮助您从数据库中获取数据

    get(){
    Vector<Vector<String>> doublevector = new Vector<Vector<String>>();
    
    Connection conn = dbConnection();//Your Database connection code
    PreparedStatement pre1 = conn.prepareStatement("select * from Table");
    
    ResultSet rs1 = pre1.executeQuery();
    while(rs1.next())
    {
    Vector<String> singlevector = new Vector<String>();
    singlevector.add(rs1.getString(1)); 
    singlevector.add(rs1.getString(2)); 
    ....
    doublevector.add(singlevector);
    }
    
    return doublevector;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2016-08-02
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2013-12-20
      • 2021-09-28
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多