繁体   English   中英

java.lang.illegalargumentException:无法设置空的TableModel

[英]java.lang.illegalargumentexception:cannot set a null TableModel

我做了一个jframe,其中我必须提供药品名称和制造商名称,然后单击搜索按钮..它将从mysql数据库中获取数据并显示在jtable中。 jframe看起来像这样: 在此处输入图片说明

但是,当我只给出药物名称并单击“搜索”按钮时。它不提取数据,而只是从数据库中提取列名。 在此处输入图片说明

当我给两个值都给它时:java.lang.illegalargumentexception:无法设置一个空的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);

}

/* */
}            

请帮忙..

尝试这样的事情:

//全球宣言

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;
}

要在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());

只需修复即可。...在数据库中,不要为添加日期设置空值,那么如果您没有特别提到的其他类型的长度,则这些属性也不能为空,这也可以

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM