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

Android向SQL Server提交DateTime字段为NULL问题求助

解决SQL Server datetime字段插入NULL的问题

嘿,我刚好碰到过类似的坑!你现在的核心问题是直接把Calendar对象塞进JSON里,Web服务端没法正确解析成SQL Server能识别的datetime格式,所以导致这个字段插入成NULL——其他字段正常说明数据传输链路是通的,就差日期格式这关键一步。

给你几个具体的解决方案:

  • 在Android端把日期转成SQL Server兼容的字符串格式
    SQL Server的datetime字段原生支持yyyy-MM-dd HH:mm:ss这种格式,你可以用SimpleDateFormat把Calendar的时间转成对应字符串再放入JSON:

    // 定义SQL Server兼容的日期格式化规则
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 获取当前时间并格式化
    String formattedCreatedOn = dateFormat.format(Calendar.getInstance(TimeZone.getDefault()).getTime());
    // 把格式化后的字符串放入JSON
    jsonBody.put("created on", formattedCreatedOn);
    

    要是你的数据库用UTC时区,记得把Calendar切换到UTC再格式化,避免时区偏差导致的时间错误。

  • 检查Web服务端的日期解析逻辑
    确保服务端收到日期字符串后,用参数化查询的方式转换成datetime类型(绝对别直接拼接SQL,会有注入风险)。比如用C#的ADO.NET可以这么处理:

    string sql = "INSERT INTO users (nickname, firstname, lastname, created_on, phonenumber) VALUES (@nickname, @firstname, @lastname, @createdOn, @phonenumber)";
    using (SqlCommand cmd = new SqlCommand(sql, connection))
    {
        cmd.Parameters.AddWithValue("@createdOn", DateTime.Parse(createdOnString));
        // 绑定其他参数...
        cmd.ExecuteNonQuery();
    }
    

    要是Java服务端,用JDBC的话可以用PreparedStatement.setTimestamp()来绑定日期参数。

  • 优化字段命名(可选但推荐)
    你JSON里的字段名是created on带空格,虽然部分解析工具能处理,但更规范的做法是改成下划线命名created_on,和数据库字段名保持一致,能减少很多不必要的解析问题。

按照上面的步骤调整后,应该就能正常插入日期数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:21