Klassendefinition

Status
Nicht offen für weitere Antworten.

Mark110

Bekanntes Mitglied
Hallo,

ich habe derzeit eine Klasse Data, die eine statische methode hat, welche mir eine OracleConnectionPoolDataSource zurück gibt (Dazu nutze ich eine properties datei).


Desweiteren habe ich zwei Klassen, die von Data erben.
Diese Klassen erstellen mir jeweils Listen aus Querys, die ich dann in anderen Klassen wieder abfragen kann.

Deshalb habe ich mir eine eigene Listen Klasse gemacht:

Code:
package irgendwas;

import java.util.List;


public class TList {
	
	// **************************************************************
	// This class sets and returns Lists of cars or ships
	// **************************************************************
	 

	private List<Car> cars;
	private List<Ship> ships;
	
	
	public List<Car> getCars() {
		return cars;
	}
	public void setFreightOffers(List<Car> cars) {
		this.cars = cars;
	}
	public List<Ship> getShips() {
		return ships;
	}
	public void setShips(List<Ship> ships) {
		this.ships = ships;
	}
	
}

Zum einen gefällt mir der Name Data nicht ... allerdings wüßte ich ncith wie ich das sonst nennen soll. Im Endeffekt bekomme ich ja nur meinen OracleConnectionPoolDataSource. Macht das an dieser Stelle überhaupt Sinn?

Achso Car und Ship sind Beans.

Hier noch ein Beispiel einer meiner Klassen die von Data erbt:


Code:
package tchelperclass.database;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.sql.PooledConnection;
import oracle.jdbc.pool.OracleConnectionPoolDataSource;
import org.apache.log4j.Logger;
import tchelperclass.util.Log;



public class CarDAO extends Data {
	
	
	 
	
	
	OracleConnectionPoolDataSource dataSource = null;
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	TList tList = new TList();
	PooledConnection pc = null;
	List<Car> cars = new ArrayList<Car>();
	private static final Logger log = Logger.getLogger(CarDAO.class);
	
	public TList getCars() {
		
		//Load properties
		
		try {
			prop.load(new FileInputStream("J:\\db.properties"));
			query.load(new FileInputStream("J:\\query.properties"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			log.error("Property File Not Found", e);
		} catch (IOException e) {
			e.printStackTrace();
			log.error("IO Exception", e);
		}
		
		try {
			dataSource = setupDataSource();
			// Create a pooled connection
		    pc  = dataSource.getPooledConnection();
			conn = pc.getConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(query.getProperty("CarsQuery"));
			while (rs.next()) {
				// Create a vehicles offers bean
				Car car = new Car();
			                
                                                                car.setReifen(rs.getString("reifen"));
			                car.setTueren(rs.getString("tueren"));
                                                                car.setFenster(rs.getString("fenster"));
                                                                car.setSitze(rs.getString("sitze"));
    				
				// Assign Obj to ArrayList
				cars.add(car); 
			}
			// Assign FreightList to List
			tList.setCars(cars);
		} catch (SQLException e) {
			log.error("SQL Error", e);
		} finally {
			try {
				rs.close();
			} catch (SQLException e) {
				log.error("Error Closing Result Set", e);
			}
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
				log.error("Error Closing Statement", e);
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					log.error("Error Closing Connection", e);
				}
			}
		}
		return tList;		
	}

Wäre echt super nett, wenn ihr mir sagen könnt, ob das konzept richtig ist oder wie man es besser machen kann.

Gruß
 

Mark110

Bekanntes Mitglied
Könnt Ihr mit meinen Erläuterungen nichts anfangen? Wenn ja, kann ich ja noch etwas ergänzen. Bitte dann um Info ;)
 
S

SlaterB

Gast
jedes Programm das läuft ist per Definition richtig,
alles andere ist Interpretationssache

ich würde z.B. von keiner Klasse erben, die nur eine statische Operation hat,
die kannst du auch normal aufrufen

aber weiter möchte ich mich an einer Detail-Diskussion nicht beteiligen,
ändere dein Design dann, wenn du von selbst aus ein besseres siehst/ irgendwo nachgelesen hast
oder es sich aus der Zusammenarbeit mehrerer Entwickler ergibt
 

ARadauer

Top Contributor
ich verstehe nicht warum eine Methode public TList getCars() einen Container mit Autos und Schiffen zurück gibt und nicht einfach eine List mit Cars ;-)
 

Mark110

Bekanntes Mitglied
zunächst mal danke für die antworten.


ich verstehe nicht warum eine Methode public TList getCars() einen Container mit Autos und Schiffen zurück gibt und nicht einfach eine List mit Cars

Wie kann ich das denn besser machen?
 

tfa

Top Contributor
Aber die Methode spuckt nur Cars aus.
Wozu überhaupt TList? Nimm doch gleich List<Cars> oder List<? extends Vehicle>.
 

ARadauer

Top Contributor
ach ich wage es jetzt einfach: Ich würd mir ein Singleton schreiben, dass mir meine OracleConnectionPoolDataSource hält.
http://www.java-forum.org/de/viewtopic.php?t=6090#28141

Singletons solltes du aber sehr sparsam einsetzen, da seh eher zu einer schlechten objektorientierten architektur führen. Spring wäre natürlich besser, aber mit sowas würde ich mich zu beginn noch nicht beschäftigen.

Code:
try { 
         prop.load(new FileInputStream("J:\\db.properties")); 
         query.load(new FileInputStream("J:\\query.properties")); 
      } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
         log.error("Property File Not Found", e); 
      } catch (IOException e) { 
         e.printStackTrace(); 
         log.error("IO Exception", e); 
      } 
       
      try { 
         dataSource = setupDataSource();
musst du nur einmal machen, der Sinn eines Pools ist es, diesen immer wieder zu verwenden.

CarDAO ist ein guter ansatz, Data brauchst du gar nicht, was ist da drin?

getCars würd ich eine ArrayList<Car> zurück geben lassen, viellicht noch eine saveCar, deleteCar, getCar Methode ... falls du sie brauchst.
und dann würd ich mir noch ein ShipDao schreiben
 

Mark110

Bekanntes Mitglied
vielen dank ich beherzige eure antworten und werde morgen versuchen das ganze umzusetzen.

Wenn dnan noch fragen sind melde ich mich wieder.

Danke!
 

Mark110

Bekanntes Mitglied
ok also in data stecken u.a. noch folgende variablen deklarationen die vererbt werden

Code:
package tchelperclass.database;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.PooledConnection;

import org.apache.log4j.Logger;

import oracle.jdbc.pool.OracleConnectionPoolDataSource;
import tchelperclass.util.Log;


public class Data {
	
	// *************************************************************************
	// This class has a static method to create a OracleConnectionPoolDatasource
	// *************************************************************************
	
	
	protected Properties prop = new Properties();
	protected Properties query = new Properties();
	protected OracleConnectionPoolDataSource dataSource = null;
	protected Connection conn = null;
	protected Statement stmt = null;
	protected TList tList = new TList();
	protected PooledConnection pc = null;
	protected ResultSet rs = null;
	private static final Logger log = Logger.getLogger(Data.class);
	
	
	public static OracleConnectionPoolDataSource setupDataSource() {
		Properties prop = null;	
		OracleConnectionPoolDataSource ocpds = null;
				
		// Load properties
		prop = new Properties();
		try {
			prop.load(new FileInputStream("J:\\db.properties"));
		} catch (FileNotFoundException e) {
			log.error("File not found Exception", e);
		} catch (IOException e) {
			log.error("Property IO Exception", e);
		}
		
		// Create a OracleConnectionPoolDataSource instance
	    try {
			ocpds = new OracleConnectionPoolDataSource();
			// Set connection parameters
		    ocpds.setURL(prop.getProperty("connectURL"));
		    ocpds.setUser(prop.getProperty("user"));
		    ocpds.setPassword(prop.getProperty("password"));
		} catch (SQLException e) {
			log.error("SQL Error", e);
		}
		return ocpds;
	}

}
 

Mark110

Bekanntes Mitglied
ja für die klassen die das erben:

Code:
package tchelperclass.database; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.List; 
import javax.sql.PooledConnection; 
import oracle.jdbc.pool.OracleConnectionPoolDataSource; 
import org.apache.log4j.Logger; 
import tchelperclass.util.Log; 



public class CarDAO extends Data { 
    
    
    
    //Die deklarationen entfallen dann
    
   OracleConnectionPoolDataSource dataSource = null; 
   Connection conn = null; 
   Statement stmt = null; 
   ResultSet rs = null; 
   TList tList = new TList(); 
   PooledConnection pc = null; 
   List<Car> cars = new ArrayList<Car>(); 
   private static final Logger log = Logger.getLogger(CarDAO.class); 
    
   public TList getCars() { 
       
      //Load properties 
       
      try { 
         prop.load(new FileInputStream("J:\\db.properties")); 
         query.load(new FileInputStream("J:\\query.properties")); 
      } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
         log.error("Property File Not Found", e); 
      } catch (IOException e) { 
         e.printStackTrace(); 
         log.error("IO Exception", e); 
      } 
       
      try { 
         dataSource = setupDataSource(); 
         // Create a pooled connection 
          pc  = dataSource.getPooledConnection(); 
         conn = pc.getConnection(); 
         stmt = conn.createStatement(); 
         rs = stmt.executeQuery(query.getProperty("CarsQuery")); 
         while (rs.next()) { 
            // Create a vehicles offers bean 
            Car car = new Car(); 
                         
                                                                car.setReifen(rs.getString("reifen")); 
                         car.setTueren(rs.getString("tueren")); 
                                                                car.setFenster(rs.getString("fenster")); 
                                                                car.setSitze(rs.getString("sitze")); 
                 
            // Assign Obj to ArrayList 
            cars.add(car); 
         } 
         // Assign FreightList to List 
         tList.setCars(cars); 
      } catch (SQLException e) { 
         log.error("SQL Error", e); 
      } finally { 
         try { 
            rs.close(); 
         } catch (SQLException e) { 
            log.error("Error Closing Result Set", e); 
         } 
         try { 
            stmt.close(); 
         } catch (SQLException e) { 
            e.printStackTrace(); 
            log.error("Error Closing Statement", e); 
         } 
         if (conn != null) { 
            try { 
               conn.close(); 
            } catch (SQLException e) { 
               log.error("Error Closing Connection", e); 
            } 
         } 
      } 
      return tList;       
   }

Hab ja zwei solcher klassen (in meinem beispiel cars und ships)[/code]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Klassendefinition Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben