2017-04-15 19 views
2

ここでは1つの列の平均を計算しています avgが0.0になる場合は、文字列変数をNULLとしたい平均価値そのもの。文字列にNULL値を代入してからmysqlデータベースに挿入する方法

これらの値は、mysql dbに保存されています。私の問題は、avgが0.0になったときに文字列NULLが格納されますが、デフォルトのNULL値を格納します。

変数ansにNULLを割り当てできますか?

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

    } 

答えて

0

あなたはNULLケースを処理するための引用符の間にansを囲んでいません。
そうでない場合は、確かにあなたは"NULL"Stringを挿入します。

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

あなたが試すことができます。

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

ありがとう!! !!それは働いた:) –

+0

あなたは歓迎です:) – davidxxx

0

あなたもPreparedStatementを使用していないので、あなたのコードは、かなり最適ではありません。クエリには''のマーカーが含まれているため、常にデータベースに文字列が挿入されます。 nullの場合は、'null'を挿入するだけです。これはあなたが望むものではありません。

これは良い解決策ではありませんが、あなたにとって最も速いです。 "INSERT INTO chk(id) VALUES ("+ans+")"にクエリを変更し、クエリを実行する前に次の行を追加します。

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

が、これは不正なコードであることを覚えておいてください。これは標準的な方法ではありません。セキュリティ上の問題があります。 PreparedStatementの使用方法を学びます。

あなたが setNull()を使用することができますし、代わりにPreparedStatementを使用する必要が任意の構文エラーまたはSQLインジェクションを防ぐために
0

:あなたはrs4.next();何を使っている理由は、あなたのプログラムに配線

何かを、

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

注意あなたの結果が空の場合は、代わりに次のようなものが必要だと思います。

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

私は同意するが、ここで私は文字列変数の最初のすべての値が必要です。私は準備されたステートメントを後で使用します。 –

+0

可変文字列ansにNULLを割り当てる方法はありませんか? –

+0

@SnehaPあなたのIDでnullを使用する目的は何ですか? –

関連する問題