2017-04-15 6 views
2

Hier bin ich den Durchschnitt einer Spalte berechnen Wenn das avg zu 0.0 kommt, dann würde ich die String-Variable als NULL sonst zuweisen möchten Durchschnittswert selbstWie NULL-Wert zu einer Zeichenfolge zuweisen und dann in MySQL-Datenbank einfügen

Diese Werte werden immer in MySQL-Datenbank gespeichert Nun mein Problem, dass, wenn die avg 0.0 kommen wird, wird Zeichenfolge NULL gespeichert, aber ich mag der Standard-NULL-Wert darin gespeichert werden.

Wie kann ich NULL (und nicht String NULL) zu Variable Ans zuweisen?

private void btnAdd1ActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
    Connection conn = null; 
      Statement st = null;   
      ResultSet rs = null; 

     try{ 

    conn = DriverManager.getConnection("jdbc:mysql://localhost/check","root",""); 
    st = conn.createStatement(); 

    String sql4 =("SELECT AVG(unit4) as num FROM lo where unit4 IS NOT NULL"); 
     PreparedStatement pstmt3 = conn.prepareStatement(sql4); 
     ResultSet rs4 = pstmt3.executeQuery(); 
    rs4.next(); 
    double a3 = rs4.getDouble("num"); 
    double b3 = Math.round(a3*10); 
    double res5 = b3/10; 
    rs4.next(); 
    avg1.setText(String.valueOf(res5)); 
    String a1 =avg1.getText(); 
    String ans ; 

    if(a1.equals("0.0")){ 
     ans = null; 
    }else{ 
     ans = a1; 
    } 

    String query = "INSERT INTO chk(id) VALUES ('"+ans+"')"; 
    executeSQlQuery(query, "Inserted"); 

    } 

Antwort

0

Sie haben umschließen nicht ans zwischen Anführungszeichen den NULL Fall zu behandeln.
Andernfalls tatsächlich fügen Sie "NULL"String:

String query = "INSERT INTO chk(id) VALUES ('"+ans+"')"; 

Sie können versuchen:

String query = "INSERT INTO chk(id) VALUES ("+ ans +")"; 
+0

Danke !! !! Das hat funktioniert :) –

+0

Sie sind willkommen:) – davidxxx

0

Ihr Code ziemlich suboptimal ist, da Sie nicht einmal einen PreparedStatement verwenden. Da Ihre Abfrage die '' Markierungen enthält, wird immer eine Zeichenfolge in die Datenbank eingefügt. Im Fall von null werden Sie nur 'null' einfügen, was nicht das ist, was Sie wollen.

Nun, dies ist keine gute Lösung, aber es ist die schnellste für Sie. Ändern Sie die Abfrage zu "INSERT INTO chk(id) VALUES ("+ans+")", und fügen Sie die folgende vor dem Ausführen der Abfrage:

if(ans != null) 
    ans = "'" + ans + "'"; 

Denken Sie daran, das ist schlechter Code. Es ist nicht der Standardweg. Es hat Sicherheitsprobleme. Lernen Sie, eine PreparedStatement zu verwenden.

0

können Sie setNull() verwenden und jede Syntaxfehler oder SQL Injection Sie PreparedStatement müssen vermeiden, anstatt verwenden:

PreparedStatement ps = connection.prepareStatement("INSERT INTO chk(id) VALUES (?)"); 
ps.setNull(1, java.sql.Types.VARCHAR); 
ps.executeUpdate(); 

Hinweis

Etwas in Ihrem Programm verdrahtet, warum Sie rs4.next(); verwenden welche wenn dein ergebnis leer ist, denke ich, dass du stattdessen so etwas brauchst:

if (rs4.next()) {//<<<-------------------- 
    double a3 = rs4.getDouble("num"); 
    //-----------^^----------------- 
} 
+0

Ich stimme zu, aber hier brauche ich alle Werte in String Variable zuerst. Ich würde wir mit vorbereiteten Anweisung später verwenden. –

+0

Also gibt es keine Möglichkeit, NULL der Variablen string ans zuzuordnen? –

+0

@SnehaP welchen Zweck zu verwenden Null in Ihrer ID? –

Verwandte Themen