Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kako da pozovem funkciju

[es] :: Java :: kako da pozovem funkciju

[ Pregleda: 799 | Odgovora: 5 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mvasicdo
mvasicdo
Doboj

Član broj: 104294
Poruke: 210
*.teol.net.



Profil

icon kako da pozovem funkciju26.10.2006. u 12:34

ljudi imajte na umu da sam nov sto se tice jave kad ovo budete citali ;-)

kako rezultat ove funkcije da prikazem u nekoj tabeli:

Code:
public ResultSet upitSelekcije(String upit) {
        ResultSet tabela=null;
        try {
            Statement statement=veza.createStatement();
            tabela=statement.executeQuery(upit);
        } catch (SQLException sqle) { sqle.printStackTrace(); } 
        return tabela;
    }


ova funkcija mi se nalazi u klasi koja se zove npr. "Konekcija",
prvo inicijalizujem tu klasu:
Konekcija k = new Konekcija()

pa onda pozovem funkciju:
k.upitSelekcije("select * from tabela1");

kako sada da podatke dobijene ovim upitom prikazem u tabeli (JTable) !???
26.10.2006. u 12:34 

rj444
Radomir Jakovljevic
Beograd

Član broj: 48212
Poruke: 353
*.etf.bg.ac.yu.



Profil

icon Re: kako da pozovem funkciju26.10.2006. u 13:05
Ako hoces najjednostavnije i najnefleksibilnije resenje za staticko prikazivanje podataka i nista drugo onda mozes ovako da uradis:

Kada dobije objekat klase ResultSet, posle poziva metode upitSelekcije, on sadrzi redove iz baze koje su rezultat upita. Redovi sadrze one kolone koje si selektovao.
Ovde imas opis za metode klase ResultSet koje ce ti trebati: http://java.sun.com/j2se/1.5.0/docs/api/java/sql/ResultSet.html.
Obrati paznju na: get metode (getString(String imeKolone), getDouble(String imeKolone)...), jer ces njima da dohvatas podatke iz odredjene celije tabele (vrsta+kolona). Koristices onu metodu koja se poklapa sa tipom podatka koji se nalazi u bazi.

Da bi dohvatio sve iz ResultSet-a sto ti treba, moras da iteriras po redovima koje on sadrzi. To recimo radis pomocu while petlje i metode next(). Ona vraca true, ako ima sledeceg reda. Obrati paznju na to da na pocetku treba da se pozicioniras ispred prvog reda u ResultSet-u, metodom beforeFirst().

Kod bi otprilike isao ovako:

Code:

ResultSet rs = k.upitSelekcije(upit);

int redova = 0;
Object[][] data = new Object[20][2]; //ovo 20 moze da se lepse odredi kao velicina ovog ResultSet-a, zaboravio sam ime metode
try{
    rs.beforeFirst();
    while (rs.next()) {   //dok ima redova vrti se u petlji
        //dohvatis ime iz jednog reda
        String ime = rs.getString("Ime");
        String prezime = rs.getString("Prezime");
        
        //ovde sada ide kod za rad sa podacima iz tabele
        data[redova][1]=ime;
        data[redova][2]=prezime;
        redova++;
    }
    Object[] kol = { "Ime", "Prezime" }; //zaglavlje tabele
    JTable t = new JTable(data,kol); //to je ta tabela
} catch (SQLException e) {}


Sto se tice koda za ubacivanje u tabelu, to ces raditi ovako:

Kreiraces jedan dvodimenzionalni niz tipa Object, recimo: Object[][] data = new Object[redova][2]; //ovde je 2 jer sam imao kolone Ime i Prezime, inace staviti onoliko koliko treba.
U ovoj gore petlji ubacujes podatke u niz, a posle samo kreiras objekat JTable pomocu konstruktora koji prihvata ovaj niz kao parametar i to je to.
Prethodno ti treba i jedan Object[] kolone = {"Ime", "Prezime"}, da bi mogao da kreiras JTable. Pogledaj ovde za detalje: http://java.sun.com/j2se/1.5.0...javax/swing/JTable.html#JTable

Kao sto rekoh ovo je skroz staticki prikaz i nemas mnogo mogucnosti kada tabelu prikazes, ako ti je potrebno vise, onda pogledaj nesto o MVC-u i interfejsima kao sto je TableModel, odnosno njegovim implementacijama: AbstractTableModel i DefaultTableModel.

Pozdrav
26.10.2006. u 13:05 

nemnesic
IT Software Developer for SFCC
Vranje - Florida

Moderator
Član broj: 44355
Poruke: 379
*.com
Via: [es] mailing liste



Profil

icon Re: kako da pozovem funkciju26.10.2006. u 13:19
http://forum.java.sun.com/thre...eadIDa0576&messageID354722

Code:

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class ResultSetTable {
public static void main(String args[]){
ResultSetFrame frame=new ResultSetFrame();
frame.setVisible(true);
}

}



abstract class ResultSetTableModel extends AbstractTableModel{
public ResultSetTableModel(ResultSet aResultSet)
{
rs=aResultSet;
try{
rsmd=rs.getMetaData();
}
catch(SQLException e){
System.out.println("Error :"+e);
}
}
public String getColumnName(int c){
try{
return rsmd.getColumnName(c+1);
}catch(SQLException e){
System.out.println("Error :"+e);
return "";
}
}
public int getColumnCount()
{
try{
return rsmd.getColumnCount();
}catch(SQLException e){
System.out.println("Error :"+e);
return 0;
}
}

protected ResultSet getResultSet()
{
return rs;
}
private ResultSet rs;
private ResultSetMetaData rsmd;

}




class ScrollingResultSetTableModel extends ResultSetTableModel
{
public ScrollingResultSetTableModel(ResultSet aResultSet){
super(aResultSet);
}
public Object getValueAt(int r, int c){
try{
ResultSet rs=getResultSet();
rs.absolute(r+1);
return rs.getObject(c+1);
}catch(SQLException e){
System.out.println("Error "+e);
return null;
}
}
public int getRowCount()
{
try{
ResultSet rs=getResultSet();
rs.last();
return rs.getRow();
}catch(SQLException e){
System.out.println("Error "+e);
return 0;
}
}
}

class CachingResultSetTableModel extends ResultSetTableModel
{
public CachingResultSetTableModel(ResultSet aResultSet){
super(aResultSet);
try
{
cache=new ArrayList();
int cols=getColumnCount();
ResultSet rs=getResultSet();
while(rs.next())
{
Object[] row=new Object[cols];
for(int j=0;j<row.length;j++)
row[j]=rs.getObject(j+1);
cache.add(row);
}
}catch(SQLException e){
System.out.println("Error "+e);


}
}
public Object getValueAt(int r,int c){
if(r><cache.size())
return ((Object[])cache.get(r))[c];
else
return null;

}
public int getRowCount()
{
return cache.size();
}
private ArrayList cache;
}


class ResultSetFrame extends JFrame implements ActionListener{

public ResultSetFrame(){
setTitle("ResultSet");
setSize(300,200);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Container contentPane=getContentPane();
tableNames=new JComboBox();
tableNames.addActionListener(this);
JPanel p=new JPanel();
p.add(tableNames);
contentPane.add(p,"North");

try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
}catch(Exception e){
System.out.println("Error "+e);
}
try{
con=DriverManager.getConnection("jdbc:mysql://localhost/mysql","gk","gk");
/*if(SCROLLABLE)
{
stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

}
else{*/
stmt=con.createStatement();
//}
DatabaseMetaData md=con.getMetaData();
ResultSet mrs=md.getTables(null,null,null,new String[] {"TABLE"});

while(mrs.next())
tableNames.addItem(mrs.getString(3));
mrs.close();
}catch(SQLException e){
System.out.println("Error "+e);
}


}
public void actionPerformed(ActionEvent evt){
if(evt.getSource()==tableNames){
if(scrollPane !=null)
getContentPane().remove(scrollPane);
try{
String tableName=(String)tableNames.getSelectedItem();
if(rs!=null)
rs.close();
String query="select * from "+tableName;
rs=stmt.executeQuery(query);
if(SCROLLABLE)
model=new ScrollingResultSetTableModel(rs);
else
model=new CachingResultSetTableModel(rs);

JTable table=new JTable(model);
scrollPane=new JScrollPane(table);
getContentPane().add(scrollPane,"Center");
pack();
doLayout();
}catch(SQLException e){
System.out.println("Error "+e);
}

}
}
private JScrollPane scrollPane;
private ResultSetTableModel model;
private JComboBox tableNames;
private JButton nextButton;
private JButton previousButton;
private ResultSet rs;
private Connection con;
private Statement stmt;
private static boolean SCROLLABLElse;
}



--
-All programmers are playwrights and all computers are lousy actors.
26.10.2006. u 13:19 

mvasicdo
mvasicdo
Doboj

Član broj: 104294
Poruke: 210
*.teol.net.



Profil

icon Re: kako da pozovem funkciju26.10.2006. u 13:44
hvala vam puno, vjerujem da ce mi dosta pomoci ...
26.10.2006. u 13:44 

mvasicdo
mvasicdo
Doboj

Član broj: 104294
Poruke: 210
*.teol.net.



Profil

icon Re: kako da pozovem funkciju27.10.2006. u 08:44
Citat:
Ako hoces najjednostavnije i najnefleksibilnije resenje za staticko
prikazivanje podataka i nista drugo onda mozes ovako da uradis:



treba mi najbolji i najfleksibilniji nacin na koji se baza povezuje sa aplikacijom...
27.10.2006. u 08:44 

zmau
Dragan Jovanović
programer, SETCCE

Član broj: 80834
Poruke: 155
212.200.115.*

Sajt: www.jovanovic.fotopic.net


Profil

icon Re: kako da pozovem funkciju27.10.2006. u 23:08
Bolji i fleksibilnij način je otprilike ovo što ti je nemnesic ispisao.
Znači :
1. nađi u Javinom tutorialu odeljak o klasi JTable
2. prouči interface TableModel i klasu AbstractTableModel
3. napravi svoj TableModel koji podatke vuče iz ResultSet-a. Trebaće ti neke metode iz TableModel specifikacije plus poneka metoda za okidanje upita, odnosno punjenje resultSet-a.
4. Ako hoćeš još lepše, obrati pažnju na klasu TableSorter u tutorialu.
it works on my machine
27.10.2006. u 23:08 

[es] :: Java :: kako da pozovem funkciju

[ Pregleda: 799 | Odgovora: 5 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.