2017-04-15 1 views
2

Ici, je calcule la moyenne d'une colonne Si la moyenne est 0.0, alors je voudrais attribuer la variable de chaîne comme NULL sinon le valeur moyenne elle-même.Comment affecter une valeur NULL à une chaîne, puis l'insérer dans la base de données mysql

Ces valeurs sont stockées dans mysql db Maintenant mon problème est que quand l'avg arrive à 0.0, la chaîne NULL est stockée mais je veux que la valeur NULL par défaut y soit stockée.

Comment puis-je attribuer la valeur NULL (et non la valeur NULL) à la variable ans ??

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"); 

    } 

Répondre

0

Vous n'avez pas entre guillemets joindre ans pour traiter le cas NULL.
Sinon, en effet vous insérez "NULL"String:

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

Vous pouvez essayer:

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

Merci! !! Cela a fonctionné :) –

+0

Vous êtes les bienvenus:) – davidxxx

0

Votre code est assez suboptimale, puisque vous n'êtes pas même en utilisant un PreparedStatement. Comme votre requête contient les marqueurs '', elle insère toujours une chaîne dans la base de données. Dans le cas de null, vous insérerez simplement 'null', ce qui n'est pas ce que vous voulez. Maintenant, ce n'est pas une bonne solution, mais c'est la solution la plus rapide pour vous. Modifier la requête à "INSERT INTO chk(id) VALUES ("+ans+")", et ajoutez la ligne suivante avant d'exécuter la requête:

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

Rappelez-vous, cela est mauvais code. Ce n'est pas la manière standard. Il a des problèmes de sécurité. Apprenez à utiliser un PreparedStatement.

0

Vous pouvez utiliser setNull() et pour éviter toute erreur de syntaxe ou injection SQL, vous devez utiliser PreparedStatement à la place:

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

Remarque

Quelque chose filaire dans votre programme, pourquoi vous utilisez rs4.next(); ce que Si votre résultat est vide, je pense que vous avez besoin de quelque chose comme ceci:

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

Je suis d'accord, mais ici j'ai besoin de toutes les valeurs dans la variable de chaîne d'abord. Je voudrais utiliser l'instruction préparée plus tard. –

+0

alors est-il impossible d'attribuer NULL à la variable string ans? –

+0

@SnehaP dans quel but utiliser null dans votre identifiant? –