2016-06-06 11 views
1

Ich habe nach Fällen unter ähnlichen Bedingungen gesucht, aber kann nicht so etwas wie mein Problem finden.Insert Anweisung in Azure SQL Tabelle ist nicht möglich wegen NullException

würde Ich mag ein einfaches Einfügen in meinen Tisch-Sitze hinzufügen

package com.mergim; 

    //Use the JDBC driver 
    import java.sql.*; 
    import java.util.ArrayList; 
    import com.microsoft.sqlserver.jdbc.*; 

public class SQLTest { 

public static void main(String[] args) throws SQLException { 
    Connection(); 
} 
public static void Connection() throws SQLException{ 
    String connectionString = 
      "jdbc:sqlserver://eebproject.database.windows.net:1433;"+"ssl=require;" 
      + "database=MYDATABASE;" 
      + "user=MYNAME;" 
      + "password=MYPASSWORD;" 
      + "encrypt=true;" 
      + "trustServerCertificate=false;" 
      +"hostNameInCertificate=northeurope1a.control.database.windows.net;" 
      + "loginTimeout=30;"; 

    // Declare the JDBC objects. 
    Connection connection = null; 

    try { 
     connection = DriverManager.getConnection(connectionString); 
     System.out.println("Database connected."); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 


    String sql = "INSERT INTO Seats (seat_used) VALUES ('"+true+"')"; 
    PreparedStatement stmt = connection.prepareStatement(sql); 
    stmt.execute(); 

    // SELECT ALL ENTRIES 
    Statement stmt1 = connection.createStatement(); 
    String sql1 = "SELECT seat_id, seat_used FROM Seats"; 
    ResultSet rs = stmt1.executeQuery(sql1); 

    while(rs.next()){ 
     System.out.print("ID: " + rs.getInt(1)); 
     System.out.print(" --> Status: " + rs.getBoolean(1)); 
     System.out.println(); 
     }  
    rs.close(); 
    System.out.println("Finished SelectAll-Statement."); 
} 
} 

Es auf localhost funktioniert, aber ich habe es auf azur einzusetzen. Ich starte diese Klasse über RESTAPI und erhalte den folgenden Fehlercode. Ich kann nicht verstehen, warum der Code auf localhost funktioniert, aber nicht in azurblau.

<b>message</b> 
     <u></u> 
    </p> 
    <p> 
     <b>description</b> 
     <u>The server encountered an internal error that prevented it from fulfilling this request.</u> 
    </p> 
    <p> 
     <b>exception</b> 
    </p> 
    <pre>java.lang.NullPointerException 
com.mergim.SQLTest.Connection(SQLTest.java:37) 
com.mergim.Sitzplatzstatus.post(Sitzplatzstatus.java:49) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:497) 
com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) 
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) 
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) 
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558) 
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Warum der folgende Code ist null?

 String sql = "INSERT INTO Seats (seat_used) VALUES ('"+true+"')"; 
    PreparedStatement stmt = connection.prepareStatement(sql); 
    stmt.execute(); 
+0

Wenn Sie keine Verbindung mit 'connection = DriverManager.getConnection (Connection) erhalten;' Sie die gewünschte NPE erhalten, wenn eine Anweisung vorzubereiten versucht –

+0

Sie erhalten „Datenbank verbunden ist.“ auf Ihrer Ausgabe vor der Ausnahme? –

+0

Danke für Ihre Hilfe. Ich denke, du hast recht mit der ersten Annahme. Ich denke, meine Verbindung ist null, aber ich kann nicht verstehen warum? Es funktioniert auf localhost, aber nicht auf meiner azure cloud/azure webapp? Ich änderte den Connectionstring zu \t \t String Connection = "jdbc: sqlserver: // localhost; integratedSecurity = true"; Aber es funktioniert nicht. – Mergim

Antwort

0

ich den Fehler behoben und der Grund dafür war ein fehlender Pfad zum JDBC-Treiber. Der fehlende Pfad zum JDBC-Treiber hatte eine Wirkung auf

connection = DriverManager.getConnection(connectionString); 

Mit dem richtigen Pfad oberhalb der Code jetzt arbeitet. Vielen Dank für Ihre Hilfe.

0

versuchen n Code ersetzen ...

while(rs.next()){ 
     System.out.print("ID: " + rs.getInt(0)); 
     System.out.print(" --> Status: " + rs.getBoolean(1)); 
     System.out.println(); 
     } 
+0

Zuerst würde Ich mag Ihnen für Ihre schnelle Antwort danken. Der folgende Code // SELECT alle Einträge haben keine Auswirkungen auf den Nullpointer-Ausnahme, die ich nicht verstehen kann. Ich habe diesen Teil nur zum Testen gebaut. Trotzdem danke für deine Antwort. – Mergim