Hallo,
wir haben eine Bean definition angelegt unter: …./WEB-INF/classes/META-INF/nuclos/MySQL-beans.xml. Diese sieht wie folgt aus:
Dazu haben wir dann eine Bibliotheksregel entworfen die in den entsprechenden Fristenregeln genutzt wird (einfache Selects, etc.).
import java.util.Collection;
import java.util.ArrayList;
import java.util.HashMap;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
public class ShopSync {
private DataSource ds = (DataSource)org.nuclos.server.SpringApplicationContextHolder.getApplicationContext().getBean("shopDS");
private Connection c;
private PreparedStatement pstmt;
private ResultSet rs;
private ResultSetMetaData rsmd;
public HashMap getData(String sTable, String sIdfield, String sValue, String sOptionalWhere) {
HashMap mapResult = new HashMap();
try {
c = ds.getConnection();
pstmt = c.prepareStatement("SELECT * FROM "+sTable+" WHERE "+sIdfield+"= ? "+sOptionalWhere);
pstmt.setString(1, sValue);
rs = pstmt.executeQuery();
rsmd = rs.getMetaData();
int n, nmax = rsmd.getColumnCount();
if (rs.next()) {
for( n=1 ; n<=nmax ; n++ ) {
String sColumnType = rsmd.getColumnTypeName(n);
String sConame = rsmd.getColumnName(n);
if (sColumnType.equals("FLOAT") || sColumnType.equals("DECIMAL")) {
mapResult.put(rsmd.getColumnName(n), rs.getDouble(n));
} else if (sColumnType.equals("INT") || sColumnType.equals("TINYINT")) {
mapResult.put(rsmd.getColumnName(n), rs.getInt(n));
} else if (sColumnType.equals("DATETIME")) {
mapResult.put(rsmd.getColumnName(n), rs.getDate(n));
} else {
mapResult.put(rsmd.getColumnName(n), rs.getString(n));
}
}
}
rs.close();
c.close();
}
catch (SQLException ex) {
System.out.println(ex);
}
return mapResult;
}
}
In den Fristenregeln holen wir dann die Daten über die Bibliotheksregel und schreiben diese in die Nuclos DB.
Gruss
Jan