You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Freddy Gonthier <fr...@gmail.com> on 2010/11/30 10:40:48 UTC

SQL 42X51

Bonjour,

Je ne parviens pas à utiliser une fonction d'un "Java External".


je cherche des informations pour utiliser le create function avec DERBY







j'ai réalisé une classe java et un fichier jar avec NetBeans 6.9.1, puis un
autre jar avec la commande jar cf ...





j'ai ensuite réalisé deux tests avec chacun des jar





j'ai exécuté : call sqlj.remove_jar('INSCRIPTIONENLIGNE002.POURDBDERBY',0);
CALL SQLJ.install_jar('C:\Documents and Settings\GONTHIER-F\Mes
documents\ProjetReservation\BaseDeDonnees\DerbyInverse\NetBeans\PourDBDerby\distDBDerby\PourDBDerby.jar',
'INSCRIPTIONENLIGNE002.POURDBDERBY', 0); CALL
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath',
'INSCRIPTIONENLIGNE002.POURDBDERBY');





j'ai arrêté et démarré javaDB.





 j'ai exécuté : create function nbJour(dated VARCHAR(10),datef VARCHAR(10))
returns integer language java external name 'PourDBDerby.nbJour' parameter
style java no sql RETURNS NULL ON NULL INPUT ; grant execute on function
INSCRIPTIONENLIGNE002.nbJour to PUBLIC;







j'ai exécuté : select nbJour(t."DateDebutReunion",t."DateFinReunion") from
INSCRIPTIONENLIGNE002.TR t;





Quel que soit le cas j'obtiens l'erreur : Code erreur -1, état SQL 42X51: La
classe 'PourDBDerby' n'existe pas ou est inaccessible. Cela peut se produire
si la classe n'est pas publique.

Code erreur 99999, état SQL XJ001: Exception Java : 'PourDBDerby:
java.lang.ClassNotFoundException'.



Voici le code de la classe java :





/*.
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pourderby;

import java.sql.SQLException;
import java.util.Date;

/**.
 *
 * @author GONTHIER-F
 */
public class PourDBDerby {

    /**.
     * Nombre de seconde dans une heure
     */
    private static final int TROISMC = 3600;
    /**.
     * Nombre d'heure dans une journée
     */
    private static final int VINGT4 = 24;
    /**.
     * Nombre de milliseconde dans une seconde
     */
    private static final int MILLE = 1000;
    /**.
     * Durée d'une journée en milliseconde
     */
    private static final long UNJOUR = TROISMC * VINGT4 * MILLE;

    public PourDBDerby() {
    }

    /**.
     * Retourne le nombre de millisecondes depuis Janvier 1, 1970, 00:00:00
GMT
     * représenté par cet objet Date.
     * @param datea java.util.Date
     * @return nombre de millisecondes
     */
    public static long getTime(final Date datea) throws SQLException {
        return datea.getTime();
    }

    /**.
     * Convertit une chaîne au format date JDBC échapper à une valeur Date.
     * AAAA-MM-JJ
     * @param datea chaîne au format AAAA-MM-JJ
     * @return la date du type java.util.Date
     */
    public static Date datetoInt(final String datea) throws SQLException {
        return java.sql.Date.valueOf(datea);
    }

    /**.
     * Calcule le nombre de jour entre deux dates au format AAAA-MM-JJ
     * Si deba est plus grande que fina, le nombre de jour retourné st
négatif
     * @param deba date de début
     * @param fina date de fin
     * @return le nombre de jour entre les deux dates.
     */
    public static int nbJour(final String deba, final String fina) throws
SQLException {
        final java.util.Date deb = PourDBDerby.datetoInt(deba);
        final java.util.Date fin = PourDBDerby.datetoInt(fina);
        final long ldeb = PourDBDerby.getTime(deb);
        final long lfin = PourDBDerby.getTime(fin);
        final long duree = lfin - ldeb;
        return (int) (duree / UNJOUR);
    }

    /**.
     * Calcule le nombre de jour entre deux dates de type java.util.Date
     * Si deba est plus grande que fina, le nombre de jour retourné st
négatif
     * @param deba date de début
     * @param fina date de fin
     * @return le nombre de jour entre les deux dates.
     */
    public static int nbJour(final Date deba, final Date fina) throws
SQLException {
        final long l = PourDBDerby.getTime(deba);
        final long lf = PourDBDerby.getTime(fina);
        final long duree = lf - l;
        return (int) (duree / UNJOUR);
    }
}



Que dois-je faire ?



Merci.