Newsgroup: it.comp.java
Titolo: Nessun errore di compilazione: ma allora dove sbaglio?

non riesco a capire dove sta il problema:
ho un form dove inserisco il titolo, la categoria e il testo di un
blog su un database cosě fatto:
create table Blog (
id int(11) NOT NULL auto_increment,
data timestamp(14) NOT NULL,
titolo varchar(255) NOT NULL,
categoria varchar(255) NOT NULL,
testo mediumtext NOT NULL,
primary key (id)
)type=MyISAM;
per inserire i valori sul db utilizzo un bean di questo tipo:
package bean;
import java.sql.*;
public class NewBlogBean {
private String titolo, categoria, testo;
//Tabella Blog
public void setTitolo(String input){
titolo = input;
}
public String getTitolo(){
return titolo;
}
public void setCategoria(String input){
categoria = input;
}
public String getCategoria(){
return categoria;
}
public void setTesto(String input){
testo = input;
}
public String getTesto(){
return testo;
}
public void updateDatabase() {
try{ 
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn =
DriverManager.getConnection("jdbc:mysql://url", "username", "pass");
String sql = "INSERT INTO Blog VALUES " +
"(?, ?, ?)";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, titolo );
statement.setString(2, categoria );
statement.setString(3, testo);
statement.executeUpdate();
}
catch (Exception e) 
{System.out.println("Si č verificata un'eccezione"+e.toString());}
}
}
ma non riesce ad inserire nessun valore, come mai?
l'applicazione non mi da nessun errore, forse c'č qualche problema
legato all'id o alla data?
mi sapete dire voi dove sbaglio?
grazie a tutti
Paolo

 "(?, ?, ?)";
proava così:
String sql = "INSERT INTO Blog(titolo,categoria,testo) VALUES " +
"(?, ?, ?)";

...

purtroppo l'errore non sta nella stringa sql o in un altro pezzo di
codice del bean, mi spiego meglio:
se nel database elimino i campi id e data funziona tutto perfettamente
senza toccare niente nel codice del bean, quindi è per quello che
nella domanda di prima o detto se c'era qualche problema legato all'id
o alla data.
Nel bean non ho fatto nessun riferimento all'id o alla data perchè il
primo si autoincrementa e il secondo si genera da solo prendendo la
data del server, forse però sbaglio qualcosa?
Grazie comunque Domenico.
Qualcuno a qualche altra idea?

...

purtroppo l'errore non sta nella stringa sql o in un altro pezzo di


 data del server, forse però sbaglio qualcosa?
Dove sta scritto che la data (timestamp) si autogenera ?
Io vedo che è NOT NULL.
(?)
-- 
Njc

...

hai ragione ho sbagliato a scrivere, perchè avevo fatto un copia
incolla della tabella vecchia non è NOT NULL.
comunque mi sai dire qualcosa dove sto sbagliando?

 comunque mi sai dire qualcosa dove sto sbagliando?
Boh, prova così:
String sql = "INSERT INTO Blog(data,titolo,categoria,testo) VALUES " +
"(NOW(),?, ?, ?)";
-- 
Njc

 comunque mi sai dire qualcosa dove sto sbagliando?
hihi, ma non è che manca la commit ?
-- 
Njc

 hihi, ma non è che manca la commit ?
scusa l'ignoranza ma cosa è la commit?

 scusa l'ignoranza ma cosa è la commit?
"commit" è un comando SQL che serve per rendere effettive le modifiche fatte
all'interno di una transazione SQL.
Il comando "rollback" è l'esatto contrario: annulla tutte le operazioni
fatte dall'inizio della transazione.
In realtà credo che nel tuo caso non serva, lavorando in modalità MyISAM;
con questo tipo di gestione della tabella, ogni comando SQL è
automaticamente seguito dalla commit.
Con il tipo InnoDB allora le cose cambiano.
In genere, se tutto fila liscio (senza eccezioni) ma non succede nulla,
allora manca la commit. :)
Se vuoi provare pure questa, aggiungi nella try, dopo l'esecuzione della
query, queste 2 righe:
conn.commit();
conn.close();
ma a questo punto bisognerebbe usare dei metodi «più scientifici», tipo
controllare i messaggi d'errore, il valore restituito da executeUpdate,
provare a fare la insert manualmente, _RTM_, ecc.
-- 
Njc

 hihi, ma non č che manca la commit ?
per commit intendi le modifiche?
il db č:
create table Blog (
id int(11) NOT NULL auto_increment,
data timestamp,
titolo varchar(255) NOT NULL,
categoria varchar(255) NOT NULL,
testo mediumtext NOT NULL,
primary key (id)
)type=MyISAM;
il bean invece č:
package bean;
import java.sql.*;
public class NewBlogBean {
  private String titolo, categoria, testo;
 
 
//Tabella Blog
 
  public void setTitolo(String input){
    titolo = input;
  }
  public String getTitolo(){
    return titolo;
  }
  public void setCategoria(String input){
     categoria = input;
  }
  public String getCategoria(){
    return categoria;
  }
    public void setTesto(String input){
    testo = input;
  }
  public String getTesto(){
    return testo;
  }
 
  public void updateDatabase() {
    try{                
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      Connection conn =
        DriverManager.getConnection("jdbc:mysql://localhost:3306/paolomoi_com_-_generale",
"paolomoi", "movinpaolo");
      String sql = "INSERT INTO Blog (titolo, categoria, testo) VALUES
" + "(?, ?, ?)";
 
      PreparedStatement statement = conn.prepareStatement(sql);
 
	 	statement.executeUpdate();
 
    	}
catch (Exception e) 
{System.out.println("Si č verificata un'eccezione"+e.toString());}
  }
}
Queste sono le modifiche fatte.
Ho fatto varie prove e ho notato che il tutto funziona solo nel caso
elimino
il campo id dal database in modo tale che diventi:
create table Blog (
data timestamp,
titolo varchar(255) NOT NULL,
categoria varchar(255) NOT NULL,
testo mediumtext NOT NULL,
primary key (id)
)type=MyISAM;
solo in queso caso funziona tutto, come mai?
quindi il problema sta nel campo id?
bo non ci capisco piů nulla

 bo non ci capisco più nulla
Allora devi fare una prova manuale.
Scarica il manuale da questo indirizzo:
http://dev.mysql.com/get/Downloads/Manual/manual.zip/from/http://mysql.belnet.be/
decomprimilo e aprilo con il browser, poi cerca il paragrafo "Using
AUTO_INCREMENT" e vedi se l'esempio funziona... dal prompt di mysql.
-- 
Njc


http://dev.mysql.com/get/Downloads/Manual/manual.zip/from/http://mysql.belnet.be/

Io utilizzo phpmyadmin e la prova manuale lo fatta da li attraverso la
voce inserisci e sembra funzionare tutto nel senso che inserisce i dati in
tutti i campi compreso id e data che vengono autogenerati.
Quindi il problema sembra sul bean.
forse devo inserire nel bean la variabile id
private int id;
public void setId(int input){
    id = input;
  }
  public int getId(){
    return id;
  }
ma non penso serva a nulla perchè l'id dal form non glielo passo, come
pure la data.
Mistero!!!!
comunque grazie mille per la disponibilità
e se ti viene in mente qualcosa io sono  qui
ciao Paolo