codice:
import java.sql.*;
import java.util.*;
class RicetteIngredienti {
private Statement stm;
private ResultSet rs;
private Connection con;
boolean connetti() {
boolean bool = false;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\Programmi\\dbricette_1_3_049.mdb");
stm = con.createStatement();
bool = true;
} catch(Exception e) {bool=false;e.printStackTrace();}
return bool;
}
void eseguiOperazioni() {
try {
// Qui, estrai sempre i tuoi ingredienti dalla tabella Ricette
rs = stm.executeQuery("SELECT id,ingredienti FROM Tempo");
while(rs.next()) {
// Id ricetta
int id = rs.getInt("id");
String ingredienti = rs.getString("ingredienti");
// Suddivide gli ingredienti in token
Scanner parser = new Scanner(ingredienti);
parser.useDelimiter("=");
// Prendo ogni token (ingrediente)
while(parser.hasNext()) {
String ingrediente = parser.next();
// Restituisce -1 se l'ingrediente NON è presente nella tabella Ingredienti
int id_ingrediente = isIngredientePresent(ingrediente);
System.out.println(id_ingrediente);
Statement stm1 = con.createStatement();
if(id_ingrediente != -1) {
stm1.executeUpdate("INSERT INTO Ingredienti(id_ingrediente,id_ricetta,ingrediente) VALUES('"+id_ingrediente+"','"+id+"','"+ingrediente+"')");
} else {
// Restituisce
id_ingrediente = ultimoElementoIngredienti();
stm1.executeUpdate("INSERT INTO Ingredienti(id_ingrediente,id_ricetta,ingrediente) VALUES('"+(id_ingrediente+1)+"','"+id+"','"+ingrediente+"')");
}
}
}
} catch(SQLException sqlex) {sqlex.printStackTrace();}
}
// Funzioni
private int ultimoElementoIngredienti() throws SQLException {
Statement stm3 = con.createStatement();
ResultSet rs3 = stm3.executeQuery("SELECT MAX(id_ingrediente) FROM Ingredienti");
int ultima_riga = -1;
while(rs3.next()) {
// Questa è la colonna restituita, quindi dobbiamo leggere dentro di lei.
ultima_riga = rs3.getInt("MAX(id_ingrediente)");
}
stm3.close();
rs3.close();
return ultima_riga;
}
private int isIngredientePresent(String ingrediente) throws SQLException {
int id_ingrediente = -1; // Non presente
Statement stm3 = con.createStatement();
ResultSet rs3 = stm3.executeQuery("SELECT id_ingrediente FROM Ingredienti WHERE ingrediente = '"+ingrediente+"'");
while(rs3.next()) {
id_ingrediente = Integer.parseInt(rs3.getString("id_ingrediente"));
break;
}
stm3.close();
rs3.close();
return id_ingrediente;
}
}
public class GestioneRicette {
public static void main(String[] args) {
RicetteIngredienti ri;
ri = new RicetteIngredienti();
if(ri.connetti()) {
ri.eseguiOperazioni();
} else {
System.out.println("Non e' stato possibile stabilire la connessione!");
}
}
}
ecco compilando questo programma, mi da i seguenti errori
Excepiton in thread "main" java.lang:NullPointerException
at RicetteIngredienti.isIngredientePresent(gestioneri cette.java:68)
at RicetteIngredienti.eseguiOperazioni(.............. .........java:36)
at GestioneRicette.main(..............java:86)
insomma in tutte le funzioni che io richiamo.......
qualcuno sa darmi una mano?? grazie mille