2014-01-29 38 views
1

我已经做了一个jframe,我必须提供药品名称和制造商名称,然后单击搜索按钮.. 它会从mysql数据库中提取数据并在jtable中显示。 JFrame中看起来是这样的: enter image description herejava.lang.illegalargumentexception:不能设置null TableModel

,但是当我给唯一药物名称,然后单击搜索button.its不获取数据,它只是从数据库中获取的列名..: enter image description here

当我给两个值及其捐赠:java.lang.IllegalArgumentException异常:不能设置一个空的TableModel: enter image description here

我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); 

} 

/* */ 
}    

请帮助..

+1

调试您的DbUtils.resultSetToTableModel(rs),看它是否返回非空值 – sadhu

+0

这是debug:没有文件/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的文件 – AM26

回答

2

尝试是这样的:

//全局声明

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

头// in 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; 
} 
0

要通过空在SQL查询, 您可以通过下面的代码替换

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()); 
+0

如何通过运行where子句查询来编写代码以获取jtable中的数据。 。因为每当m doin,所以它不给我任何数据在jtable..its只显示列名称。 – AM26

相关问题