2013-04-13 54 views
4

其實我的整個問題都在標題中。我有一個類管理我的發票對象插入和刪除我的Sqlite數據庫。java PreparedStatement.setFloat拋出NullpointerException,允許Pstmt.setString?

public class Invoice { 
    private String str1; 
    private Float flt1; 
    private String str2Null; 
    private Float flt2Null; 

    public Invoice(String str1, Float flt1){ 
     this.str1 = str1; 
     this.flt1 = flt1; 
    } 

    getters & setters... 
} 


public class InvoiceManager{ 
    ...Konstruktor... 

    public int insertInvoice(Invoice invoice) throws Exception{ 
     try { 
      PreparedStatement stmt = databaseConnection.prepareStatement(
      "INSERT INTO invoice (str1, flt1, str2Null, flt2Null) VALUES (?,?,?,?)"); 
      stmt.setString(1, invoice.getStr1()); 
      stmt.setFloat(2, invoice.getFlt1()); 
      stmt.setString(3, invoice.getStr2Null()); 
      stmt.setFloat(4, invoice.getFlt2Null()); 
    .... 

所以,當我想插入某物的DB和Str2Null = NULL,它的工作原理,並將其寫入NULL到sqliteDB,但與Flt2Null = null,則拋出一個異常...任何人可以說我爲什麼? 感謝您的幫助迄今爲止...

+0

這看起來不正確,你的SQL查詢不會編譯。我無法確定列名是變量還是「String」的一部分。請更正您的查詢。另外,請考慮使用['SET'語法](http://milov.nl/2836) –

回答

7

看的PreparedStatement.setFloat()簽名:

void setFloat(int parameterIndex, float x) throws SQLException 

正如你所看到的,它使用原始類型float,而不是包裝類型Float,因此,你不能傳遞null它。嘗試Float類型的null值轉換爲float原因NullPointerException

String是參考類型,因此您可以將null傳遞給PreparedStatement.setString()

所以,在setFloat()的情況下,你必須檢查null和使用setNull()通過它:

public static void setFloatOrNull(PreparedStatement ps, int index, Float value) { 
    if (value == null) { 
     ps.setNull(index, Types.FLOAT); 
    } else { 
     ps.setFloat(index, value); 
    } 
} 
+0

幫助了我很多...非常感謝! – unicorn

相關問題