Newsgroup: it.comp.java
Titolo: Importazione dati contenuti in un file xml in un database

Ciao a tutti ho creato un programma che esporta i dati da un database
in un file in formato xml, devo modificare il file a manina e poi devo
importare i dati del file modificato nello stesso database per
modificarlo. Ho pensato di procedere in questo modo ma ho degli errori
di esecuzione e non so se il metodo è corretto, per favore chi mi
aiuta???
Grazie 
Questo è il mio file PersoneN.xml che ho già modificato in alcune
parti....
<?xml version="1.0"?>
<persone>
    <persona>
      <cognome> Abbrescia</cognome>
       <nome>Marcello</nome>
       <tel>33336666</tel>
       <email>
Abbr...@ba.infn.it
</email>
       <homepage>http:/
axpba0.ba.infn.it/~abbrescia/index.html
</homepage>
    </persona>
    <persona>
      <cognome> Adduci</cognome>
       <nome>Francesco</nome>
       <tel>080777</tel>
       <email>
Add...@ba.infn.it
</email>
       <homepage>null</homepage>
    </persona>
    <persona>
      <cognome> Ambriola</cognome>
       <nome>Marialuigia</nome>
       <tel>08088725</tel>
       <email>
Ambr...@ba.infn.it
</email>
       <homepage>null</homepage>
    </persona>
</persone>
Mentre la classe che fa l'importazione è la seguente
public class ImportList extends Object {
	   public static void main (String args[]){
	      String File =
"C:\\eclipse\\workspace\\ImportazioneListino\\PersoneN.xml";
	      Document Doc = null;
	      try {
	         DocumentBuilderFactory docbuilderfactory =
DocumentBuilderFactory.newInstance();
	         DocumentBuilder docbuilder =
docbuilderfactory.newDocumentBuilder();
	         Doc = docbuilder.parse(File);  
	      } catch (Exception e) {
	         System.out.println("Cannot read the file: "+e.getMessage());
	      }
 
 
 
	      Connection conn = null;	   
	      try {
	         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	         conn = DriverManager.getConnection("jdbc:odbc:Persone");
 
	         Statement statement = conn.createStatement();
 
	         Element Root = Doc.getDocumentElement();
	         NodeList pers = Root.getElementsByTagName("persona");
	         for (int i = 0; i < pers.getLength(); i++) {
 
	            Element thisPersone = (Element) pers.item(i);
 
 
	            String thisCogn =
thisPersone.getElementsByTagName("cognome")
	            									.item(0)
													.getFirstChild().getNodeValue();
	            System.out.println("Cognome: " + thisCogn);
 
 
	            String thisName =
thisPersone.getElementsByTagName("nome")
	                                               .item(0)
 
.getFirstChild().getNodeValue();
	            System.out.println("Nome: " + thisName);
 
				String thisTel = thisPersone.getElementsByTagName("tel")
	                                               .item(0)
 
.getFirstChild().getNodeValue();
	            System.out.println("Telefono: " + thisTel);
 
 
 
	            String thisEmail =
thisPersone.getElementsByTagName("email")
	                                               .item(0)
 
.getFirstChild().getNodeValue();
	            System.out.println("Email: " + thisEmail);
 
	            String thisHome =
thisPersone.getElementsByTagName("homepage")
	                                               .item(0)
 
.getFirstChild().getNodeValue();
 
	            System.out.println("Homepage: " + thisHome);
 
 
	            String sqlTxt = "insert into Persone2 "+
										"( Cognome,    " +
										"  Nome,    " +
										"  Tel,    " +
										"  Email,    " +
										"  Homepage )   " +
	                             "values ("+thisCogn+" , "+thisName+",
"+thisTel+", "+thisEmail+", "+thisHome+")";
 
 
	                  int results = statement.executeUpdate(sqlTxt);
	                  	                 }
 
 
	      } catch (ClassNotFoundException e) {
	         System.out.println("Error creating class: "+e.getMessage());
	      } catch (SQLException e) {
	         System.out.println("Error creating connection:
"+e.getMessage());
	      } finally {
	         System.out.println("Closing connections...");
	         try {
	            conn.close();
 
	         } catch (SQLException e) {
	            System.out.println("Can't close connection.");
	         }
	      }
	   }
	}
Questo il messaggio di errore durante la compilazione:
Cognome:  Abbrescia
Nome: Marcello
Telefono: 33336666
Email: 
Abbr...@ba.infn.it
Error creating connection: [Sybase][ODBC Driver][Adaptive Server
Anywhere]Column not found: Column 'Abbrescia' not found
Closing connections...
Ma questa classe scrive nel database e quindi modifica il contenuto
già esistente????????????
AIUTO!!!!!!!!!!!!!!

 aiuta???
Due cose mi sono subito saltate all'occhio:
1) Usa sempre, sempre, sempre e sempre i PreparedStatement:
  PreparedStatemente ps = conn.prepareStatement("UPDATE miaTabella SET
valore = ?, date = ? WHERE stringa = ?");
  ps.setInt(1, 42);
  ps.setDate(2, new java.sql.Date());
  ps.setString(3, "pippo");
  resultSet rs = ps.executeQuery();
Eviti problemi grossi, per esempio SQL-injection. E, nel tuo caso,
risolvi pure il problema che hai :)
2) Magari potrebbe essere una buona idea fare un trim() delle stringhe
prime di inserirle nel db. Non vuoi avere tutti i cognomi preceduti da
uno spazio, vero ?
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !