Sto cercando di utilizzare un grado di separazione tra gui, db e altro come impostato dal mio prof per la creazione di questo programma di gestione magazzino.
Voglio che il programma mi controlli se la quantità richiesta da rifornire sia realmente disponibile con un check nel nel db nella colonna "maxordinabile" ma non so come fare seguendo le modalità del mio prof di istanziare la connessione al db stesso...
Mi spiego:
CLASSE DB CONNECTIONS
codice:
import java.sql.Connection;import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JOptionPane;
public class DbConnection {
//Connection con;
Statement st;
ResultSet rs;
private static Connection db; // La connessione col Database
private static boolean connesso; // Flag che indica se la connessione è attiva o meno
private static DbConnection instance; //istanza statica della classe
public static DbConnection getInstance() {
if(instance == null)
instance = new DbConnection();
if(connesso != true)
connetti("magazzino", "root", "Admin123");
return instance;
}
public static boolean connetti(String nomeDB, String nomeUtente, String pwdUtente) {
connesso = false;
try {
// Carico il driver JDBC per la connessione con il database MySQL
Class.forName("com.mysql.jdbc.Driver");
db = DriverManager.getConnection("jdbc:mysql://127.0.0.1/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente);
connesso=true;
} catch (Exception e) {
e.printStackTrace();
}
return connesso;
}
public Vector<String[]> eseguiQuery(String query) {
Vector<String[]> v = null;
String [] record;
int colonne = 0;
try {
Statement stmt = db.createStatement(); // Creo lo Statement per l'esecuzione della query
ResultSet rs = stmt.executeQuery(query); // Ottengo il ResultSet dell'esecuzione della query
v = new Vector<String[]>();
ResultSetMetaData rsmd = rs.getMetaData();
colonne = rsmd.getColumnCount();
while(rs.next()) { // Creo il vettore risultato scorrendo tutto il ResultSet
record = new String[colonne];
for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
v.add( (String[]) record.clone() );
}
rs.close(); // Chiudo il ResultSet
stmt.close(); // Chiudo lo Statement
} catch (Exception e) { e.printStackTrace(); }
return v;
}
}
CLASSE ProdottoManager
codice:
public class ProdottoManager {
private static ProdottoManager instance;
//SINGLETON
public static ProdottoManager getInstance()
{
if(instance == null)
instance = new ProdottoManager();
return instance;
}
public boolean verificaRifornimento(String nomeprodotto, int quantita)
{
Prodotto prodotto = new Prodotto();
prodotto.setNomeProdotto(nomeprodotto);
return prodotto.verificaRifornimento(prodotto.getNomeProdotto(), quantita);
}
}
CLASSE Prodotto
codice:
public class Prodotto {
private int id;
private String nomeprodotto;
private String categoria;
private String descrizione;
private double prezzo;
private int disponibilita;
private int maxordinabile;
private String produttore;
private String fornitore;
public Prodotto(){
nomeprodotto="";
categoria="";
descrizione="";
prezzo=0;
disponibilita=0;
maxordinabile=0;
produttore="";
fornitore="";
}
public void setNomeProdotto(String nome){
nomeprodotto = nome;
}
public void setCategoria(String categoriaprodotto){
categoria = categoriaprodotto;
}
public void setDescrizione(String descrizioneprodotto){
descrizione = descrizioneprodotto;
}
public void setPrezzo(double prezzoprodotto){
prezzo = prezzoprodotto;
}
public void setDisponibilita(int disponibilitaprodotto){
disponibilita = disponibilitaprodotto;
}
public void setMaxOrdinabile(int maxordinabileprodotto){
maxordinabile = maxordinabileprodotto;
}
public void setProduttore(String produttoreprodotto){
produttore = produttoreprodotto;
}
public void setFornitore(String fornitoreprodotto){
fornitore = fornitoreprodotto;
}
public String getNomeProdotto(){
return nomeprodotto;
}
public String getCategoria(){
return categoria;
}
public String getDescrizione(){
return descrizione;
}
public double getPrezzo(){
return prezzo;
}
public int getDisponibilita(){
return disponibilita;
}
public int getMaxOrdinabile(){
return maxordinabile;
}
public String getProduttore(){
return produttore;
}
public String getFornitore(){
return fornitore;
}
public boolean verificaRifornimento(String nomeprodotto, int quantita){
return MagazziniereDAO.getInstance().checkRifornimento(this);
}
public void scriviOutput(){
System.out.println("Prodotto: " + getNomeProdotto());
System.out.println("Categoria: " + getCategoria());
System.out.println("Descrizione: " + getDescrizione());
System.out.println("Prezzo: " + getPrezzo());
System.out.println("Disponibilità in magazzino: " + getDisponibilita());
System.out.println("Prodotto ordinabile: " + getMaxOrdinabile());
}
}
CLASSE MagazziniereDAO
codice:
import java.util.Vector;
import settepietro20021377.magazzino.dbinterface.DbConnection;
import settepietro20021377.magazzino.model.Prodotto;
public class MagazziniereDAO {
private static MagazziniereDAO instance;
public static MagazziniereDAO getInstance()
{
if(instance==null)
{
instance = new MagazziniereDAO();
}
return instance;
}
public boolean checkRifornimento(Prodotto prodotto, int quantita){
String nomeprodotto = prodotto.getNomeProdotto();
int maxordinabili = prodotto.getMaxOrdinabile();
Vector<String[]> result=DbConnection.getInstance().eseguiQuery("select * from listaprodotti where nomeprodotto=\""+ nomeprodotto+"\"");
if(quantita()<= result(<maxordinabile){
return true;
}
}
Ora, come imposto la classe MagazziniereDAO per far si che mi restutisca un boolean true in prodotto.VerificaRifornimento?