Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776

    [JAVA] genera exception quando faccio una select su un DB

    Ciao a tutti,

    Utilizzo Netbeans 7.4, ho problemi con l'utilizzo di un database.
    nell'appartato "Services" è presente e attiva la connessione, database connection:
    jdbc:derby://localhost:1527/sample [app on APP]
    se io clicco su + appare un db dal nome 'APP'
    se io clicco ancora su + appare 'Tables'
    se clicco ancora su + mi visualizza la tabella 'CUSTOMER'
    se clicco su 'CUSTOMER' con il bottone destro del mouse 'view data', mi visualizza tutti i dati della tabella.

    Genero un nuovo progetto 'JAVA web ' e scelgo 'web application'.
    Creo un nuovo deployment descriptor web.xml
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <resource-ref>
            <res-ref-name>jdbc/APP</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
            <res-sharing-scope>Shareable</res-sharing-scope>
        </resource-ref>
    </web-app>
    Ok, il <res-ref-name> è il nome di riferimento usato nell'albero JNDI .

    Come faccio a sapere il nome esatto da utilizzare?

    Perchè utilizzando una pagina JSP mi riporta un exception nel navigatore, come se la tabella non esistesse, vi riporto il codice:
    codice:
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
    <%-- 
        Document   : index
        Created on : Jan 20, 2014, 6:10:53 PM
        Author     : X
    --%>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
        <sql:query var="allRows" dataSource="jdbc/APP">
            SELECT * FROM customer
        </sql:query>
            
        <table border="1">
            <!-- column headers -->
            <tr>
            <c:forEach var="columnName" items="${allRows.columnNames}">
                <th><c:out value="${columnName}"/></th>
            </c:forEach>
        </tr>
        <!-- column data -->
        <c:forEach var="row" items="${allRows.rowsByIndex}">
            <tr>
            <c:forEach var="column" items="${row}">
                <td><c:out value="${column}"/></td>
            </c:forEach>
            </tr>
        </c:forEach>
    </table>
    
        </body>
    </html>
    e l'exception visualizzata nel navigatore è la seguente, dove sbaglio?

    HTTP Status 500 - Internal Server Error

    type Exception report

    messageInternal Server Error

    descriptionThe server encountered an internal error that prevented it from fulfilling this request.

    exception

    javax.servlet.ServletException:
    SELECT * FROM customer
    : Table/View 'CUSTOMER' does not exist.

    root cause

    java.sql.SQLSyntaxErrorException: Table/View 'CUSTOMER' does not exist.

    root cause

    org.apache.derby.client.am.SqlException: Table/View 'CUSTOMER' does not exist.

    note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.0 logs.

    Grazie,
    Roberto

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    ciò che vedi in netbeans sotto la voce databases serve solo come strumento per lo sviluppatore. Non fa parte dell'applicazione, è solo un editor per il db.
    Ciò detto, nel tuo codice vai ad infilare nell'albero JNDI una risorsa di tipo dataSource con il nome scelto da te, ma non l'hai dichiarata da nessuna parte. Dovresti mettere in WEB-INF un file xml che definisce quel datasource. Un esempio è il seguente:
    https://community.jboss.org/wiki/SetUpADerbyDatasource
    è un po' datato ma dovrebbe andare. In alternativa cerca nella doc del tuo web server per dei file di esempio.

    E ricordati le dipendenze. Nel classpath deve esserci il driver di derby. Di solito ce l'hanno tutti gli application server.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Quote Originariamente inviata da kuarl Visualizza il messaggio
    ciò che vedi in netbeans sotto la voce databases serve solo come strumento per lo sviluppatore. Non fa parte dell'applicazione, è solo un editor per il db.
    Ciò detto, nel tuo codice vai ad infilare nell'albero JNDI una risorsa di tipo dataSource con il nome scelto da te, ma non l'hai dichiarata da nessuna parte. Dovresti mettere in WEB-INF un file xml che definisce quel datasource. Un esempio è il seguente:
    https://community.jboss.org/wiki/SetUpADerbyDatasource
    è un po' datato ma dovrebbe andare. In alternativa cerca nella doc del tuo web server per dei file di esempio.

    E ricordati le dipendenze. Nel classpath deve esserci il driver di derby. Di solito ce l'hanno tutti gli application server.
    Ti ringrazio moltissimo della risposta.
    Quindi TUTTO quello che riguarda la connessione al DB è da scrivere nel suddetto file, in effetti se il server, dove è situato il DB, è esterno alla macchina(altro indirizzo IP, e non localhost) devo indicare da qualche parte IP e le credenziali d'accesso!

    C'e' la possibilità di creare questo collegamento automaticamente con dei plug-in in modo da generare automaticamente il file?

    Mentre il driver si genera con il deploy?

    Scusami faccio ancora molta confusione...

    Grazie,
    Roberto

  4. #4
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Quote Originariamente inviata da robynosse Visualizza il messaggio
    Ti ringrazio moltissimo della risposta.
    Quindi TUTTO quello che riguarda la connessione al DB è da scrivere nel suddetto file, in effetti se il server, dove è situato il DB, è esterno alla macchina(altro indirizzo IP, e non localhost) devo indicare da qualche parte IP e le credenziali d'accesso!

    C'e' la possibilità di creare questo collegamento automaticamente con dei plug-in in modo da generare automaticamente il file?

    Mentre il driver si genera con il deploy?

    Scusami faccio ancora molta confusione...

    Grazie,
    Roberto
    se non utilizzi maven, come credo, devi trovare il driver di derby e metterlo dentro la cartella WEB-INF. Sarà disponibile solo al run time ma è li che ti serve.
    Di tool automatici non ne conosco, ma di quei file se ne trovano di precostruiti un po' ovunque. Se cerchi nella documentazione del tuo application server sicuramente lo trovi.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Ho trovato quale era il problema:
    nel file web.xml era riportata questa riga:
    codice:
    <res-type>javax.sql.DataSource</res-type>
    l'ho sostituita con questa e ora funziona correttamente:
    codice:
    <res-type>javax.sql.ConnectionPoolDataSource</res-type>

    Roberto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.