随笔 - 268  文章 - 0  评论 - 1028  阅读 - 160万

喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库

 相信通过java和SQLServer开发应用的同学们都经历过如下类似的问题。

 微软提供的JDBC官方驱动没有放置在Maven仓库中,这样如果你的Java应用需要访问SQL Server,你不得不下载sqljdbc4.jar至本地,然后每次都通过如下Maven命令安装这一驱动:

mvn install:install-file -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar -Dfile=YOUR FILE DIR\sqljdbc4.jar


然后在你的Java应用的POM.xml文件中进行如下配置:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.0</version>
</dependency>

最后再执行:

mvn clean package

如果你是使用Eclipse进行开发,上面的步骤执行以后,如果编译不通过,你可能还需要重启Eclipse。


也许是听取了广大开发群众的强烈呼声,或者是其他什么原因,微软最近这个月(今年11月份)将这个驱动发布到了Maven中央仓库,下次你要安装SQL Server驱动,直接在POM.xml文件中进行如下配置即可(微软提供了两个版本(6.1.0.jre8和6.1.0.jre7)的驱动,我目前的开发基于Java8,所以选择了6.1.0.jre8这个版本,可以参考这里):

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre8</version>
</dependency>


目前亲测通过。

希望大家都可以开心地写代码。

 

参考:

http://stackoverflow.com/questions/19537396/missing-artifact-com-microsoft-sqlserversqljdbc4jar4-0

 

附:.NET调用Java Restful接口时间处理一则

 这个问题是由Java语言中比较难用的Date类型造成的,虽然开发过程中我们使用的是Jada-Time这个框架,但是对外暴露服务接口,还是保持为Date。
当Java接口时间参数类型定义为Date,我们通过.NET调用Rest接口,虽然看起来是很简单,将参数传人调用接口即可,但是测试结果发现,.NET传人的DateTime,经过Java服务保存在数据库中死活不正确,后来才定位到问题。
比如有个Java CRM客户信息Rest服务,.NET调用服务,客户信息实体Customer如下:

复制代码
    public class Customer
    {
        public string firstName { get; set; }

        public string lastName { get; set; }

        public DateTime createTime { get; set; }
    }
Customer
复制代码

如果我们直接New一个Customer,并给createTime赋值为DateTime.Now:

 var ent = new Customer
 {
      firstName = "jeff",
      lastName = "wong",
      createTime = DateTime.Now,
 };

 那么通过Java接口插入数据库的时间是不正确的,虽然可以插入。

解决方案有两种:
1、DateTime.ToUniversalTime().ToString("s")

这种方式就是最朴素的拼接接口报文进行接口调用了,大致如下:

复制代码
var sb = new StringBuffer(1024);
sb.Append("{");

sb.AppendFormat(" \"firstName\": \"{0}\",", ent.firstName);
sb.AppendFormat(" \"lastName\": \"{0}\",", ent.lastName);

sb.AppendFormat(" \"createTime\": \"{0}\"", ent.createTime.ToUniversalTime().ToString("s"));

sb.Append("}");

var postData = sb.ToString(); 
复制代码

 

2、使用Newtonsoft.Json

 var timeConverter = new IsoDateTimeConverter
 {
         DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss",
         DateTimeStyles = DateTimeStyles.AdjustToUniversal
 };

var postData = JsonConvert.SerializeObject(ent, Newtonsoft.Json.Formatting.Indented, timeConverter);

最后感慨一下,Java8某些语言特性的加入,比如Lambda表达式、Optional类、Stream API、默认方法、方法引用等等,相比.NET,开发Java应用也比较爽了,当然不能忘了Spring Boot、Spring Cloud这些强大的开发框架,确实可以少写很多代码,谁用谁知道。

 

posted on   JeffWong  阅读(4622)  评论(3编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2014-11-22 业务系统数据库设计常见的隔离和共享模式
2009-11-22 jQuery学习笔记:效果
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

I know how to make it works and I want to know how it works.
点击右上角即可分享
微信分享提示