2012-05-30 2 views
0

Я пытаюсь отобразить данные из базы данных в JTable.Как получить данные из базы данных в JTable?

Это часть моего ActionListener моего основного класса ...

if(e.getSource()==jjb) 
{ 
    String j[] = null; 
    Vector r = new Vector(); 
    Vector finl = new Vector(); 
    try 
    { 
     d10.connection(); 
     int b = d10.getclmncnt(); 
     for(int g = 1; g<=b+1;g++) 
     { 
      j = new String[g]; 

     } 
     for(int g = 1; g<=b;g++) 
     { 
      j[g] = d10.gettableclmn(g); 
     } 
     Vector v = new Vector(); 
     for(int g = 1; g<=b;g++) 
     { 
      v.addElement(j[g]); 
     } 
     int a = d10.getrwcnt(); 
     System.out.println("no of rows are :::: "+a); 

     r = d10.getalldata(b); 

     JTable t = new JTable(r,v); 
     t.setLayout(null); 
     TableColumn tc; 
     for(int hh = 0;hh<t.getColumnCount();hh++) 
     {    
      tc = t.getColumnModel().getColumn(hh); 
      tc.setWidth(75); 
     } 
     JScrollPane js = new JScrollPane(t); 

     js.setBounds(10, 100, 1000, 500); 
     p5.add(js); 
     p5.repaint(); 
    } 
    catch (ClassNotFoundException e1) 
    { 
     e1.printStackTrace(); 
    } 
    catch (SQLException e1) 
    { 
     e1.printStackTrace(); 
    } 
} 

Это мой класс для связи с базой данных ...

public void connection()throws SQLException, ClassNotFoundException 
{ 
    Class.forName("oracle.jdbc.driver.OracleDriver"); 
    System.out.println("Driver Loaded"); 
    Properties p = new Properties(); 
    p.setProperty("user","system"); 
    p.setProperty("password", "oracle10"); 
    p.setProperty("url","jdbc:oracle:thin:@Suneel-PC:1521:XE"); 
    c = DriverManager.getConnection(p.getProperty("url"),p.getProperty("user"),p.getProperty("password")); 
    System.out.println("connected"); 
} 

public String gettableclmn(int b2) 
{ 
    String s = null; 
    int fh = b2; 
    try 
    { 
     Statement ss = c.createStatement(); 
     ResultSet rs = ss.executeQuery("select * from data"); 
     ResultSetMetaData rsmd = rs.getMetaData(); 
     s = rsmd.getColumnName(fh); 
     System.out.println("columns names are  "+rsmd.getColumnName(fh));   
    } 
    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 

    return s; 
} 

public int getclmncnt() 
{ 
    int h = 0; 

    ResultSetMetaData rsmd; 
    try { 
     Statement ss = c.createStatement(); 
     ResultSet rs = ss.executeQuery("select * from data"); 
     rsmd = rs.getMetaData(); 
     h = rsmd.getColumnCount(); 
    } 
    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 

    return h; 
} 

public Vector getalldata(int b) 
{ 
    int d = b; 
    String j = null; 
    Vector rr = new Vector(); 
    Vector v = new Vector(d); 
    try 
    { 
     Statement s = c.createStatement(); 
     ResultSet r = s.executeQuery("select * from data"); 

     while(r.next()) 
     { 
      v.add(r.getInt(1)); 
      v.add(r.getInt(2)); 
      v.add(r.getInt(3)); 
      v.add(r.getInt(4)); 
      v.add(r.getInt(5)); 
      v.add(r.getInt(6)); 
      v.add(r.getInt(7)); 
      v.add(r.getInt(8)); 
      v.add(r.getInt(9)); 
      v.add(r.getInt(10)); 
      v.add(r.getInt(11)); 
      v.add(r.getString(12)); 
     } 
     rr.add(v); 
    } 
    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 

    return rr; 
} 

public int getrwcnt() 
{ 
    ResultSet r; 
    int j = 0; 
    try 
    { 
     Statement s = c.createStatement(); 
     r = s.executeQuery("select count (*) from data"); 
     r.next(); 
     j = r.getInt(1); 
    } 
    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 

    return j; 
} 

Когда я запускаю этот код, только первый результат показан в JTable, однако, когда я вызываю function d10.getrwcnt();, он дает мне вывод как 79 строк. В чем проблема с моим кодом?

+2

Вы можете поставить жестко закодированы данные в таблицу динамически? Вы можете успешно отобразить вывод из БД (например, в командной строке)? Это похоже на две отдельные проблемы. В качестве альтернативы, для более эффективной помощи, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

1

Переместить первую строку и последнюю строку,

Vector v = new Vector(d); 
    .... 
    while(r.next()) { 
     v.add(r.getInt(1)); 
     v.add(r.getInt(2)); 
     ... 
     v.add(r.getString(12)); 
    } 

    rr.add(v); 

внутри цикла, как показано ниже,

while(r.next()) { 
     Vector v = new Vector(d); 
     v.add(r.getInt(1)); 
     v.add(r.getInt(2)); 
     ... 
     v.add(r.getString(12)); 

     rr.add(v); 
    } 

Кроме того, я могу увидеть код довольно FUBAR, пожалуйста, не Не возражайте. Вы можете сделать несколько вещей,

  • сделки с подключением надлежащим образом, попробуйте использовать некоторый пул соединений API
  • Закрыть Ваш resultSet после использования
  • Stop с использованием Vector, используйте ArrayList вместо этого, особенно когда вектор не служит каким-либо цель
  • Постарайтесь соответствовать Java Naming Convention
  • Используйте значимые переменные, не b, g, j и т.д ..
+0

Я попробовал то, что вы предложили. но все же он не работает должным образом .... ранее в JTable была добавлена ​​только 1-я строка. теперь эта же строка повторяется до тех пор, пока не будет занято количество строк. – shounak

+0

@shounak: Обновлен мой ответ. Надеюсь, теперь это сработает. –

1

Ваша проблема - это цикл getalldata.

Vector v = new Vector(d); 
    try { 

     Statement s = c.createStatement(); 
     ResultSet r = s.executeQuery("select * from data"); 

     while(r.next()) 
     //Every time when this loop gets executed you are adding 
     //data to the same vector v, instead one instance depicts one row in database, 
     //so you will have to create a new instance everytime. 
     { 
      v = new Vector(d); //create an instance for every row in database. 
      v.add(r.getInt(1)); 
      v.add(r.getInt(2)); 
      v.add(r.getInt(3)); 
      v.add(r.getInt(4)); 
      v.add(r.getInt(5)); 
      v.add(r.getInt(6)); 
      v.add(r.getInt(7)); 
      v.add(r.getInt(8)); 
      v.add(r.getInt(9)); 
      v.add(r.getInt(10)); 
      v.add(r.getInt(11)); 
      v.add(r.getString(12)); 
      rr.add(v); // add the values here 
     } 



    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

спасибо, что он сработал успешно! – shounak

+0

взгляните на [это] (http: // stackoverflow.com/questions/10620448/most-simple-code-to-populate-jtable-from-resultset/10623543 # 10623543) мой ответ – mprabhat

1

только точки, потому что вы не искали что-то о следующем

  • как вектор работы

  • как JTable работает

  • , как работает

  • чтения Связанные LayotManagers вопросы (справа внизу)

  • Dont изобретать велосипед, поиск ResultSetTableModel или TableFromDatabase

  • у вас есть проблемы с Concurency в свинг

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