CommunicationLinkError - NullPointer Exception

MurderItachi

Mitglied
Hey Leute, bin gerade dabei ein SQl Insert Statement zu machen, doch Irgendwas ach ich falsch. Muss ich die Serveradresse umformulieren?

Java:
package test;

import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import com.mysql.jdbc.PreparedStatement;

public class test1 {
    public String scan_result= "haus";
    public String price="maus";
       public static String url= "jdbc:mysql://sql4.freesqldatabase.com:3306";
        public static String user= "******";
        public static String pw="******";

        public static String scan_rs;
        public static String price_rs;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Connection con = null;     
         try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                // Bl�d: Treiber konnte nicht geladen werden.
                e.printStackTrace();
            }
            try {
                con = DriverManager.getConnection(url, user, pw);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                // create a Statement from the connection
            //    Statement statement = con.createStatement();

                // insert the data
                //statement.executeUpdate("INSERT INTO barcode VALUES (13846, 12,23)");
         
               //("INSERT INTO barcode VALUES (" +"'"+ scan_rs + "'" + ", " + "'" + price_rs + "'" + ")");
           
                PreparedStatement stmt = (PreparedStatement) con.prepareStatement("INSERT INTO table_name(email, pass) VALUES (?, ?)");
                stmt.setString(1, scan_rs);
                stmt.setString(2, price_rs);
                stmt.executeUpdate();
            } catch (SQLException e) { System.out.println("fehler2");}

            try
            {
                con.close();
            }
            catch(SQLException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }
}
 

Anhänge

Zuletzt bearbeitet von einem Moderator:
Die Punkte, die ich sehe:
a) Wie schon gesagt sollte man User / Passwort nicht mit posten
b) Wieso man Text als Bild (in diesem Fall den Fehler) hochlädt und dabei dann wichtige Dinge abschneidet kann ich nicht verstehen. Da sieht man eine Fehlerbeschreibung und schneidet die ab ... "Can't get" was? Da steht ja, was er nicht hat und was ihm fehlt.
c) Was mir im Code aufgefallen ist: Du gibst keinerlei Datenbank an. Das würde ich normalerweise erwarten. Also noch ein /Datenbankname an die URL ran. (Ist nicht zwingend erforderlich, aber evtl. ist dies ja schon die Lösung.

Konrad
 
Also das verbinduungsproblem lag an dem Fehlenden Datenbanknamen.Den hab ich jetzt Ergänzt. Jetzt spuckt er mir in der Konsole fehler2 aus, was bedeutet, dass im Statement etwas falsch sein muss. Sieht da jemand was?
 
Wenn Du uns noch die Fehler wissen lassen würdest. Das würde uns das Leben sehr erleichtern und wir müssten nicht unsere Glaskugeln bemühen.

Konrad
 
Ach ja - scan_rs und price_rs werden von Dir nicht gesetzt und sind daher null! Das könnte ein Problem sein je nachdem, wie die Tabelle aufgebaut wurde.

Konrad
 
Super, dass es jetzt funktioniert.

Aber ein paar Punkte möchte ich noch erwähnen:
Das Passwort von Deinem User hast Du hoffentlich bereits geändert? Zumindest den Code scheinst Du noch nicht geändert zu haben!

Und da ich es in Deinen Kommentaren gesehen habe: NIEMALS baut man ein SQL Befehl über das Zusammenfügen von Strings auf. Das ist ein absolutes NO GO.
- Wenn der User Einfluss auf den Inhalt der Variablen hat, sind ggf. SQL Injection Angriffe möglich.
- Es kann zu Problemen bei der Übertragung der Daten geben. So ist z.B. nicht eindeutig, was für ein Wert die folgende Zeichenkette hat: 1,234. (Je nach Einstellung der Datenbank könnte die Datenbank in dem , entweder den Trenner für die Nachkommastellen sehen oder eben ein Tausender-Trennzeichen.) Bei der Übermittlung von anderen Datentypen ist es noch viel kritischer wie z.B. von einem Datum.
==> Also immer so wie Du es gemacht hast mit dem PreparedStatement!
- Und bei catch: Nimm da immer etwas sinnvolles rein. Leere Catch Blöcke oder ein "println("Fehler2")" sind nichts sinnvolles. Also wenigstens ein e.printStackTrace(); sollte doch immer drin sein. Von dieser Regel mag es auch durchaus Ausnahmen geben, aber diese sind wirklich sehr selten. In diesem Fall hat es wohl dafür gesorgt, dass Du keine aussagekräftige Fehlermeldung hattest.

Konrad
 

Neue Themen


Zurück
Oben