Wie finde ich die konkrete Implementierung?

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hallo, ich habe da mal eine Frage:

Als kleines Beispiel mal:
Java:
PreparedStatement stmt = connection.prepareStatement(sql);
...
System.out.println(stmt.toString());

Ich habe hier bewusst mal toString() geschrieben.
Ich würde gerne wissen, wie diese toString()-Methode konkret implementiert ist?
Wie komme ich (in Eclipse) zu dieser Implementierung?
Beim Klicken auf die Methode wird man immer zu Object.toString() geleitet.
Wie macht man das?
Vielelicht eine Anfängerfrage, aber ich bin grad irgendwie überfragt.

mfg Verjigorm
 
System.out.println(stmt.getClass());

dann die entsprechende Klasse öfften (Strg-Shift-T in Eclipse) und da die Methode suchen, falls sie überhaupt überschrieben wurde,
ansonsten in den Oberklassen, was bisschen aufwendig werden könnte,

einfacher ist es gegebenenfalls zu casten,
wenn du z.B. herausgefunden hast, dass die Klasse in diesem Fall JDBCFastPreparedStatement heißt, dann schreibe
JDBCFastPreparedStatement x = (JDBCFastPreparedStatement) stmt;
x.toString();
und klicke nun auf die Methode, dann sucht Eclipse die tiefste Implementierung raus, je nach Vererbung

Pech hast du, wenn die Klasse nicht public ist, dann funktioniert dieser Trick nicht so gut
 
schlechtes Beispiel... da PreparedStament ein Interface ist ;-)

Was benutzt du für einen Datenbanktreiber?

setzt dir mal dort einen Breakpoint und schau dir die Variable genauer im Debugger an? Was ist das für eine Klasse? Bei mir zb ist es im Moment oracle.jdbc.driver.T4CPreparedStatement..

ich denk aber nicht, das oracle mir hier den Code liefert ;-)
 
Zuletzt bearbeitet:
Ok, ich habe schon gedacht, ich blamiere mich mit dieser "leichten" Frage, aber es ist doch komplizierter, als ich dachte 😀

In meinem Fall ist es
com.mysql.jdbc.JDBC4PreparedStatement

Jetzt brauche ich nur noch den Source von dem Treiber 😀 (hoffe ich)

Danke schonmal
 
Java:
/*
 Copyright  2002-2007 MySQL AB, 2008 Sun Microsystems

 This program is free software; you can redistribute it and/or modify
 it under the terms of version 2 of the GNU General Public License as 
 published by the Free Software Foundation.

 There are special exceptions to the terms and conditions of the GPL 
 as it is applied to this software. View the full text of the 
 exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
 software distribution.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 */

package com.mysql.jdbc;

import java.io.InputStream;
import java.io.Reader;
import java.sql.NClob;
import java.sql.RowId;
import java.sql.SQLXML;
import java.sql.SQLException;
import java.sql.Types;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.PreparedStatement.ParseInfo;


public class JDBC4PreparedStatement extends PreparedStatement {

	public JDBC4PreparedStatement(ConnectionImpl conn, String catalog) throws SQLException {
		super(conn, catalog);
	}
	
	public JDBC4PreparedStatement(ConnectionImpl conn, String sql, String catalog)
		throws SQLException {
		super(conn, sql, catalog);
	}
	
	public JDBC4PreparedStatement(ConnectionImpl conn, String sql, String catalog,
			ParseInfo cachedParseInfo) throws SQLException {
		super(conn, sql, catalog, cachedParseInfo);
	}

	public void setRowId(int parameterIndex, RowId x) throws SQLException {
		JDBC4PreparedStatementHelper.setRowId(this, parameterIndex, x);
	}
	
	/**
	 * JDBC 4.0 Set a NCLOB parameter.
	 * 
	 * @param i
	 *            the first parameter is 1, the second is 2, ...
	 * @param x
	 *            an object representing a NCLOB
	 * 
	 * @throws SQLException
	 *             if a database error occurs
	 */
	public void setNClob(int parameterIndex, NClob value) throws SQLException {
		JDBC4PreparedStatementHelper.setNClob(this, parameterIndex, value);
	}

	public void setSQLXML(int parameterIndex, SQLXML xmlObject)
			throws SQLException {
		JDBC4PreparedStatementHelper.setSQLXML(this, parameterIndex, xmlObject);
	}
}
toString wird nicht überschrieben...

bzw was hast du überhaupt damit vor?
 
Ja danke, habe alles gefunden, was ich gesucht habe 🙂

Java:
	/**
	 * Returns this PreparedStatement represented as a string.
	 * 
	 * @return this PreparedStatement represented as a string.
	 */
	public String toString() {
		StringBuffer buf = new StringBuffer();
		buf.append(super.toString());
		buf.append(": "); //$NON-NLS-1$

		try {
			buf.append(asSql());
		} catch (SQLException sqlEx) {
			buf.append("EXCEPTION: " + sqlEx.toString());
		}

		return buf.toString();
	}

Im Endeffekt war ich an asSQL() interessiert!

mfg Verjigorm
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben