相信通过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();
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这些强大的开发框架,确实可以少写很多代码,谁用谁知道。

喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库的更多相关文章

  1. Microsoft JDBC Driver 使用 getParameterMetaData 会报错?

    不知道为何使用 Microsoft JDBC Driver for SQL Server 驱动时,sql语句不带参数没有问题,但是如果带参数且使用 getParameterMetaData 就会提示某 ...

  2. 下载 Microsoft JDBC driver 7.2 for SQL Server

    下载 Microsoft JDBC driver 7.2 for SQL Server:https://www.microsoft.com/zh-cn/download/confirmation.as ...

  3. [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝

    一般连接sql数据库,IP_connstr="driver={SQL Server}; server=127.0.0.1;database=数据库名字;uid=sa;pwd=密码" ...

  4. Dynamics 365执行操作报SQL Server已超时,更改这个超时设置的方法

    本人微信公众号:微软动态CRM专家罗勇 ,回复291或者20190110可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 当执 ...

  5. 未找到或无法访问服务器 请验证实例名称是否正确并且SQL Server 已配置为允许远程连接

    无法连接到sql server 2008服务器 报下错误 其他信息    在与SQL Server建立连接时出现与网络相关的或特定于实例的错误 未找到或无法访问服务器请验证实例名称是否正确并且SQL ...

  6. 使用zabbix监控sql server的发布订阅

    (一)背景 个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制.在发布订阅环境搭建完成后,最重要的就是如何监控复制的状态了,sql serve ...

  7. 【转】SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误

    SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误 最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS ...

  8. SQL Server 复制 - 发布订阅(SQL Server 数据同步)

    原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...

  9. 请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)

    程序异常,错误信息:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (pro ...

随机推荐

  1. SMARTY模板中如何使用get,post,request,cookies,session,server变量

    {$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间戳.直接访问PHP中 ...

  2. 安卓智能POS终端手持机PDA应用仓库出入库,移库,盘点,销售开单系统

    随着移动互联网的兴起,目前仓储管理所面临的的问题可以迎刃而解,WMS仓库系统解决方案通过智能终端扫描条码技术应用解决了工作量大导致工作效率不高,以及数据实时传输等问题,该方案主要提供仓库出入库,移库, ...

  3. vps_centos_7_系统环境常规配置备忘

    1.设置时区(东八区) 1> 选择亚洲东八区北京时间:tzselect (按照提示选择指定的序号直到北京时间) 2>替换时区文件 :cp /usr/share/zoneinfo/Asia/ ...

  4. Python3使用urllib访问网页

    介绍 改教程翻译自python官网的一篇文档. urllib.request是一个用于访问URL(统一资源定位符)的Python模块.它以urlopen函数的形式提供了一个非常简单的接口,可以访问使用 ...

  5. eval解析JSON中的注意点

       在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery ...

  6. 【校验】TCP和UDP的校验和

    一开始,私以为校验和只是简单的求和得到的结果,后来在TCP和UDP里面看到使用的校验和方式有点奇怪--二进制反码(循环进位)求和. 人类的认知过程必将从简单到复杂,看下这个二进制反码循环求和是啥子意思 ...

  7. 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)

    A. Within Arm's Reach 留坑. B. Bribing Eve 枚举经过$1$号点的所有直线,统计直线右侧的点数,旋转卡壳即可. 时间复杂度$O(n\log n)$. #includ ...

  8. Android -- PopupWindow(其中嵌套ListView 可以被点击)

    1. 效果图

  9. WindowManager.LayoutParams 札记

    WindowManager.LayoutParams wlp = new WindowManager.LayoutParams(width, height, WindowManager.LayoutP ...

  10. sort命令

    1.默认情况下,sort命令,以字母序进行文本排序sort word.txt2.如果想对数字进行排序,可以使用-n参数sort num.txt -n3指定列排序下面是对passwd文件,以冒号(:)进 ...