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
相关产品推荐
相关产品推荐

