java PreparedStatement.setFloat抛出NullpointerException,Pstmt.setString是否允许?
实际上,我的整个问题都在标题里。我有一个类,用于管理发票对象对Sqlite DB的插入和删除java PreparedStatement.setFloat抛出NullpointerException,Pstmt.setString是否允许?,java,prepared-statement,Java,Prepared Statement,实际上,我的整个问题都在标题里。我有一个类,用于管理发票对象对Sqlite DB的插入和删除 public class Invoice { private String str1; private Float flt1; private String str2Null; private Float flt2Null; public Invoice(String str1, Float flt1){ this.str1 = str1;
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());
....
因此,当我想将sth插入数据库并且Str2Null=null时,它会工作并将null写入sqliteDB,但如果Flt2Null=null,则会引发异常。。。谁能告诉我为什么???
感谢您迄今为止的帮助…请查看
PreparedStatement.setFloat()的签名。
:
如您所见,它使用原语类型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);
}
}
这看起来不太正确,您的sql查询无法编译。我无法确定列名是变量还是字符串的一部分。请更正您的疑问。另外,考虑使用帮助了我很多…非常感谢!
public static void setFloatOrNull(PreparedStatement ps, int index, Float value) {
if (value == null) {
ps.setNull(index, Types.FLOAT);
} else {
ps.setFloat(index, value);
}
}