Newsgroup: it.comp.java
Titolo: Da DB a file XML

Devo esportare i dati di un DB in un file xml vorrei sapere perché mi
crea un file vuoto o quasi del tipo:
<?xml version="1.0" encoding="UTF-8"?>
<PRICELIST>
</PRICELIST>
Questo è il codice mi sapete aiutare? Mi potete dire dove è l'errore
e magari correggerlo? GRAZIE A TUTTI
public class RequestPricelist {
    private Connection conn;
	 static
	    {
	        try
	        {
	            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	        }
	        catch (Exception e)
	        {
	            e.printStackTrace();
	        }
	    }
	    public RequestPricelist()
	    {
	        String url = "jdbc:odbc:Listino";
	        String userId = "dba";
	        String passWord = "sql";
	        try{
	            conn = DriverManager.getConnection(url, userId, passWord);
	        }
	        catch (SQLException e){
	            e.printStackTrace();
	        }
	    }
	 private String toXML(ResultSet rs, ResultSet rs2)  throws Exception
                {
	        ResultSetMetaData rsmd = rs.getMetaData();
	        ResultSetMetaData rsmd2 = rs2.getMetaData();
	        int colCount = rsmd.getColumnCount();
	        int colCount2 = rsmd2.getColumnCount();
	        StringBuffer xml = new StringBuffer();
	        xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
	        xml.append("<PRICELIST>\n");
	        while (rs.next())
	        {
	            for (int i = 1; i <= colCount; i++)
	            {
	                String columnName = rsmd.getColumnName(i);
	                Object value = rs.getObject(i);
	                xml.append("           " + "<" + columnName + ">");
	                if (value != null)
	                {
	                    xml.append(value.toString().trim());
	                }
	                else if (value == null)
	                {
	                    xml.append(value);
	                }
	                xml.append("</" + columnName + ">\n");
	                xml.append("        " + "<PRICELIST_ROW>\n");
	                while (rs2.next())
                                {
	                    for (int j = 1; j <= colCount2; j++)
	                    {
	                        String columnName2 = rsmd2.getColumnName(j);
	               	        Object value2 = rs2.getObject(j);
	               	        xml.append("           " + "<" + columnName2 +
">");
	               	       if (value2 != null)
	               	 		{
	               	 		    xml.append(value2.toString().trim());
	               	 		}
	               	 		else if (value2 == null)
	               	 		{
	               	 		    xml.append(value2);
	               	 		}
	               	 		xml.append("</" + columnName2 + ">\n");
	                    }
	                    xml.append("        " + "</PRICELIST_ROW>\n");
	    	        }
	            }
	        }
	        xml.append("</PRICELIST>\n");
	        return xml.toString();
	    }
		//Creazione di una query il cui ResulSet è trasformato in dati XML
		public String get_Pricelist(String thisCodeSProd, String CodeP,
String DateUp) throws IOException, SQLException
		{
			ResultSet rs = null;
			ResultSet rs2 = null;
			String xml = null;
			try
			{
				Statement stmt = conn.createStatement();
				Statement stmt2 = conn.createStatement();
				String sqlselect = ("select CODE_SUBJ_PROD,     " +
									"DATE_LAST_UPDATE,   " +
									"DESCRIPTION,        " +
									"START_DATE_SELLIN,  " +
									"END_DATE_SELLIN,    " +
									"START_DATE_SELLOUT, " +
									"END_DATE_SELLOUT,   " +
									"CODE_PRICELIST      " +
									"from   PRICELIST           " +
									"where  CODE_SUBJ_PROD='"+thisCodeSProd+"' and  " +
									"		CODE_PRICELIST='"+CodeP+"' ");
				String sqlselectRow = ("select ARTICLE_CODE, " +
													" UNIT_PRICE, " +
													" DISCOUNT_1, " +
													" DISCOUNT_2, " +
													" DISCOUNT_3, " +
													" DISCOUNT_4, " +
													" UNIT_MEASURE, " +
													" BURDEN_PERC, " +
													" BURDEN_VALUE, " +
													" PREMIUM_PERC, " +
													" PREMIUM_VALUE, " +
													" ARTICLE_DESCRIPTION, " +
													" BAR_CODE_PROD, " +
													" BAR_CODE_PACKING, " +
													" QUANTITY_CARTON, " +
													" LAYER_CARTON, " +
													" PLATFORM_CARTON, " +
													" ART_TAX " +
												"FROM PRICELIST_ROW  " +
												"where CODE_SUBJ_PROD='"+thisCodeSProd+"' "+
												"and   CODE_PRICELIST='"+CodeP+"' ");
				rs = stmt.executeQuery(sqlselect);
				rs2 = stmt2.executeQuery(sqlselectRow);
				xml = toXML(rs, rs2);
				rs.close();
				rs2.close();
				stmt.close();
				stmt2.close();
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
			return xml;
		}
		private static int Warnings(SQLWarning w) throws SQLException
	    {
	    	int warning = -1;
	    	if(w != null) {
	    		warning = 1;
	            while(w != null) {
	            	 w.getMessage();
	            	 w = w.getNextWarning();
	            }
	        }
		return warning;
	    }
		private static String controllo_car(String descrizione_listino)
throws
		    Exception
		       {
		        if (descrizione_listino == null)
		         return null;
		        String primaParte = "";
		        String secondaParte = "";
		        for (int i = 0; i < descrizione_listino.length(); i++) {
		         String thisChar = descrizione_listino.substring(i, i + 1);
		         if (thisChar.equals("&")) {
		          primaParte = descrizione_listino.substring(0, i);
		          secondaParte = descrizione_listino.substring (i + 1,
		    descrizione_listino.length());
		          descrizione_listino = primaParte + "&amp;" + secondaParte;
		          i++;
		         }
		        } 
		        return descrizione_listino; 
		       } 
 
}

Non so, il codice sembra corretto, non riesci a fare un debug? L'unica
cosa strana che noto è il getColumnName(i), molto probabilmente potrei
sbagliarmi ma mi sembra strano che l'indice di partenza si 1, non è 0?
Però in caso d'errore non dovrebbe crearti il file!

Quello che non fa è inserire il risultato della select nella struttura
del file xml per ottenere un file del genere forse sono i cicli che
sono sbagliati o i due resultset
Perfavore aiuto!!!!!!!!!!!!
<?xml version="1.0"?>
<PRICELIST>
	<CODE_SUBJ_PROD></CODE_SUBJ_PROD>
	<DATE_LAST_UPDATE></DATE_LAST_UPDATE>
	<DESCRIPTION></DESCRIPTION>
	<START_DATE_SELLIN></START_DATE_SELLIN>
	<END_DATE_SELLIN></END_DATE_SELLIN>
	<START_DATE_SELLOUT></START_DATE_SELLOUT>
	<END_START_SELLOUT></END_START_SELLOUT>
	<CODE_PRICELIST></CODE_PRICELIST>
	<PRICELIST_ROW>
			<ARTICLE_CODE></ARTICLE_CODE>
			<UNIT_PRICE></UNIT_PRICE>
			<DISCOUNT_1></DISCOUNT_1>
			<DISCOUNT_2></DISCOUNT_2>
			<DISCOUNT_3></DISCOUNT_3>
			<DISCOUNT_4></DISCOUNT_4>
			<UNIT_MEASURE></UNIT_MEASURE>
			<BURDEN_PERC></BURDEN_PERC>
			<BURDEN_VALUE></BURDEN_VALUE>
			<PREMIUM_PERC></PREMIUM_PERC>
			<PREMIUM_VALUE></PREMIUM_VALUE>
			<ARTICLE_DESCRIPTION></ARTICLE_DESCRIPTION>
			<BAR_CODE_PROD></BAR_CODE_PROD>
			<BAR_CODE_PACKING><BAR_CODE_PACKING>
			<QUANTITY_CARTON></QUANTITY_CARTON>
			<LAYER_CARTON></LAYER_CARTON>
			<PLATFORM_CARTON></PLATFORM_CARTON>
			<ART_TAX></ART_TAX>
		</PRICELIST_ROW>
		<PRICELIST_ROW>
			<ARTICLE_CODE></ARTICLE_CODE>
			<UNIT_PRICE></UNIT_PRICE>
			<DISCOUNT_1></DISCOUNT_1>
			<DISCOUNT_2></DISCOUNT_2>
			<DISCOUNT_3></DISCOUNT_3>
			<DISCOUNT_4></DISCOUNT_4>
			<UNIT_MEASURE></UNIT_MEASURE>
			<BURDEN_PERC></BURDEN_PERC>
			<BURDEN_VALUE></BURDEN_VALUE>
			<PREMIUM_PERC></PREMIUM_PERC>
			<PREMIUM_VALUE></PREMIUM_VALUE>
			<ARTICLE_DESCRIPTION></ARTICLE_DESCRIPTION>
			<BAR_CODE_PROD></BAR_CODE_PROD>
			<BAR_CODE_PACKING><BAR_CODE_PACKING>
			<QUANTITY_CARTON></QUANTITY_CARTON>
			<LAYER_CARTON></LAYER_CARTON>
			<PLATFORM_CARTON></PLATFORM_CARTON>
			<ART_TAX></ART_TAX>
		</PRICELIST_ROW>	
</PRICELIST>

 sbagliarmi ma mi sembra strano che l'indice di partenza si 1, non č 0?
No, l'indice delle colonne comincia da 1.
Non saprei, magari la query e' sbagliata? non ritorna nulla? quindi il 
next del resultset ritorna false e ti salta tutta la parte in mezzo.
Saluti
CarMas

Non saprei...ma ho dei dubbi sui valori null dati al resultSet  nel metodo 
get_Pricelist ai result set:
ResultSet rs = null;
ResultSet rs2 = null;
String xml = null;
Forse è per questo che non ti esegue la query correttamente...

 crea un file vuoto o quasi del tipo:
Probabilmente perche' la query non ritorna niente (rs.next() e' false).
Probabilmente il problema sta' nelle clausole "where": Usa 
PreparedStatement e vedrai che' andra' a posto.
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !