JDBC/SQL – Error bei DB2-Query aus Servlet
- Dieses Thema hat 1 Antwort und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 18 Jahre, 10 Monaten vonGast.
- AuthorPosts
- 4. August 2004 um 12:24 Uhr #2436
Hallo zusammen,
ich hänge bei meiner Servlet-Entwicklung ein wenig. Und zwar möchte ich nichts weiter als DB-Admins einen DB-Query via Webbrowser ausführen zu lassen.
Der Status ist folgender:Der Server läuft mit Windows 2000 Advanced Server englisch.
Ich deploye mein War-File unter dem IBM WebSphere Application Server Version 5.0.2.
Der DB2-Client Version 8.1 ist auf dem Applikationsserver installiert und konfiguriert (connect zur DB haut hin).
CLASSPATH ist auf dem Applicationserver gesetzt (.;C:DB2javadb2jcc.jar;C:DB2javadb2jcc_license_cu.jar;C:DB2bindb2jcct2.dll;…).Sourcecode:
————————————————————————
…String DBName = request.getParameter("dbname");
String DBAdminID = request.getParameter("dbadminid");
String DBAdminPW = request.getParameter("dbadminpw");
String selCmd = request.getParameter("selectcmd");// Angaben werden auf Vollständigkeit überprüft
String allFieldsFilled = "FALSE";…
if (allFieldsFilled.equals("TRUE"))
{
// Konfigurationsdaten fuer den DB-Connect werden aus Propertiedatei ausgelesen
String propDatei = getServletContext().getRealPath("/WEB-INF/cfg/db.properties");
File propFile = new File(propDatei);
String dbTreiber = "DBTreiber";
if (propFile.exists())
{
try
{
String propfilename = propDatei;
FileInputStream propFileIn = new FileInputStream(propfilename);
Properties dbconProps = new Properties();
dbconProps.load(propFileIn);
propFileIn.close();
dbTreiber = new String(dbconProps.getProperty("DBTreiber"));
}
catch(IOException ioe)
{
…
}
}// Verbindung zur Datenbank herstellen
String url = "jdbc:db2:" + DBName;
try
{
// JDBC-Treiber laden
Class.forName(dbTreiber);
Connection con = DriverManager.getConnection( url , DBAdminID , DBAdminPW );// SQL-Anweisung konstruieren
Statement stmt = con.createStatement();
String query = selCmd;// Anfrage ausführen
ResultSet rs = stmt.executeQuery(query);int row = 1;
int numColumns = rs.getMetaData().getColumnCount();
while (rs.next ())
{
out.print("Zeile " + row + ": ");
for (int column = 1; column <= numColumns; column++)
{
if (column > 1)
{
out.print(", ");
}
out.print(rs.getString(column));
}
out.println();
row++;
}
rs.close();
stmt.close();
con.close();
}
catch (ClassNotFoundException exc)
{
…
}
catch (SQLException exc)
{
…
}
}
else
{
//HTML-Form erzeugen
out.println("<form action="dbselect" method="POST">");
…
out.println("</form>");
}
out.println("</body>");
out.println("</html>");
}public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
doGet(request, response);
}
}
————————————————————————Compiliert wird mit folgendem Befehl:
javac -classpath C:…blabla…j2ee.jar;C:DB2javadb2jcc.jar;C:DB2javadb2jcc_license_cu.jar;C:DB2javadb2jcc_license_cisuz.jar;C:DB2BINdb2jcct2.dll dbselect.javaDas sollte mehr als genug sein (Die License-Dateien sollten eigentlich sogar überflüssig sein).
Fehlermeldung:
JDBC/SQL error: com.ibm.db2.jcc.a.SqlException: Failure in loading T2 native library db2jcct2Das bekomme ich meist weg in dem ich noch einmal den CLASSPATH neu setzte und die WebSphere-Dienste neu starte (hier wird die db2jcct2.dll im CLasspath erwartet).
Dann gibt es aber noch diese Meldung:JDBC/SQL error: com.ibm.db2.jcc.a.SqlException: The version of the IBM Universal JDBC driver in use is not licensed for connectivity to DB2 for Unix/Windows databases. To connect to this DB2 server, please obtain a licensed copy of the IBM DB2 Universal Driver for JDBC and SQLJ. An appropriate license file db2jcc_license_*.jar for this target platform must be installed to the application classpath. Connectivity to DB2 for Unix/Windows databases is enabled by any of the following license files: { db2jcc_license_cu.jar, db2jcc_license_cisuz.jar }
Was man hier von mir will ist mir (denke ich) schon klar. Aber wie an den vorliegenden Information zu erkennen geb ich doch alles. Die License-Jar’s sind im Classpath enthalten. Was brauchen die mehr für mein Glück???
Ich habe sogar die Datei "db2jcc_license_cisuz.jar" , welche standradmässig nicht beim DB2-Client dabei ist vom DB-Server geholt und mit in den CLASSPATH eingetragen.
Ich bin für alle Tipps dankbar.
4. August 2004 um 14:40 Uhr #2915So. Ich bin zum Schluss doch noch selbst auf die Lösung gekommen. Eigentlich ganz einfach. Mein Fehler war, dass ich bei CLASSPATH nur an das Betriebssystem gedacht habe. Allerdings müssen die license-Jar’s nicht oder nicht nur dort veröffentlich werden sondern (auch) als JDBC-Provider im Classpath/Enviroment innerhalb von WebSphere beim jeweiligen Applicationserver hinzugfügt werden.
IBM WebSphere Application Server Administrationsconsole:
-Resources
-JDBC Providers > DB2 Universal JDBC Driver Provider
-Classpath:
${DB2UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc.jar
${DB2UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc_license_cu.jar
${DB2UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc_license_cisuz.jarDas war’s schon.
(nicht ganz, ich habe sicherheitshalber noch die db2jcct2.dll hinzugefügt) - AuthorPosts
You must be logged in to reply to this topic.