2014-01-29 2 views
1

Я создал jframe, где мне нужно указать название и название производителя, затем нажмите кнопку поиска. и он будет извлекать данные из базы данных mysql и показать в jtable. фрейму выглядит следующим образом: enter image description herejava.lang.illegalargumentexception: не может установить нуль 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), чтобы узнать, возвращает ли он значение null-null – 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

как написать коды fto, чтобы получить данные в jtable, выполнив запрос предложения where. bcause всякий раз, когда вы делаете это так, чтобы он не дал мне никаких данных в jtable. Он просто показывает имена столбцов. – AM26

Смежные вопросы