MYSQL-Zugriff mittels einer Java-Bean

Status
Nicht offen für weitere Antworten.
J

Julia Schulz

Gast
Hi ich möchte gerne über eine Java BEAN eine Datenbank -Verbindung zu einer MYSQL Datenbank erzeugen allerdings wenn ich in Easy Eclipse das ganze ausführen möchte bekomm ich folgende Fehlermeldung . Da kommt ständig die Meldung Fehler in line of code was aber nicht sein kann da ich diese Beispiele von einem Buch verwende. Ist mir nicht ganz klar wo da der Fehler liegen könnte? Vl weis jemand aus em Forum wo der Fehler sein könnte ????

Beide JAVA Dateien ( lesenDB.jsp und DBZugriff befinden sich im package namens DB.


Fehleranzeige:


Code:
--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 30 in the jsp file: /lesendb.jsp
benutzernr cannot be resolved
27: String benutzernr = tabelleBenutzer.getString("BENUTZERNR");
28: String pseudonym = tabelleBenutzer.getString("PSEUDONYM");%>
29: <tr>
30: <td><%=benutzernr %></td>
31: <td><%=pseudonym %></td>
32: <td><%=tabelleBenutzer.getString("PASSWORT")%></td>
33: </tr>


An error occurred at line: 31 in the jsp file: /lesendb.jsp
pseudonym cannot be resolved
28: String pseudonym = tabelleBenutzer.getString("PSEUDONYM");%>
29: <tr>
30: <td><%=benutzernr %></td>
31: <td><%=pseudonym %></td>
32: <td><%=tabelleBenutzer.getString("PASSWORT")%></td>
33: </tr>
34: <%catch} %>


An error occurred at line: 34 in the jsp file: /lesendb.jsp
Syntax error on token "catch", { expected
31: <td><%=pseudonym %></td>
32: <td><%=tabelleBenutzer.getString("PASSWORT")%></td>
33: </tr>
34: <%catch} %>
35: 
36: 
37: 


An error occurred at line: 34 in the jsp file: /lesendb.jsp
Syntax error, insert "}" to complete Block
31: <td><%=pseudonym %></td>
32: <td><%=tabelleBenutzer.getString("PASSWORT")%></td>
33: </tr>
34: <%catch} %>
35: 
36: 
37: 


An error occurred at line: 34 in the jsp file: /lesendb.jsp
Syntax error, insert "Finally" to complete TryStatement
31: <td><%=pseudonym %></td>
32: <td><%=tabelleBenutzer.getString("PASSWORT")%></td>
33: </tr>
34: <%catch} %>
35: 
36: 
37: 



An error occurred at line: 97 in the generated java file
Syntax error on token "catch", Identifier expected


An error occurred at line: 99 in the generated java file
out cannot be resolved


An error occurred at line: 99 in the generated java file
_jspx_out cannot be resolved


An error occurred at line: 100 in the generated java file
out cannot be resolved


An error occurred at line: 100 in the generated java file
out cannot be resolved


An error occurred at line: 101 in the generated java file
out cannot be resolved


An error occurred at line: 102 in the generated java file
_jspx_page_context cannot be resolved


An error occurred at line: 102 in the generated java file
_jspx_page_context cannot be resolved


An error occurred at line: 104 in the generated java file
Syntax error on token "finally", { expected


An error occurred at line: 105 in the generated java file
_jspxFactory cannot be resolved


An error occurred at line: 105 in the generated java file
_jspxFactory cannot be resolved


An error occurred at line: 105 in the generated java file
_jspx_page_context cannot be resolved

Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.


Also den Treiber hab ich selbstverständlich importiert das is der MYSQL Treiber mysq-connector 5.0.8.




Ich poste mal meine DB:

-- phpMyAdmin SQL Dump
-- version 2.11.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 08. März 2008 um 16:01
-- Server Version: 5.0.51
-- PHP-Version: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Datenbank: `dbbenutzer`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `benutzer`
--

CREATE TABLE IF NOT EXISTS `benutzer` (
`benutzernr` int(11) NOT NULL,
`pseudonym` varchar(10) NOT NULL,
`passwort` varchar(6) NOT NULL,
PRIMARY KEY (`benutzernr`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `benutzer`
--

INSERT INTO `benutzer` (`benutzernr`, `pseudonym`, `passwort`) VALUES
(1, 'tom', 'test'),
(2, 'uli', 'test'),
(3, 'klaus', 'test');



Hier kommt dann meine lesendb.jsp:



Code:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>JSP-Beispiel: Lesen einer Datenbank</title>
</head>
<body>




 Inhalt der benutzer-Datenbank</p>
<table border="1" cellpadding="0" cellspacing="0">

<tr>

<td>Benutzer-Nr</td>
<td>Pseudonym</td>
<td>Passwort</td>
</tr>

<jsp:useBean id="eineDB" class="DB.DBZugriff" />
// Dann befindet sich das Ergebnis in ein Objekt der Klasse ResultSet
<% java.sql.ResultSet tabelleBenutzer = eineDB.leseDB(); %>
while (tabelleBenutzer.next())
{
String benutzernr = tabelleBenutzer.getString("BENUTZERNR");
String pseudonym = tabelleBenutzer.getString("PSEUDONYM");%>
<tr>
<td><%=benutzernr %></td>
<td><%=pseudonym %></td>
<td><%=tabelleBenutzer.getString("PASSWORT")%></td>
</tr>
<%catch} %>



</table>
</body>
</html>



Und zu guter letzt die JAVA-Klasse DBZugriff.java







Code:
package DB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class DBZugriff {


	private java.sql.Connection dieVerbindung;

	public DBZugriff() throws InstantiationException, IllegalAccessException, SQLException


	{
		try {

		// Die Verbindung zur DB wird einmal am Anfang aufgebaut!
			// Erzeugen und laden des Treibers
			// Der Name des Treibers lautet:....................


			Class.forName("com.mysql.jdbc.Driver").newInstance();
			// Holen eines Connection Objekts
			// die DB lautet dbbenutzer
			dieVerbindung = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/dbbenutzer","","");
		}

		catch(ClassNotFoundException e1)
		{

			System.out.println
			("ClassNotFoundException:" + e1.getMessage());


		}

	}


	// Lesende Operationen


		public java.sql.ResultSet leseDB()
		{

			java.sql.Statement statement;
			java.sql.ResultSet tabelle;
			try
			{

				// Abfrage der DB
				// hier Inhalt der gesamten Benutzertabelle
				statement = dieVerbindung.createStatement();
				// Ausführung der SQL Anweisung
				tabelle = statement.executeQuery("SELECT * FROM BENUTZER ");
				//Rückgabe des Ergebnisses vom Typ ResultSet
				return tabelle;

			}

			catch(java.sql.SQLException e3)
			{



			}


			return null;
			}





}
[/code]
 
J

Julia Schulz

Gast
so hab geseh ndas ich einen kleinen Syntaxfehler gehabt habe allerdings wirft Easy Eclipse nun eine Null Pointer Exception:
Was is daran bitte nur falsch?????



FEHLER



Code:
type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

java.lang.NullPointerException
	DB.DBZugriff.leseDB(DBZugriff.java:53)
	org.apache.jsp.lesendb_jsp._jspService(lesendb_jsp.java:72)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.
 
G

Guest

Gast
Mach das ganze zuerst ohne JSP. Einfach ein kleines Programm, mit dem du die Daten auf die Console ausgibst.
Wenn dies funktioniert, kannst du es in JSP verwenden.
 
J

Julia Schulz

Gast
mmh weis niemand wo der Fehler sein könnte ?? Egal was ich versuch ständig wird eine Null Pointer Exception geworfen.
 
M

maki

Gast
mmh weis niemand wo der Fehler sein könnte ??
Klar, irgendwo in deinem schrecklichen Code...

Solltest erst das eine dann das andere lernen, d.h. erst DB Zugriff danach vielleicht JSP und Web.
Nix für ungut, aber so wie das aussieht, kannst du weder das eine noch das andere.

Ist denn der JDBC Treiber im classpath?
Lagere mal das newInstance auf eine eigene Zeile aus.
 
G

Guest

Gast
HI also der schreckliche Code stammt von einem Buch JSP für Einsteiger sorry ;-)
Das is mein erster Versuch mit JBEAN und MYSQL.

Wie meinst du denn das genau das ich die newInstance() auslagern sollte?
 
M

maki

Gast
Vergiss dass mit newInstance.

Hol dir ein besseres Buch ;) Deins muss ja wirklich alt sein, oder einfach nur schlecht(?), nichtmal die naming conventions wurden eingehalten...

Zu deinem Problem, die NPE tritt in DBZugriff in Zeile 53 auf, bei createStatament(), anscheinend ist dieVerbindung null.
 
J

Julia Schulz

Gast
Also i hab jetzt mal einen Test versucht und hab die Klasse DBZugriff durch eine Main-Methode aufgerufen da bekomm ich sofort eine Verbindung zu MYSQl aber sobald ich die Main-Methode lösche und auf Tomcat starte bekomm ich ständig Null Pointer Exception als Fehlermeldung.


Code:
package DB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;


public class DBZugriff {
	private java.sql.Connection dieVerbindung;


private final String DBUSER ="root";
	private final String PASSWORD ="";
	private final String DBNAME ="dbbenutzer";

	String url = "jdbc:mysql://localhost/"+DBNAME+"?user="+DBUSER+"&password="+PASSWORD;
public DBZugriff() throws Exception, IllegalAccessException
		{
	try
		{

		// Die Verbindung zur DB wird einmal am Anfang aufgebaut!
			// Erzeugen und laden des Treibers
			// Der Name des Treibers lautet:....................


			Class.forName("com.mysql.jdbc.Driver").newInstance();
			// Holen eines Connection Objekts
			// die DB lautet dbbenutzer
			dieVerbindung = java.sql.DriverManager.getConnection(url);



		}

		catch(ClassNotFoundException e1)
		{

			System.out.println
			("ClassNotFoundException:" + e1.getMessage());


		}

	}


	// Lesende Operationen


		public java.sql.ResultSet leseDB()
		{

			java.sql.Statement statement;
			java.sql.ResultSet tabelle;
			try
			{

				// Abfrage der DB
				// hier Inhalt der gesamten Benutzertabelle
				statement = dieVerbindung.createStatement();
				// Ausführung der SQL Anweisung
				tabelle = statement.executeQuery("SELECT * FROM benutzer ");
				//Rückgabe des Ergebnisses vom Typ ResultSet
				return tabelle;

			}

			catch(java.sql.SQLException e3)
			{



			}


			return null;
			}
//##################################################################################
		// DAS HIER SCHREIBE DB IST NEU !!!!!!!!!!!!!

public synchronized void schreibeDB (String pseudonym, String passwort)
{

String benutzerString = "Leer";
int benutzernr = 0;

java.sql.Statement statement = null;
java.sql.ResultSet tabelle = null;
try {

	// Statement erzeugen
	statement = dieVerbindung.createStatement();

// Letzte Benutzernummer lesen
	// DIE SQL - Operation MAX liefert den  größten Wert einer Spalte
	// DB-Operationen ausführen
	tabelle = statement.executeQuery("SELECT MAX(BENUTZERNR)FROM BENUTZER");
	// Zeiger auf 1. Element positionieren
tabelle.next();
// 1. Element der 1.Spalte lesen
benutzernr = tabelle.getInt(1);
// benutzernr um 1 erhöhen
benutzernr++;

benutzerString = Integer.toString(benutzernr);

// Neuen Eintrag im String insert zwischenspeichern

String insert = "INSERT INTO benutzer (BENUTZER,PSEUDONYM,PASSWORT)";

// NEUE WERTE im STRINGVALUES zwischenspeichern

String values = "VALUES('" + benutzerString + "','" + pseudonym + "','" + passwort + "')";

// DB-Operationen ausführen, d.h. Daten in Tabelle eintragen

statement.executeUpdate(insert + values);
}
catch (java.sql.SQLException e3)
{


}

finally
{

try
{
	// Die close Operation kann ebenfalls eine Ausnahme erzeugen, die abgefangen werden muss
	tabelle.close();
	statement.close();

}
catch ( java.sql.SQLException e3)
{


}
}

}

public static void main (String args []) throws IllegalAccessException, Exception
{


DBZugriff meinzugriff = new DBZugriff();
System.out.println("DB erfoglreich");
}


}
 
J

Julia Schulz

Gast
Was müsste man den in Zeile 53 abändern damit das Statement nicht Null ist?
 
M

maki

Gast
Nix. Der Fehler liegt woanders, die Connection sollte nicht null sein.
 
J

Julia Schulz

Gast
mmh jetzt verwirst du mich?? Wie würdest du den das ganze schreiben??
 
M

maki

Gast
Rufe mal die leseDB Methode in deiner Main auf.

WIe ich das schreiben würde? Nützt doch hier nix, du musst erstmal die Grundlagen verstehen.
 
J

Julia Schulz

Gast
So hab ich gemacht dann kommt trotzdem erfolgreich als Meldunf in der Konsole.


public static void main (String args []) throws IllegalAccessException, Exception
{


DBZugriff meinzugriff = new DBZugriff();
leseDB();
System.out.println("DB erfoglreich");
}
 
M

maki

Gast
Der MySQL Treiber, wird der auch ins WEB-INF/lib Verzeichniss kopiert?
Bekommst du eine Exception in der Tomcat Konsole?
 
J

Julia Schulz

Gast
Also ich hab den Treiber über Eclipse " Projekt" Java Builth" importiert der wird mir anschließend in der Library angezeigt.

Wie soll ich den in die LIB kopierne manuel per Mouse?? Sorry das i so sau dumm frage aber ich kenn das nur über Java Builth.....
 
M

maki

Gast
Musst dich entscheiden.
Anscheinend kennst du dich weder mit JDBC noch mit Webanwendungen aus.
Zu versuchen beides auf einmal zu erlernen frustriert nur unnötig.

Also, was willst du zuerst lernen? ;)
Mein Tipp: JDBC ist um einiges einfacher als Webanwendungen, solltest dich aber mit Java ganz gut auskennen, dein "Exceptionhandling" macht mir nicht den Eindruck.

Nicht böse sein, aber manchmal hilft es einen Schritt zurückzumachen wenn man nicht weiterkommt.
 
J

Julia Schulz

Gast
Alos ich möchte gerne Web-Anwendungen lernen und mein Ziel war es in einem Formular Name und Passwort einzugeben das anschließend in eine MYSQL DB gespeichert wird also so eine Art Login.
 
M

maki

Gast
Suche dir ein gutes Buch über Servlets, dann eines über JSPs.
Da wirst du dann zwangsläufig über die JSTL stolpern, da gibt es auch fertige Tags für den JDBC Zugriff, auch wenn ich nix davon halte.

In JSPs sollte man Scriptlets unbedingt vermeiden, Java, JSP, HTML, CSS, JavaScript und SQL zu mischen führt zu einem Chaos.

Solltest in den Servlet/JSP Büchern nach MVC (bzw. Model 2) suchen, sollte dann klarer werden wie man das "richtig" macht.

Wieviel Zeit hast du denn?
 
J

Julia Schulz

Gast
Zeit hab ich nur 2 Tage um das ganze abzugeben leider..... :(
 
J

Julia Schulz

Gast
nene für Professor das is so ne Punkte Aufgabe... obwohl man noch Anfänger is heul........
 
M

maki

Gast
Sieh doch mal ins WEB-INF/lib Verzeichniss, ob da der MySQL Treiber drinnen liegt.

Wenn du eine Exception fängst, schlucke sie nicht einfach, macht die Fehlersuche fast unmöglich, zumindest in System.out schreiben.
Solltest dir die Meldungen auf der Tomcat Konsole ansehen, ob eine der Exceptions geworfen wurde.
 
J

Julia Schulz

Gast
Also i hab jetzt den MYSQL Treiber manuel in meine LIB kopiert mysql-connector-java-5.0.8

und Tomcat bringt mir auf der Konsole diesen Fehler.


Code:
09.03.2008 12:55:16 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Programme\EasyEclipse Server Java 1.2.2.2\jre\bin;.;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
09.03.2008 12:55:16 org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
09.03.2008 12:55:16 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 563 ms
09.03.2008 12:55:16 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
09.03.2008 12:55:16 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.26
09.03.2008 12:55:16 org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
09.03.2008 12:55:17 org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
09.03.2008 12:55:17 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
09.03.2008 12:55:17 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/16  config=null
09.03.2008 12:55:17 org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
09.03.2008 12:55:17 org.apache.catalina.startup.Catalina start
INFO: Server startup in 593 ms
ClassNotFoundException:com.mysql.jdbc.Driver
09.03.2008 12:55:29 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
	at DB.DBZugriff.schreibeDB(DBZugriff.java:132)
	at org.apache.jsp.eintragendb_jsp._jspService(eintragendb_jsp.java:74)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Thread.java:595)
 
J

Julia Schulz

Gast
mmh also Zeile 132 wäre im Code folgendes:






finally
{

try
{
// Die close Operation kann ebenfalls eine Ausnahme erzeugen, die abgefangen werden muss
tabelle.close();
statement.close();

}


Ich werd daraus einfach nicht schlau
 
J

Julia Schulz

Gast
soll ich tabelle.close und statement.close entfernen??
 
G

Guest

Gast
Julia Schulz hat gesagt.:
soll ich tabelle.close und statement.close entfernen??
Nein, nur auf null prüfen.

1) Ändere die BenutzerNr-Spalte in das hier

BenutzerNr int(11) NOT NULL auto_increment,

2) Führe das Update wie folgt aus
Code:
PreparedStatement stmt = null;
try
{
   stmt = getConnection().prepareStatement(
      "INSERT INTO Benutzer (Pseudonym, Passwort) VALUES (?, ?)"
   );
   stmt.setString(1, pseudonym);
   stmt.setString(2, passwort);
   stmt.executeUpdate();
}
catch(SQLException e)
{
   // Logger.error(e);
   e.printStackTrace();
}
finally
{
   if(stmt != null)
   {
      try
      {
         stmt.close();
      }
      catch(SQLException e)
      {
         // Logger.error(e);
         e.printStackTrace();
      }
   }
}
 
J

Julia Schulz

Gast
Muss ich diesen Code in die schreibeDB() kopieren?? oder wo willst du das genau hin haben sorry nochmal das ich so fragen muss;-) Danke auf jeden Fall für deine Hilfe
 

semi

Top Contributor
OK, mir ist langweilig. ;) Wir gehen es mal Schritt für Schritt durch.
Du kannst dir diese Vorgehensweise merken und, bis du was besseres drauf hast, immer wieder anwenden.

1) Du hast zunächst eine Entität/Klasse Benutzer
Code:
public class Benutzer
{
   private Integer nr;
   private String pseudonym;
   private String passwort;

   public Benutzer()
   {
   }

   // Getter und Setter hier ergänzen
}
2) Die Benutzer werden gelesen und gespeichert. Dabei können auch Fehler auftreten.
Am besten definierst du ein Interface zum Lesen/Schreiben und eine passende Exception (hier DaoException)
Dao steht für Data Access Object.
Code:
/**
 * Dao zum Lesen und Schreiben von Benutzerdaten.
 */
public interface BenutzerDao
{
   /**
    * Liefert eine Liste aller Benutzer.
    *
    * @return Liste aller Benutzer
    * @throws DaoException Wird geworfen, wenn das Lesen scheitert.
    */
   List<Benutzer> readBenutzerList() throws DaoException;

   /**
    * Liefert einen Benutzer mit der gegebenen Nummer.
    *
    * @param nr Nummer des Benutzers.
    * @return Gefundener Benutzer.
    * @throws DaoException Wird geworfen, wenn das Lesen scheitert
    * oder kein Benutzer mit gegebener Nummer gefunden wird.
    */
   Benutzer readBenutzer(Integer nr) throws DaoException;

   /**
    * Speichert den gegebenen Benutzer.
    *
    * @param benutzer Zu speichernder Benutzer.
    * @return Gespeicherter Benutzer.
    * @throws DaoException Wird geworfen, wenn das Schreiben scheitert.
    */
   Benutzer saveBenutzer(Benutzer benutzer) throws DaoException;
}
und die Exception
Code:
/**
 * Exception der Dao-Schicht. Kapselt Fehler in Dao-Implementierungen.
 */
public class DaoException extends Exception
{
   private static final long serialVersionUID = 618840826778824033L;

   /**
    * Konstruktor.
    *
    * @param message Fehlermeldung
    */
   public DaoException(String message)
   {
      super(message);
   }

   /**
    * Konstruktor.
    *
    * @param message Fehlermeldung
    * @param cause Fehlerursache
    */
   public DaoException(String message, Exception cause)
   {
      super(message, cause);
   }
}
3) Für deine JSP-Seite brauchst du irgendeine Bean. Wir lassen die Bean das Interface
implementieren und die Funktionalität an die tatsächliche Implementierung delegieren. Beachte, dass dir noch
die Implementierung fehlt.... kommt noch.
Code:
/**
 * Benutzer-Bean.
 */
public class BenutzerBean implements BenutzerDao
{
   private BenutzerDao dao;

   /**
    * Konstruktor.
    */
   public BenutzerBean()
   {
      dao = ... hier wird die Implementierung instanziiert;
   }

   /**
    * Liefert eine Liste aller Benutzer.
    *
    * @return Liste aller Benutzer
    * @throws DaoException Wird geworfen, wenn das Lesen scheitert.
    */
   public List<Benutzer> readBenutzerList() throws DaoException
   {
      return dao.readBenutzerList();
   }

   /**
    * Liefert einen Benutzer mit der gegebenen Nummer.
    *
    * @param nr Nummer des Benutzers.
    * @return Gefundener Benutzer.
    * @throws DaoException Wird geworfen, wenn das Lesen scheitert
    * oder kein Benutzer mit gegebener Nummer gefunden wird.
    */
   public Benutzer readBenutzer(Integer nr) throws DaoException
   {
      return dao.readBenutzer(nr);
   }

   /**
    * Speichert den gegebenen Benutzer.
    *
    * @param benutzer Zu speichernder Benutzer.
    * @return Gespeicherter Benutzer.
    * @throws DaoException Wird geworfen, wenn das Schreiben scheitert.
    */
   public Benutzer saveBenutzer(Benutzer benutzer) throws DaoException
   {
      return dao.saveBenutzer(benutzer);
   }
}
4) Wir haben keine Datenbank, daher schreiben wir zunächst eine Dummy-Implementierung,
um zumindest paar Daten für die JSP-Seiten zu haben.
Da du hier gegen Interface (BenutzerDao) programmierst, kann die Implementierung später
ersetzt werden, ohne den Rest anpassen zu müssen.
Wir packen paar Benutzer in eine HashMap und gut ist.
Code:
/**
 * Eine Dummy-Implementierung von BenutzerDao.
 */
class BenutzerDaoDummyImpl implements BenutzerDao
{
   private Map<Integer, Benutzer> benutzerMap = new HashMap<Integer, Benutzer>();
   private static Integer sequence = Integer.valueOf(1);

   /**
    * Konstruktor.
    */
   public BenutzerDaoDummyImpl()
   {
      // Testdaten
      addBenutzer("Bart", "geheim");
      addBenutzer("Lisa", "secret");
      addBenutzer("Homer", "passwort");
   }

   /**
    * Liefert eine Liste aller Benutzer.
    *
    * @return Liste aller Benutzer
    * @throws DaoException Wird geworfen, wenn das Lesen scheitert.
    */
   public List<Benutzer> readBenutzerList() throws DaoException
   {
      return new LinkedList<Benutzer>(benutzerMap.values());
   }

   /**
    * Liefert einen Benutzer mit der gegebenen Nummer.
    *
    * @param nr Nummer des Benutzers.
    * @return Gefundener Benutzer.
    * @throws DaoException Wird geworfen, wenn das Lesen scheitert
    * oder kein Benutzer mit gegebener Nummer gefunden wird.
    */
   public Benutzer readBenutzer(Integer nr) throws DaoException
   {
      assert nr != null : "Benutzernummer darf nicht null sein!";
      Benutzer result = benutzerMap.get(nr);
      if(result == null)
      {
         throw new DaoException(
               String.format("Ein Benutzer mit der Nummer '%d' existiert nicht!", nr));
      }
      return result;
   }

   /**
    * Speichert den gegebenen Benutzer.
    *
    * @param benutzer Zu speichernder Benutzer.
    * @return Gespeicherter Benutzer.
    * @throws DaoException Wird geworfen, wenn das Schreiben scheitert.
    */
   public Benutzer saveBenutzer(Benutzer benutzer) throws DaoException
   {
      assert benutzer != null : "Benutzer darf nicht null sein!";
      Benutzer result = benutzer;
      // Ein neuer Benutzer (noch keine Id), dann neuanlegen, sonst aktualisieren
      if(benutzer.getNr() == null)
      {
         addBenutzer(benutzer);
      }
      else
      {
         result = readBenutzer(benutzer.getNr());
         result.setPseudonym(benutzer.getPseudonym());
         result.setPasswort(benutzer.getPasswort());
      }
      return result;
   }

   /**
    * Erstellt einen neuen Benutzer.
    *
    * @param pseudonym Pseudonym des Benutzers
    * @param passwort Passwort des Benutzers
    * @return Neuer Benutzer
    */
   private Benutzer addBenutzer(String pseudonym, String passwort)
   {
      Benutzer benutzer = new Benutzer();
      benutzer.setPseudonym(pseudonym);
      benutzer.setPasswort(passwort);
      addBenutzer(benutzer);
      return benutzer;
   }

   /**
    * Erstellt einen neuen Benutzer.
    *
    * @param benutzer Neuer Benutzer
    */
   private void addBenutzer(Benutzer benutzer)
   {
      benutzer.setNr(nextSequence());
      benutzerMap.put(benutzer.getNr(), benutzer);
   }

   /**
    * Liefert die nächste Benutzernummer.
    *
    * @return Benutzernummer
    */
   private Integer nextSequence()
   {
      synchronized(sequence)
      {
         Integer result = sequence;
         sequence = Integer.valueOf(sequence.intValue()+1);
         return result;
      }
   }
}
5) Damit das ganze schmerzlos geht, definieren wir noch eine Factory, die die Implementierung
erzeugt und verwenden diese im Konstruktor von BenutzerBean.
Warum? Damit ist die Bean zunächst mal komplett. Wenn du die Implementierung von BenutzerDao
austauschen möchtest, brauchst du nur in Factory eine andere Implementierung zu instanziieren.
Das liesse sich auch konfigurierbar machen... das lassen wir aber mal.
Code:
/**
 * Factory zur Instanziierung von Dao-Implementierungen.
 */
public final class DaoFactory
{
   /**
    * Konstruktor.
    */
   private DaoFactory()
   {
   }

   /**
    * Liefert eine Implementierung von BenutzerDao.
    *
    * @return Implementierung von BenutzerDao.
    */
   public static BenutzerDao getBenutzerDao()
   {
      // Die Dummy-Implementierung instanziieren. Das wird später durch eine Implementierung
      // ersetzt, die auf die Datenbank losgeht.
      return new BenutzerDaoDummyImpl();
   }
}
und den Konstruktor von BenutzerBean anpassen.
Code:
   /**
    * Konstruktor.
    */
   public BenutzerBean()
   {
      // Implementierung von BenutzerDao holen... was auch immer es ist.
      dao = DaoFactory.getBenutzerDao();
   }
Damit hast du schon eine funktionierende Version, die in JSP verwendet werden kann.
z.B. wie folgt
Code:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="benutzerBean" class="examples.jsp.BenutzerBean" scope="application" />
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <title>Benutzerliste</title>
</head>
<body>
<table border="1">
   <thead>
      <tr>
         <td>Nr</td>
         <td>Pseudonym</td>
         <td>Passwort</td>
      </tr>
   </thead>
<%
for(examples.jsp.domain.Benutzer benutzer : benutzerBean.readBenutzerList())
{
%>
   <tr>
      <td><%=benutzer.getNr()%></td>
      <td><%=benutzer.getPseudonym()%></td>
      <td><%=benutzer.getPasswort()%></td>
   </tr>
<%
}
%>
</table>
</body>
</html>

Kannst du mir soweit folgen? Probiere es aus und sag Bescheid, wenn es gelaufen ist.
 

semi

Top Contributor
PS: An die Experten hier. ;) Man mag über die Vorgehensweise streiten, insbesondere über die u.U. unnötige
Dao-Schicht. Das ganze ist aber gut für Anfänger, da es eine systematische und strukturierte Vorgehensweise
erzwingt/ermöglicht.
 
J

Julia Schulz

Gast
Erstmal Danke Jungs bin noch am herum experimentieren!!! Grüße eure Julia
 
J

Julia Schulz

Gast
MMH also wenn ich den ganzen Code kopiere und ausführen will dann erscheint in Easy Eclipse an der Seite einige Rote Balken die auf einen Fehler hinweisen ich soll da ständig irgend etwas abändern im Code ??Und das soll ich in jeder Klasse machen wo du hier reinkopiert hattest...
 
G

Guest

Gast
Julia Schulz hat gesagt.:
MMH also wenn ich den ganzen Code kopiere und ausführen will dann erscheint in Easy Eclipse an der Seite einige Rote Balken die auf einen Fehler hinweisen ich soll da ständig irgend etwas abändern im Code ??Und das soll ich in jeder Klasse machen wo du hier reinkopiert hattest...
Mach mal Ctrl->Shift->O im Editor, in Eclipse. Wahrscheinlich fehlen dir nur die Imports (List, LinkedList etc.).
Ansonsten ist es direkt compilierbar, da ist nix spektakuläres drin. Nur die Getter und Setter in der Klasse
Benutzer musst du noch erstellen bzw. generieren.
 
J

Julia Schulz

Gast
So die meißten Roten Balken sind verschwunden allerdings kommt in der der Klasse BenutzerDaoDumm... in der Methode


Code:
 public Benutzer saveBenutzer(Benutzer benutzer) throws DaoException
   {
      assert benutzer != null : "Benutzer darf nicht null sein!";
      Benutzer result = benutzer;
      // Ein neuer Benutzer (noch keine Id), dann neuanlegen, sonst aktualisieren
   [b]   if(benutzer.getNr() == null)[/b]
      {
         addBenutzer(benutzer);
      }
      else
      {
         result = readBenutzer(benutzer.getNr());
         result.setPseudonym(benutzer.getPseudonym());
         result.setPasswort(benutzer.getPasswort());
      }
      return result;
   }



Fehleranzeige in Eclipse

This operator == undefined for the arguement type (s) int null
 
G

Guest

Gast
Julia Schulz hat gesagt.:
So die meißten Roten Balken sind verschwunden allerdings kommt in der der Klasse BenutzerDaoDumm... in der Methode


Code:
 public Benutzer saveBenutzer(Benutzer benutzer) throws DaoException
   {
      assert benutzer != null : "Benutzer darf nicht null sein!";
      Benutzer result = benutzer;
      // Ein neuer Benutzer (noch keine Id), dann neuanlegen, sonst aktualisieren
[b]   [b]   if(benutzer.getNr() == null)[/b][/b]
      {
         addBenutzer(benutzer);
      }
      else
      {
         result = readBenutzer(benutzer.getNr());
         result.setPseudonym(benutzer.getPseudonym());
         result.setPasswort(benutzer.getPasswort());
      }
      return result;
   }



Fehleranzeige in Eclipse

This operator == undefined for the arguement type (s) int null
 
G

Guest

Gast
Hast du in der Klasse Benutzer die Getter und Setter ergänzt?
Code:
public class Benutzer 
{ 
   private Integer nr; 
   private String pseudonym; 
   private String passwort; 

   public Benutzer() 
   { 
   } 

   public Integer getNr()
   {
      return nr;
   }

   public void setNr(Integer nr)
   {
      this.nr = nr;
   }

   // usw. mit Gettern und Settern für Pseudonym und Passwort ergänzen 
}

Gruß,
semi ohne Keks im Browser :wink:
 
J

Julia Schulz

Gast
Hi ja hab ich gemacht moment ich poste mal meine Klasse:Trotzdem der obige Fehler.

Code:
public class Benutzer {

		private Integer nr;
	   private String pseudonym;
	   private String passwort;

	   public Benutzer()
	   {
	   }


	   public void setNr(int nr)
	    {
	        this.nr = nr;
	    }
	    public void setPseudonym(String pseudonym)
	    {
	        this.passwort =pseudonym ;
	    }
	    public void setPasswort(String passwort)
	    {
	        this.passwort = passwort;
	    }
	    //Lesende Operationen
	    public int getNr()
	    {
	        return nr;
	    }
	    public String getPseudonym()
	    {
	        return pseudonym;
	    }
	    public String getPasswort()
	    {
	        return passwort;
	    }
	    //Komplexe Operation

	    }
 
M

maki

Gast
Code:
      private Integer nr; 
...
      public void setNr(int nr)
       {
           this.nr = nr;
       }
...
public int getNr()
       {
           return nr;
       }
Wie kommst du auf int? Solltest doch Integer schreiben... Autoboxing ist zwar "nice to have", löst aber nicht alle Probleme.

Dickes Lob an semi! :toll:
 

semi

Top Contributor
Yepp, das ist es. :toll:
Du kannst dir die Getter und Setter in Eclipse generieren lassen, dann passiert sowas nicht.

Alt->Shift->s, r, dann im Dialogfenster Alt-a und OK. Das gute an Eclipse ist, das das Ding
komplett mit der Tastatur bedienbar ist. Man kann die Maus bei eBay verkaufen und trotzdem
weiter arbeiten. In jedem Fall ist man mit der Tastatur schneller als bei dem Herumgeklicke. ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
L Zugriff auf lokal gespeicherte mySQL Datenbank Datenbankprogrammierung 3
L MySQL App/Java Zugriff auf Mysql-DB funktioniert nicht Datenbankprogrammierung 1
W MySQL -Server Einstellung -- Zugriff übers lokale Netzwerk Datenbankprogrammierung 1
A MySQL-Zugriff auf Raspberry Pi Datenbankprogrammierung 2
E Zugriff auf MySQL-Datenbank Datenbankprogrammierung 4
J Zugriff auf MySQL-Datenbank Datenbankprogrammierung 5
A Zugriff auf Remote MySQL-DB mit JAR-File Datenbankprogrammierung 7
M mySQL zugriff funktionert nach ca4 stündiger laufzeit nicht Datenbankprogrammierung 6
D Kann nicht auf MySQL Datenbank Zugriff Datenbankprogrammierung 9
R Zugriff auf MySQL-Datenbank im Internet Datenbankprogrammierung 13
L Zugriff von Applet auf mysql-DB Datenbankprogrammierung 2
D Mysql zugriff aus java nicht moeglich Datenbankprogrammierung 2
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
P MySQL Connection Global Datenbankprogrammierung 13
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
Z MySQL Shopsystem mit mysql und Java Datenbankprogrammierung 8
S [MySQL] Topliste Datenbankprogrammierung 2
H Datenbank-Anbindung Java/MySQL Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben