S
Sebastian Berger
Hi,
ich schreibe derzeit ein kleines Servlet, das mittles OJDBC auf eine
Oracle-Datenbank zugreifen will.
Zuerst habe ich den Code als simpele Java-Application geschrieben, und
dort funktioniert alles ganz wundervoll. Nun, seitdem ich versuche, das
ganze in ein Servlet zu integrieren, erhalte ich ständig
NullPointerExceptions. Hier ist mein Code:
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class OJDBCServlet extends HttpServlet
{
public Connection conn;
public Statement stmt;
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws IOException, ServletException
{
initDB(response);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("<h1>"+(time2-time1)+"</h1>");
out.println("</body>");
out.println("</html>");
}
private void initDB(HttpServletResponse response) throws
ServletException
{
PrintWriter out = null;
// prepare ojdbc
try
{
out = response.getWriter();
DriverManager.registerDriver((Driver)(Class.forName("oracle.jdbc.driver.OracleDriver").newInstance()));
conn = DriverManager.getConnection
("jdbcracle:thin129.178.12.240:1521:test",
"test_user", "passw");
if(conn == null)
out.println("error02");
// context to call sql-statements (reusable)
stmt = conn.createStatement();
if(stmt == null)
out.println("error03");
}
catch (SQLException e)
{
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(conn == null)
out.println("error04");
if(stmt == null)
out.println("error05");
// Hier tritt die exception auf
try
{
ResultSet rset = stmt.executeQuery(sqlStatement);
}
catch (SQLException e)
{
System.out.println("Error in SQL-Statement: ");
System.out.println(sqlStatement);
e.printStackTrace();
}
}
}
Nachdem in initDB der try-Bereich verlassen wurde, erhalte ich
Ausgaben: error04 und error05; im try-Block sind die Variablen conn und
stmt noch "korrekt" initialisiert, nur scheinbar verlieren sie ihre
Gültigkeit, sobald der try-Block verlassen wird.
Hat irgendjemand eine Idee??
Vielen, tausend Dank für eure Hilfen,
Sebastian
ich schreibe derzeit ein kleines Servlet, das mittles OJDBC auf eine
Oracle-Datenbank zugreifen will.
Zuerst habe ich den Code als simpele Java-Application geschrieben, und
dort funktioniert alles ganz wundervoll. Nun, seitdem ich versuche, das
ganze in ein Servlet zu integrieren, erhalte ich ständig
NullPointerExceptions. Hier ist mein Code:
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class OJDBCServlet extends HttpServlet
{
public Connection conn;
public Statement stmt;
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws IOException, ServletException
{
initDB(response);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("<h1>"+(time2-time1)+"</h1>");
out.println("</body>");
out.println("</html>");
}
private void initDB(HttpServletResponse response) throws
ServletException
{
PrintWriter out = null;
// prepare ojdbc
try
{
out = response.getWriter();
DriverManager.registerDriver((Driver)(Class.forName("oracle.jdbc.driver.OracleDriver").newInstance()));
conn = DriverManager.getConnection
("jdbcracle:thin129.178.12.240:1521:test",
"test_user", "passw");
if(conn == null)
out.println("error02");
// context to call sql-statements (reusable)
stmt = conn.createStatement();
if(stmt == null)
out.println("error03");
}
catch (SQLException e)
{
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(conn == null)
out.println("error04");
if(stmt == null)
out.println("error05");
// Hier tritt die exception auf
try
{
ResultSet rset = stmt.executeQuery(sqlStatement);
}
catch (SQLException e)
{
System.out.println("Error in SQL-Statement: ");
System.out.println(sqlStatement);
e.printStackTrace();
}
}
}
Nachdem in initDB der try-Bereich verlassen wurde, erhalte ich
Ausgaben: error04 und error05; im try-Block sind die Variablen conn und
stmt noch "korrekt" initialisiert, nur scheinbar verlieren sie ihre
Gültigkeit, sobald der try-Block verlassen wird.
Hat irgendjemand eine Idee??
Vielen, tausend Dank für eure Hilfen,
Sebastian