Gå til innhold

Legge inn data fra database inn i JTable


Anbefalte innlegg

Videoannonse
Annonse

Jeg har kommet såpass langt, colonnene blir laget, men ikke radene, får melding om at resultset er for lite:

Legger ved koden på den indre klassen som er en JPanel, pga at den legges inn i en annen Frame

 

 

private class Senter extends JPanel{
	public Senter(){


	setLayout(new FlowLayout());
	setSize(455,150);

	try{

		ResultSet rs = kontroller.finnProgram();
		ResultSetMetaData md = rs.getMetaData();
		int kolonner = md.getColumnCount();

		for(int i = 1; i <= kolonner; i++){
			kolonnenavn.addElement(md.getColumnName(i));
			System.out.println("Kolonnenavn ble skrevet ut");
		}

		//while(rs.next()){
			Vector rad = new Vector(kolonner);
			for(int i = 0; i <= kolonner; i++){
				rad.addElement(rs.getObject(i));
				System.out.println("Rad ble skrevet ut");
			}
			data.addElement(rad);
		}


	catch(SQLException sqlex){
		System.out.println("Feil:"+sqlex.getMessage());
	}
	dtm = new DefaultTableModel(data, kolonnenavn);
	tabell = new JTable(dtm);
	add(new JScrollPane(tabell));;

	setVisible(true);


	}
}
public static void main(String []args){
	TabellGui gui = new TabellGui();
}

}

 

takk for all hjelp

Lenke til kommentar

Hvilke datatyper har du tenkt å lagre? Jeg antar du har noen egne klasser hvor all informasjonen ligger.

 

Det første du må gjøre er å lage en egen klasse som håndterer alt som har med databasen å gjøre.

 

I GUI-et kan du ha en knapp som kun kaller databaseklassens lagremetode med objektene du skal lagre som parameter.

 

Aller først: Få ut databasekoden fra GUI-klassen!

Endret av pgdx
Lenke til kommentar

ja jeg har en del klasser:

databaseklassen min ser slik ut:

 

package db;

import java.util.*;
import java.sql.*;
import domene.BrukerVO;

public class DbHandler {

private KobleTilDB db;
private Connection con;
private Statement stmt;
private String navn;
private String sql;
private ResultSet resultat;


public DbHandler(String bruker, String passord) {
	try {
		db = new KobleTilDB(bruker, passord);
		con = db.getConnection();
		stmt = con.createStatement();

	} catch (SQLException sqlex) {
		System.out.println("Kunne ikke koble til: " + sqlex.getMessage());
	}
}


public ResultSet finnProgram(){
	LinkedList liste = new LinkedList();
	try{
		ResultSet rs = stmt.executeQuery("select * from scene1");
		while(rs.next()){

			//liste.add(rs.getString(1));
			liste.add(rs.getString(1));
			liste.add(rs.getString(2));
			liste.add(rs.getString(3));
		}
		return rs;
	}
	catch(SQLException ex){
		System.out.println("Feil med spørring: " + ex.getMessage());
		return null;
	}
}


public void avslutt(){
	try{
		con.close();
	}
	catch(SQLException ex){
		System.out.println("Kunne ikke lukke forbindelse: "+ex.getMessage());
	}
}
}

 

denne klassen gjør alt av spørringer mot databasen, oppkoblingn ligger i en annen klasse kalt KobleTilDb

 

takk for all hjelp:)

Lenke til kommentar

Ja, men i tillegg til å gjøre alle spørringer, bør du også ha en egen klasse som håndterer objektene, altså instansierer objekter ut fra resultset. Du ønsker ikke ha ResultSet i GUI-klassen, men rett og slett bare bruke en metode som gir deg en list (collection) av objekter av den typen du skal vise frem.

Lenke til kommentar

jeg har en klasse som kobler seg opp mot databasen også ja, hvis det er det du mener:

 

package db;


/*
* KobleTilDB.java
*
*/
import java.sql.*;

public class KobleTilDB {

private Connection con;
private String koblingsstreng = "jdbc:oracle:thin:@oracle.nith.no:1521:STUD";

public KobleTilDB(String user, String passw) {
	try {
		// Steg 1 - laste database driver
		Class.forName("oracle.jdbc.driver.OracleDriver"); // 1)
		// Steg 2 - oppretter forbindelse til db gjennom DriverManager
		con = DriverManager.getConnection(koblingsstreng, user, passw); // 2)
	} catch (ClassNotFoundException cnfex) { // koblet til 1)
		System.out.println("Feilet med å laste driveren: "
				+ cnfex.getMessage());
		System.exit(1);
	} catch (SQLException sqlex) { // koblet til 2) og 3)
		System.out.println("Tilkobling ikke mulig KobleTilDB: "
				+ sqlex.getMessage());
		System.exit(1);
	}

}

public void lukkForbindelse() {
	try {
		con.close();
	} catch (SQLException sqlex) { // koblet til 2) og 3)
		System.out.println("Unable to disconnect.");
		System.exit(1);
	}
}

public Connection getConnection() {
	return con;
}
}

Endret av Jokke85
Lenke til kommentar

[Jeg skal lage en JTable som får inn data fra en database, har gjort dette, men får feilen:

java.math.BigDecimal cannot be cast to java.util.Vector

dette gjelder linjen:

dtm = new DefaultTableModel(data, kolonnenavn);

klassen ser sånn ut:

package gui;

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


public class TabellGui extends JPanel {
private DefaultTableModel dtm;
private JTable tabell; 
private JButton btnNyProgram,btnSlettProgram,btnEditerProgram;
private Vector kolonnenavn = new Vector();
private Vector data = new Vector();
private Kontroller kontroller = new Kontroller("teland", "crunka2");


public TabellGui(){
	setLayout(new BorderLayout());

	add(new Senter(), BorderLayout.CENTER);
	add(new KnappePanel(),BorderLayout.SOUTH);

	setVisible(true);		
}
private class Senter extends JPanel{
	public Senter(){

	setLayout(new FlowLayout());
	setSize(455,150);

	try{

		ResultSet r = kontroller.kolonneNavn();
		ResultSetMetaData m = r.getMetaData();
		int antall = m.getColumnCount();


		for(int i = 1; i <= antall;i++)
		{
			kolonnenavn.add(m.getColumnName(i));

		}

		while(r.next())
		{
			Vector rad = new Vector(antall);
			for(int i = 1; i <= antall;i++)
			{
				data.add(r.getObject(i));
				//System.out.println(r.getObject(i));

			}
			data.addElement(rad);
		}
	}
	catch(SQLException sqlex){
		System.out.println("Feil:"+sqlex.getMessage());
	}

   dtm = new DefaultTableModel(data, kolonnenavn);
   tabell = new JTable(dtm);
   dtm = new DefaultTableModel();


	add(new JScrollPane(tabell));;

	setVisible(true);


	}
}
}

Lenke til kommentar
Jeg skal lage en JTable som får inn data fra en database, har gjort dette, men får feilen:

java.math.BigDecimal cannot be cast to java.util.Vector

dette gjelder linjen:

dtm = new DefaultTableModel(data, kolonnenavn);

Jeg er ganske sikker på at svaret er her et sted ...
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...