# Datenbankverbindung mit JSP herstellen



## McStarProjekt (25. Jun 2016)

Hallo zusammen,

ich versuche mich gerade an einem Versuch eine Datenbankverbindung herzustellen.
Die Idee ist die Datenbank für ein kleines Forum zu verwenden.

Ich versuche die Datenbankverbindung in der index.jsp Datei herzustellen.
Ich habe einige Tutorials dazu gelesen, aber der Zugriff will bei mir einfach nicht funktionieren.

Wenn ich die index.jsp starte, erhalte ich nur die Tabelle aber kein Daten aus der Datenbank.

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

Mein Versuch:

```
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

<html>
    <%@page import="com.sun.xml.rpc.processor.modeler.j2ee.xml.string"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@ page import="java.util.*" %>
    <%@ page import="javax.sql.*;" %>
    <!DOCTYPE html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Forum</title>
    </head>
      
<body>

<%-- Datenbanktreiber laden --%>

<private String driver="org.apache.derby.jdbc.ClientDriver";></private>
<Class.forName(driver).newInstance();>
                         
<%-- Connection-Objekt erzeugen --%>

<private Connection connect = null;></private>

<private String dbName ="C:/netbeans/.netbeans-derby/forum";></private>
<private String connectionURL="jdbc:derby://localhost:1527/" + dbName + ";create=true";></private>

<connect=DriverManager.getConnection(connectionURL);>
  

<PreparedStatement statement = connect .
    .prepareStatement("Select * from forum");>
<Resultset rs = statement.execute Query();>

<h1> Kleines Forum </h1>

<table border="1" width="100%">
<tr>
   <th>Titel des Beitrags</th>
   <th>geschrieben von</th>
   <th>geschrieben am</th>
</tr>

<while(rs.next()){
String Titel = rs.getString("titel");
System.out.println(titel);
}>


<tr>
   <td><String Titel = rs.getString("Titel")></td>
</tr>

</table>

</body>
</html>
```

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

Was stimmt hier nicht, weshalb ich kein Ausgabe bekomme?


Danke für eure Hilfe.

Gruß


----------



## Thallius (25. Jun 2016)

Wo kommen die Daten und die Datenbank denn her?


----------



## McStarProjekt (25. Jun 2016)

Hallo,

also die Datenbank liegt bei mir local.
Und in der Datenbank ist eine Tabelle aus dem die Daten gelesen werden soll.

Unter dem Pfad C:/netbeans/.netbeans-derby/forum liegt die Datenbank:

Daher habe ich:
<private String dbName ="C:/netbeans/.netbeans-derby/forum";></private> 
<private String connectionURL="jdbc:derby://localhost:1527/" + dbName + ";create=true";></private>


----------



## Thallius (25. Jun 2016)

und wie kommen jetzt die Daten in diese Datenbank?


----------



## McStarProjekt (25. Jun 2016)

Hallo,

die Daten habe ich bereits in die Datenbank geschrieben.
Also die Datenbank ist nicht leer.


----------



## Thallius (25. Jun 2016)

und wozu dann das create = true?


----------



## McStarProjekt (25. Jun 2016)

Da die Datenbank schon existiert braucht man das wohl nicht.
Aber auch ohne create = true , keine Ausgabe der Daten.


----------



## Thallius (25. Jun 2016)

Tja, dann würde ich mal anfangen zu debuggen. Was steht denn in connect ? Normalerweise solltest du auch eine Meldung bekommen, dass Du SQLException abfangen sollst. Machst du das?


----------



## tommysenf (25. Jun 2016)

Scriptlets bindet man doch folgendermaßen in eine JSP ein

<%
 String[] valueArray = {"This", "is", "a", "rather", "dull", "example"};
 int i;
 for (i = 0; i < valueArray.length; i++) {
%>

So wie du es gemacht hast sollte dein Code einfach nur als fehlerhaftes html interpretiert werden und daher erzeugt er auch keine Ausgabe.


----------



## McStarProjekt (26. Jun 2016)

Hallo,

danke für die Antworten.

Ich habe nochmal etwas versucht, aber leider immer noch keine Ausgabe.


```
<%@page import="java.sql.PreparedStatement"%>
    <%@page import="java.sql.Connection"%>
    <%@page import="java.sql.DriverManager"%>
    <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
    <%@page import="com.sun.xml.rpc.processor.modeler.j2ee.xml.string"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@page import="java.util.*"%>
    <%@page import="javax.sql.*;"%>

<html>
    <head>
      
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Forum</title>
    </head>
      
<body>
    <table border="1">
  

  
<%-- Datenbanktreiber laden --%>
<%
String driver="org.apache.derby.jdbc.ClientDriver";
Class.forName(driver).newInstance();
          
java.sql.Connection connect = null;
String dbName = "C:/Users/admin/.netbeans-derby/forum";
String connectionURL="jdbc:derby://localhost:1527/" + dbName + ";create=true";

connect = DriverManager.getConnection(connectionURL);

java.sql.PreparedStatement pst; 
java.sql.Statement statement;
java.sql.ResultSet rs;

pst = null;
statement = null;
rs = null;

String sql = "SELECT titel from forum";

statement = connect.createStatement();
rs = statement.executeQuery(sql);

%>

<h1> Kleines Forum </h1>


<tr>
   <th>Titel des Beitrags</th>
   <th>geschrieben von</th>
   <th>geschrieben am</th>
</tr>

<%
while(rs.next()){
String Titel = rs.getString("titel");
System.out.println(Titel);
}

%>

<tr>
   <td><%-- String Titel = rs.getString("Titel"); --%></td>
   <td><%-- System.out.println("titel"); --%></td>
</tr>

</table>

</body>
</html>
```


----------



## McStarProjekt (26. Jun 2016)

Hallo,

ich glaube ich hab die Ausgabe hinbekommen.


----------



## tommysenf (26. Jun 2016)

McStarProjekt hat gesagt.:


> <td><%-- String Titel = rs.getString("Titel"); --%></td>
> <td><%-- System.out.println("titel"); --%></td>



Hier hast du den Code auch auskommentiert.
In der JSP gibst du code mit out.println("Titel") aus und nicht mit SystemOut aus.


----------



## McStarProjekt (26. Jun 2016)

Als nächstes habe ich mir gedacht,

das Wenn man auf den Titel des Beitrags klickt die ID des Beitrags in der Datenbank per Parameter an eine andere JSP Datei zum lesen übergeben werden soll:

Bin ich hier auf dem richten Weg ?:

in der index.jsp:

<td><a href ="beitrag-lesen.jsp?value=<%= rs.getInt("id")%>"><%= rs.getString("titel") %></a> </td>

in der beitrag-lesen.jsp
habe ich zum Test ob der Parameter übergeben wird diesen nur mal ausgeben wollen mit:

<tr>
        <td><%= request.getParameter("id") %></td>
        </tr>

hier wird null ausgegeben.

Das heißt wohl entweder funktioniert die Übergabe nicht so wie ich das denke oder die übernahme nicht ?

Danke.


----------



## McStarProjekt (27. Jun 2016)

Hallo zusammen,

ich bin schon etwas weiter gekommen:

Mein Problem ist nun:

Ich habe eine Form erstellt und die Form übergibt die Parameter zu beitrag-speichern.jsp , das funktioniert soweit auch.
Nur wie schreibe ich die Daten in die Datenbank ?
Ich erhalte immer einen Fehler und ich kann z.B. auch nicht Vorname Nachname mit Leerzeichen übernehmen.

Der Code:

beitrag-erstellen.jsp mit der Form:


```
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Beitrag erstellen</title>
    </head>
    <body>
      
        <h1> Beitrag erstellen </h1>
      
<form action="beitrag-speichern.jsp" method="POST">
<table>
    <tr>
        <td> <label for="pname">Name</label> </td>
        <td> <input type="text" id="name" name="pname" /> </td>
    </tr> 
  
   <tr>
       <td> <label for="pemail">Email</label> </td>
       <td> <input type="text" id="email" name="pemail" /> </td>
   </tr>
  
   <tr>
       <td> <label for="ptitel">Titel des Beitrags</label> </td>
       <td> <input type="text" id="titel" name="ptitel" /> </td>
   </tr>
      
   <tr>
       <td> <label for="pbeitrag">Beitrag</label> </td>
       <td> <textarea name="pbeitrag" id="beitrag" class="sendForm">
       </textarea> </td>
   </tr>
  

  
   <td> <input type="submit" value="speichern" /> </a>
   </td>

</table>

</form>
      
      
        <hr>
      
        <a href ="index.jsp">Übersicht</a>
    </body>
</html>
```
--------------------------------------------------
Beitrag-speichern.jsp

```
<%@page import="java.sql.DriverManager"%>
<%@page import="java.lang.String"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Beitrag speichern</title>
    </head>
    <body>
      
        <h1>Ihr Beitrag wurde gespeichert:</h1>
        <table>     
        <tr>
            <td> Ihr Beitrag: </td>
        </tr>
        <tr>
            <td>Name:    <%= request.getParameter("pname") %></td>
        </tr>
        <tr>
            <td>Email:   <%= request.getParameter("pemail") %></td>
        </tr>
        <tr>
            <td>Titel:   <%= request.getParameter("ptitel") %></td>
        </tr>
        <tr>
            <td>Beitrag: <%= request.getParameter("pbeitrag") %></td>
        </tr>
     </table> 
      
        <%
            java.sql.PreparedStatement pst; 
            java.sql.Statement statement;
            java.sql.ResultSet rs;

            pst = null;
            statement = null;
            rs = null;
          
            String pname=request.getParameter("pname");
            String pemail=request.getParameter("pemail");
            String ptitel=request.getParameter("ptitel");
            String pinhalt=request.getParameter("pbeitrag");
              
          
            String driver="org.apache.derby.jdbc.ClientDriver";
            Class.forName(driver).newInstance();
          
            java.sql.Connection connect = null;
            String dbName = "C:/Users/name/.netbeans-derby/forum";
            String connectionURL="jdbc:derby://localhost:1527/" + dbName + ";create=true";

            connect = DriverManager.getConnection(connectionURL);


            statement = connect.createStatement();
            String sql = "INSERT INTO forum (name) VALUES (" + pname + ")";
            statement.executeUpdate(sql);
          
          
            %>
```
 

-----

Danke.


----------



## tommysenf (28. Jun 2016)

McStarProjekt hat gesagt.:


> Ich erhalte immer einen Fehler und ich kann z.B. auch nicht Vorname Nachname mit Leerzeichen übernehmen.


Es wäre sehr hilfreich wenn du und den Fehler auch mitteilen würdest.




McStarProjekt hat gesagt.:


> "INSERT INTO forum (name) VALUES (" + pname + ")";


Bei SQL sind Zeichenketten in Hochkommata zu setzen.


----------



## Saheeda (28. Jun 2016)

Wenn ich dir noch einen Tipp geben darf:
Schau dir mal das MVC-Pattern an. Du mischst Dinge, die einfach nicht zusammengehören und für eine saubere Struktur unbedingt getrennt werden sollten.
Der Verbindungsaufbau mit der Datenbank hat nichts mit der Darstellung des Formulars zu tun.

Im einfachsten Fall hättest du eine Klasse, die sich _nur_ um die Datenbankzugriffe kümmert, (Model) eine .jsp-Datei (View) und eine Klasse, welche zwischen den beiden vermittelt (Controller).


----------



## Joose (28. Jun 2016)

@McStarProjekt bitte den HTML-Code in Code-Tags packen, danke! (Dadurch bleiben die Beiträge übersichtlicher und Code wird hervorgehoben)
[code] ... dein html ... [/code]


----------



## McStarProjekt (28. Jun 2016)

Hallo,

wenn ich 
	
	
	
	





```
String sql = "INSERT INTO forum (name) VALUES ('" + pname + "' )";
```
eingebe erhalte ich:

javax.servlet.ServletException: java.sql.SQLIntegrityConstraintViolationException: Die Spalte 'ID' akzeptiert keinen Nullwert.

Was aber wohl klar ist da ich keine Wert mit angegeben habe, dann muss ich jetzt noch raus finden wie ich den Wert um eins erhöhe im SQL.

Das MVC muss ich mir mal anschauen was das ist.


----------



## Bitfehler (28. Jun 2016)

Indem du für ID auto_increment verwendest?

Das wäre eine Möglichkeit.


----------



## McStarProjekt (28. Jun 2016)

Hallo,

ja danke das hat funktioniert mit auto_increment.


----------

