You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android向SQLite添加数据遇MissingFormatArgumentException错误求助

解决SQLite插入数据时的java.util.MissingFormatArgumentException错误

这个错误的根源非常清晰:你在使用String.format构建SQL插入语句时,占位符的数量和传入的参数数量不匹配。

先看你的addToCart方法代码:

public void addToCart(Order order){
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("INSERT INTO OrderDetails(Productid,ProductName,Quantity,Price,Discount,Image) VALUES('%s','%s','%s','%s','%s','%s');", 
          order.getProductid(), order.getProductName(), order.getQuantity(), order.getPrice(), order.getDiscount());
    db.execSQL(query);
}

你在VALUES部分定义了6个%s占位符,但只传入了5个参数(最后漏掉了对应Image字段的order.getImage()),系统找不到匹配第6个占位符的参数,就抛出了MissingFormatArgumentException。

快速修复方案

只需要补上缺失的order.getImage()参数即可,另外还要注意:执行插入操作应该用getWritableDatabase()而非getReadableDatabase()(后者主要用于查询场景):

public void addToCart(Order order){
    SQLiteDatabase db = getWritableDatabase();
    String query = String.format("INSERT INTO OrderDetails(Productid,ProductName,Quantity,Price,Discount,Image) VALUES('%s','%s','%s','%s','%s','%s');", 
          order.getProductid(), order.getProductName(), order.getQuantity(), order.getPrice(), order.getDiscount(), order.getImage());
    db.execSQL(query);
}

更安全的优化建议

直接用String.format拼接SQL语句存在SQL注入风险,而且很容易出现这种参数数量不匹配的低级错误。推荐使用Android官方推荐的ContentValues类来操作SQLite,代码更简洁安全:

public void addToCart(Order order){
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("Productid", order.getProductid());
    values.put("ProductName", order.getProductName());
    values.put("Quantity", order.getQuantity());
    values.put("Price", order.getPrice());
    values.put("Discount", order.getDiscount());
    values.put("Image", order.getImage());
    
    db.insert("OrderDetails", null, values);
    db.close(); // 记得关闭数据库连接,避免资源泄漏
}

这种方式不需要手动拼接字符串,系统会自动处理参数转义,彻底避免SQL注入和格式符不匹配的问题。

内容的提问来源于stack exchange,提问作者P595

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:19:05