相信通過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
這個問題是由Java語言中比較難用的Date類型造成的,雖然開發過程中我們使用的是Jada-Time這個框架,但是對外暴露服務接口,還是保持為Date。
當Java接口時間參數類型定義為Date,我們通過.NET調用Rest接口,雖然看起來是很簡單,將參數傳人調用接口即可,但是測試結果發現,.NET傳人的DateTime,經過Java服務保存在數據庫中死活不正確,後來才定位到問題。
比如有個Java CRM客戶信息Rest服務,.NET調用服務,客戶信息實體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、SpringCloud這些強大的開發框架,確實可以少寫很多代碼,誰用誰知道。