com.microsoft.sqlserver.jdbc.SQLServerException: Socket closed 或者 该连接已关闭

com.microsoft.sqlserver.jdbc.SQLServerException: Socket closed 或者 该连接已关闭

解决方案:

DBUtil公共方法如下:

  1 package com.dao;
  2
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.sql.*;
  6 import java.text.ParsePosition;
  7 import java.text.SimpleDateFormat;
  8 import java.util.ArrayList;
  9 import java.util.Calendar;
 10 import java.util.Date;
 11 import java.util.List;
 12 import java.util.Properties;
 13
 14 import com.fasterxml.jackson.core.JsonParseException;
 15 import com.fasterxml.jackson.core.JsonProcessingException;
 16 import com.fasterxml.jackson.databind.JsonMappingException;
 17 import com.fasterxml.jackson.databind.ObjectMapper;
 18
 19 public class DBUtil {
 20     //连接对象
 21     //Statement 命令对象
 22     //打开连接
 23     //关闭连接
 24     //得到一个连接对象
 25     //查询(有参,无参)
 26     //修改(有参,无参)
 27     static Statement stmt = null;
 28     //驱动,服务器地址,登录用户名,密码
 29     static String DBDRIVER;
 30     static String DBURL;
 31     static String DBUID;
 32     static String DBPWD;
 33
 34     static {
 35         //先创建资源文件,扩展名为.properties
 36         //内容是以:dbuser=sa  格式
 37
 38         Properties prop = new Properties();//先获取资源对象
 39         //创建输入流,读取资源文件
 40         InputStream in =Thread.currentThread().getContextClassLoader()
 41                 .getResourceAsStream("jdbc.properties");
 42         try {
 43             prop.load(in);//加载
 44             DBDRIVER = prop.getProperty("DBDRIVER");
 45             DBURL = prop.getProperty("DBURL");
 46             DBUID = prop.getProperty("DBUID");
 47             DBPWD = prop.getProperty("DBPWD");
 48             //System.out.println(DBDRIVER);
 49         } catch (IOException e) {
 50             System.out.println("资源文件读取错误,请查看资源文件");
 51         }
 52         try {
 53             in.close();
 54         } catch (IOException e) {
 55             e.printStackTrace();
 56         }
 57     }
 58     //打开连接
 59      static  {
 60         //加载驱动
 61         try {
 62             Class.forName(DBDRIVER);
 63         } catch (ClassNotFoundException e) {
 64             e.printStackTrace();
 65         }
 66     }
 67     //关闭连接
 68     public static void close(Connection conn) {
 69         try {
 70             if(stmt!=null)
 71                     stmt.close();
 72             if(conn!=null && !conn.isClosed())
 73                 conn.close();
 74         } catch (SQLException e) {
 75             // TODO Auto-generated catch block
 76             e.printStackTrace();
 77         }
 78     }
 79     public static void close(ResultSet rs) {
 80         Statement st = null;
 81         Connection con = null;
 82         try {
 83             try {
 84                 if (rs != null) {
 85                     st = rs.getStatement();
 86                     rs.close();
 87                 }
 88             } finally {
 89                 try {
 90                     if (st != null) {
 91                         con = st.getConnection();
 92                         st.close();
 93                     }
 94                 } finally {
 95                     if (con != null) {
 96                         con.close();
 97                     }
 98                 }
 99             }
100         } catch (SQLException e) {
101             e.printStackTrace();
102         }
103     }
104     //得到一个连接对象,当用户使用DBUtil无法解决个性问题时
105     //可以通过本方法获得连接对象
106     public static Connection getConnection() {
107          Connection conn = null;
108         try {
109             conn=DriverManager.getConnection(DBURL,DBUID,DBPWD);
110         } catch (SQLException e) {
111             e.printStackTrace();
112         }
113         return conn;
114     }
115
116     //executeQuery
117     //executeUpdate
118     //execute
119     //获得查询的数据集
120     //select * from student where name='' and sex=''
121     public static ResultSet executeQuery(String sql) {
122         Connection conn = getConnection();
123         try {
124             stmt = conn.createStatement();
125             return stmt.executeQuery(sql);
126         } catch (SQLException e) {
127             // TODO Auto-generated catch block
128             e.printStackTrace();
129         }
130         return null;
131     }
132
133     //修改表格内容
134     public static int executeUpdate(String sql) {
135         Connection conn = getConnection();
136         int result = 0;
137         try {
138             stmt = conn.createStatement();
139             result = stmt.executeUpdate(sql);
140         } catch (SQLException e) {
141             // TODO Auto-generated catch block
142             e.printStackTrace();
143         } finally {
144             close(conn);
145         }
146         return result;
147     }
148     //如果执行的查询或存储过程,会返回多个数据集,或多个执行成功记录数
149     //可以调用本方法,返回的结果,
150     //是一个List<ResultSet>或List<Integer>集合
151     public static Object execute(String sql) {
152         Connection conn = getConnection();
153         boolean b=false;
154         try {
155             stmt = conn.createStatement();
156             b = stmt.execute(sql);
157             //true,执行的是一个查询语句,我们可以得到一个数据集
158             //false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
159             if(b){
160                 return stmt.getResultSet();
161             }
162             else {
163                 return stmt.getUpdateCount();
164             }
165         } catch (SQLException e) {
166             // TODO Auto-generated catch block
167             e.printStackTrace();
168         } finally {
169             if(!b) {
170                 close(conn);
171             }
172         }
173         return null;
174     }
175
176     //
177     //select * from student where name=? and sex=?
178     public static ResultSet executeQuery(String sql,Object[] in) {
179         Connection conn = getConnection();
180         try {
181             PreparedStatement pst = conn.prepareStatement(sql);
182             for(int i=0;i<in.length;i++)
183                 pst.setObject(i+1, in[i]);
184             stmt = pst;//只是为了关闭命令对象pst
185             return pst.executeQuery();
186         } catch (SQLException e) {
187             // TODO Auto-generated catch block
188             e.printStackTrace();
189         }
190         return null;
191     }
192
193     public static int executeUpdate(String sql,Object[] in) {
194         Connection conn = getConnection();
195         try {
196             PreparedStatement pst = conn.prepareStatement(sql);
197             for(int i=0;i<in.length;i++)
198                 pst.setObject(i+1, in[i]);
199             stmt = pst;//只是为了关闭命令对象pst
200             return pst.executeUpdate();
201         } catch (SQLException e) {
202             // TODO Auto-generated catch block
203             e.printStackTrace();
204         }finally {
205             close(conn);
206         }
207         return 0;
208     }
209     public static Object execute(String sql,Object[] in) {
210         Connection conn = getConnection();
211         boolean b=false;
212         try {
213             PreparedStatement pst = conn.prepareStatement(sql);
214             for(int i=0;i<in.length;i++)
215                 pst.setObject(i+1, in[i]);
216             b = pst.execute();
217             //true,执行的是一个查询语句,我们可以得到一个数据集
218             //false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
219             if(b){
220                 System.out.println("----");
221                 /*List<ResultSet> list = new ArrayList<ResultSet>();
222                 list.add(pst.getResultSet());
223                 while(pst.getMoreResults()) {
224                     list.add(pst.getResultSet());
225                 }*/
226                 return pst.getResultSet();
227             }
228             else {
229                 System.out.println("****");
230                 List<Integer> list = new ArrayList<Integer>();
231                 list.add(pst.getUpdateCount());
232                 while(pst.getMoreResults()) {
233                     list.add(pst.getUpdateCount());
234                 }
235                 return list;
236             }
237         } catch (SQLException e) {
238             // TODO Auto-generated catch block
239             e.printStackTrace();
240         } finally {
241             if(!b) {
242                 System.out.println("====");
243                 close(conn);
244             }
245         }
246         return null;
247     }
248     //调用存储过程  proc_Insert(?,?,?)
249     public static Object executeProcedure(String procName,Object[] in) {
250         Connection conn = getConnection();
251         try {
252             procName = "{call "+procName+"(";
253             String link="";
254             for(int i=0;i<in.length;i++) {
255                 procName+=link+"?";
256                 link=",";
257             }
258             procName+=")}";
259             CallableStatement cstmt = conn.prepareCall(procName);
260             for(int i=0;i<in.length;i++) {
261                 cstmt.setObject(i+1, in[i]);
262             }
263             if(cstmt.execute())
264             {
265                 return cstmt.getResultSet();
266             }
267             else {
268                 return cstmt.getUpdateCount();
269             }
270         } catch (SQLException e) {
271             // TODO Auto-generated catch block
272             e.printStackTrace();
273         }
274
275         return null;
276     }
277
278
279     /*
280      * 调用存储过程,并有输出参数
281      * @procName ,存储过程名称:proc_Insert(?,?)
282      * @in ,输入参数集合
283      * @output,输出参数集合
284      * @type,输出参数类型集合
285      * */
286     public static Object executeOutputProcedure(String procName,
287             Object[] in,Object[] output,int[] type){
288         Connection conn = getConnection();
289         Object result = null;
290         try {
291             CallableStatement cstmt = conn.prepareCall("{call "+procName+"}");
292             //设置存储过程的参数值
293             int i=0;
294             for(;i<in.length;i++){//设置输入参数
295                 cstmt.setObject(i+1, in[i]);
296                 //print(i+1);
297             }
298             int len = output.length+i;
299             for(;i<len;i++){//设置输出参数
300                 cstmt.registerOutParameter(i+1,type[i-in.length]);
301                 //print(i+1);
302             }
303             boolean b = cstmt.execute();
304             //获取输出参数的值
305             for(i=in.length;i<output.length+in.length;i++)
306                 output[i-in.length] = cstmt.getObject(i+1);
307             if(b) {
308                 result = cstmt.getResultSet();
309             }
310             else {
311                 result = cstmt.getUpdateCount();
312             }
313         } catch (SQLException e) {
314             // TODO Auto-generated catch block
315             e.printStackTrace();
316         }
317         return result;
318     }
319     public static String toJson(Object obj){
320         String reuqest=null;
321         //对象映射
322         ObjectMapper mapper=new ObjectMapper();
323         //设置时间格式
324         SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy年MM月dd日");
325         mapper.setDateFormat(dateFormat);
326             try {
327                 reuqest=mapper.writeValueAsString(obj);
328             } catch (JsonProcessingException e) {
329                 // TODO Auto-generated catch block
330                 e.printStackTrace();
331             }
332         return reuqest;
333     }
334     public static <T> T toObject(String src,Class<T> valueType){
335         T request=null;
336             //对象反射
337           ObjectMapper mapper=new ObjectMapper();
338           try {
339             request=mapper.readValue(src, valueType);
340         } catch (JsonParseException e) {
341             // TODO Auto-generated catch block
342             e.printStackTrace();
343         } catch (JsonMappingException e) {
344             // TODO Auto-generated catch block
345             e.printStackTrace();
346         } catch (IOException e) {
347             // TODO Auto-generated catch block
348             e.printStackTrace();
349         }
350         return request;
351     }
352     public static Date date(String date_str) {
353         try {
354             Calendar zcal = Calendar.getInstance();//日期类
355             Timestamp timestampnow = new Timestamp(zcal.getTimeInMillis());//转换成正常的日期格式
356             SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");//改为需要的东西
357             ParsePosition pos = new ParsePosition(0);
358             java.util.Date current = formatter.parse(date_str, pos);
359             timestampnow = new Timestamp(current.getTime());
360             return timestampnow;
361         }
362         catch (NullPointerException e) {
363             return null;
364         }
365     }
366 }

  声明:使用该公共方法需要在WEB-INF/classes/jdbc.properties添加连接驱动等等 如图:

在classes中加入链接

1 DBDRIVER=com.microsoft.sqlserver.jdbc.SQLServerDriver
2 DBURL=jdbc:sqlserver://localhost:1433;databasename=AJAX_ProductDB
3 DBUID=sa
4 DBPWD=123456

posted @ 2018-07-11 16:30 韦邦杠 阅读(...) 评论(...) 编辑 收藏

com.microsoft.sqlserver.jdbc.SQLServerException: Socket closed 或者 该连接已关闭相关推荐

  1. com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围

    在做一个小的学生信息管理系统,涉及到jdbc的运用,在完成查询功能时,查询语句为 1 public static final String SELECT_STUDENT = "select ...

  2. jdbc连接数据库失败,com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。

    创建数据库连接失败! com.microsoft.sqlserver.jdbc.SQLServerException: 到主机  的 TCP/IP 连接失败. java.net.ConnectExce ...

  3. 异常:com.microsoft.sqlserver.jdbc.SQLServerException: 将截断字符串或二进制数据。

    com.microsoft.sqlserver.jdbc.SQLServerException: 将截断字符串或二进制数据.  at com.microsoft.sqlserver.jdbc.SQLS ...

  4. [ERR]com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行

    java获取结果集,if(rs!=null),和while(rs.next())区别  com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前 ...

  5. SqlServer死锁com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 52) was deadlock

    Java多线程操作SqlServer数据库,执行update的操作 :报错: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction ...

  6. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'user' 附近有语法错误

    org.apache.ibatis.exceptions.PersistenceException:  ### Error querying database.  Cause: com.microso ...

  7. com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'Monkey' 无效。

    主要代码 package chp13;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExc ...

  8. com.microsoft.sqlserver.jdbc.SQLServerException: 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。

    sqlserver在做批量插入的时候出现这个错误: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的表格格式数据流(TDS)远程过程调用(RPC ...

  9. com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接。

    @TOcom.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接.C co ...

  10. com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接

    com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接 驱动版本 最新 ...

最新文章

  1. 学习之路-现代密码学基础-001
  2. php跟html增删改查,EasyUIDataGrid结合ThinkPHP实现增删改查操作初学者_html/css_WEB-ITnose...
  3. StartActivityForResult(中规中矩版 获得Acivity2的性别选择)
  4. Apache Kafka:大数据的实时处理时代
  5. nohup不输出日志信息的方法,及linux重定向学习
  6. matlab 连通分支,(完整版)图的连通性判断matlab实验报告
  7. CPU,寄存器,内存三者的关系
  8. 关联矩阵古林法的matlab代码,[转载][原创]灰色关联分析及Matlab程序实现
  9. 转载:XPath基本语法
  10. Android SystemProperties系统属性详解
  11. C#中的IntPtr
  12. 2019年六项扣除 个税计算器
  13. Flex + BlazeDS 学习笔记 (一) --- BlazeDS的功能原理及配置实例
  14. CodeCademy | Python | 6. Pyglatin
  15. 魔兽linux版本,linux下玩warcraft III(魔兽)
  16. Mounty 1.10免费版(NTFS硬盘工具)支持big sur
  17. 数据可视化ECharts:饼形图 1年龄分布模块制作
  18. 华为高管丁耘跑28公里后突发疾病去世:在公司工作26年
  19. 简化 Spring 控制器:只须写接口即可
  20. GIS应用技巧之缓冲区分析

热门文章

  1. hyperparameter_hunter 超参数优化模块实践
  2. SQLServer数据库增、删、改、查简单操作示例
  3. python求解给定一个整数N,求N!末尾有多少个0,求N!的二进制中最低位1的位置
  4. python实现完整的求解给定列表中所有的平衡点问题,是所有的平衡点
  5. oracle批量文件入库,C++ Oracle批量高效入库
  6. 2021-06-10 JUC01DAY
  7. case 日期when 范围_亚马逊运营干货:开case最全路径和各种实用链接,赶紧收藏...
  8. 华为ebgp_华为路由器BGP邻居详解
  9. python编写量化交易程序英语_Python量化交易开源框架:AmazingQuant
  10. 微信小程序云开发教程-云开发对微信小程序带来的变革作用