java SQLHelper

文章转自:http://blog.csdn.net/samtribiani/article/details/7620215,感谢作者的分享!

  1 package sql;    
  2 import java.sql.*;    
  3 import java.util.logging.*;    
  4     
  5 /**  
  6  *  SQL 基本操作  
  7  * 通过它,可以很轻松的使用 JDBC 来操纵数据库  
  8  * @author 郗晓勇  
  9  */    
 10 public class SQLHelper    
 11 {    
 12     /**  
 13      * 驱动  
 14      */    
 15     public static String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";    
 16     /**  
 17      * 连接字符串  
 18      */    
 19     public static String url = "jdbc:microsoft:sqlserver://192.168.24.246:1433;DatabaseName=LiNing";    
 20     /**  
 21      * 用户名  
 22      */    
 23     public static String user = "sa";    
 24     /**  
 25      * 密码  
 26      */    
 27     public static String password = "123456";    
 28     /**  
 29      * 不允许实例化该类  
 30      */    
 31     private SQLHelper()    
 32     {    
 33     }    
 34     /**  
 35      * 获取一个数据库连接  
 36      * 通过设置类的  driver / url / user / password 这四个静态变量来 设置数据库连接属性  
 37      * @return 数据库连接  
 38      */    
 39     public static Connection getConnection()    
 40     {    
 41         try    
 42         {    
 43             // 获取驱动,这里使用的是 sqljdbc_1.2.2828.100_chs.exe,不同版本的驱动,语句有所不同    
 44             Class.forName(driver);    
 45         } catch (ClassNotFoundException ex)    
 46         {    
 47             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
 48         }    
 49         try    
 50         {    
 51             return DriverManager.getConnection(url, user, password);    
 52         } catch (SQLException ex)    
 53         {    
 54             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
 55             return null;    
 56         }    
 57     }    
 58     /**  
 59      * 获取一个 Statement  
 60      * 该 Statement 已经设置数据集 可以滚动,可以更新  
 61      * @return 如果获取失败将返回 null,调用时记得检查返回值  
 62      */    
 63     public static Statement getStatement()    
 64     {    
 65         Connection conn = getConnection();    
 66         if (conn == null)    
 67         {    
 68             return null;    
 69         }    
 70         try    
 71         {    
 72             return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,    
 73                     ResultSet.CONCUR_UPDATABLE);    
 74         // 设置数据集可以滚动,可以更新    
 75         } catch (SQLException ex)    
 76         {    
 77             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
 78             close(conn);    
 79         }    
 80         return null;    
 81     }    
 82     /**  
 83      * 获取一个 Statement  
 84      * 该 Statement 已经设置数据集 可以滚动,可以更新  
 85      * @param conn 数据库连接  
 86      * @return 如果获取失败将返回 null,调用时记得检查返回值  
 87      */    
 88     public static Statement getStatement(Connection conn)    
 89     {    
 90         if (conn == null)    
 91         {    
 92             return null;    
 93         }    
 94         try    
 95         {    
 96             return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);    
 97         // 设置数据集可以滚动,可以更新    
 98         } catch (SQLException ex)    
 99         {    
100             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
101             return null;    
102         }    
103     }    
104     /**  
105      * 获取一个带参数的 PreparedStatement  
106      * 该 PreparedStatement 已经设置数据集 可以滚动,可以更新  
107      * @param cmdText 需要 ? 参数的 SQL 语句  
108      * @param cmdParams SQL 语句的参数表  
109      * @return 如果获取失败将返回 null,调用时记得检查返回值  
110      */    
111     public static PreparedStatement getPreparedStatement(String cmdText, Object... cmdParams)    
112     {    
113         Connection conn = getConnection();    
114         if (conn == null)    
115         {    
116             return null;    
117         }    
118         PreparedStatement pstmt = null;    
119         try    
120         {    
121             pstmt = conn.prepareStatement(cmdText, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);    
122             int i = 1;    
123             for (Object item : cmdParams)    
124             {    
125                 pstmt.setObject(i, item);    
126                 i++;    
127             }    
128         } catch (SQLException e)    
129         {    
130             e.printStackTrace();    
131             close(conn);    
132         }    
133         return pstmt;    
134     }    
135     /**  
136      *  获取一个带参数的 PreparedStatement  
137      * 该 PreparedStatement 已经设置数据集 可以滚动,可以更新  
138      * @param conn 数据库连接  
139      * @param cmdText 需要 ? 参数的 SQL 语句  
140      * @param cmdParams SQL 语句的参数表  
141      * @return 如果获取失败将返回 null,调用时记得检查返回值  
142      */    
143     public static PreparedStatement getPreparedStatement(Connection conn, String cmdText, Object... cmdParams)    
144     {    
145         if (conn == null)    
146         {    
147             return null;    
148         }    
149         PreparedStatement pstmt = null;    
150         try    
151         {    
152             pstmt = conn.prepareStatement(cmdText, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);    
153             int i = 1;    
154             for (Object item : cmdParams)    
155             {    
156                 pstmt.setObject(i, item);    
157                 i++;    
158             }    
159         } catch (SQLException e)    
160         {    
161             e.printStackTrace();    
162             close(pstmt);    
163         }    
164         return pstmt;    
165     }    
166     /**  
167      * 执行 SQL 语句,返回结果为整型  
168      * 主要用于执行非查询语句  
169      * @param cmdText SQL 语句  
170      * @return 非负数:正常执行; -1:执行错误; -2:连接错误  
171      */    
172     public static int ExecSql(String cmdText)    
173     {    
174         Statement stmt = getStatement();    
175         if (stmt == null)    
176         {    
177             return -2;    
178         }    
179         int i;    
180         try    
181         {    
182             i = stmt.executeUpdate(cmdText);    
183         } catch (SQLException ex)    
184         {    
185             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,    
186                     ex);    
187             i = -1;    
188         }    
189         closeConnection(stmt);    
190         return i;    
191     }    
192     /**  
193      * 执行 SQL 语句,返回结果为整型  
194      * 主要用于执行非查询语句  
195      * @param cmdText SQL 语句  
196      * @return 非负数:正常执行; -1:执行错误; -2:连接错误  
197      */    
198     public static int ExecSql(Connection conn, String cmdText)    
199     {    
200         Statement stmt = getStatement(conn);    
201         if (stmt == null)    
202         {    
203             return -2;    
204         }    
205         int i;    
206         try    
207         {    
208             i = stmt.executeUpdate(cmdText);    
209         } catch (SQLException ex)    
210         {    
211             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,    
212                     ex);    
213             i = -1;    
214         }    
215         close(stmt);    
216         return i;    
217     }    
218     /**  
219      * 执行 SQL 语句,返回结果为整型  
220      * 主要用于执行非查询语句  
221      * @param cmdText 需要 ? 参数的 SQL 语句  
222      * @param cmdParams SQL 语句的参数表  
223      * @return 非负数:正常执行; -1:执行错误; -2:连接错误  
224      */    
225     public static int ExecSql(String cmdText, Object... cmdParams)    
226     {    
227         PreparedStatement pstmt = getPreparedStatement(cmdText, cmdParams);    
228         if (pstmt == null)    
229         {    
230             return -2;    
231         }    
232         int i;    
233         try    
234         {    
235             i = pstmt.executeUpdate();    
236         } catch (SQLException ex)    
237         {    
238             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,    
239                     ex);    
240             i = -1;    
241         }    
242         closeConnection(pstmt);    
243         return i;    
244     }    
245     /**  
246      * 执行 SQL 语句,返回结果为整型  
247      * 主要用于执行非查询语句  
248      * @param conn 数据库连接  
249      * @param cmdText 需要 ? 参数的 SQL 语句  
250      * @param cmdParams SQL 语句的参数表  
251      * @return 非负数:正常执行; -1:执行错误; -2:连接错误  
252      */    
253     public static int ExecSql(Connection conn, String cmdText, Object... cmdParams)    
254     {    
255         PreparedStatement pstmt = getPreparedStatement(conn, cmdText, cmdParams);    
256         if (pstmt == null)    
257         {    
258             return -2;    
259         }    
260         int i;    
261         try    
262         {    
263             i = pstmt.executeUpdate();    
264         } catch (SQLException ex)    
265         {    
266             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
267             i = -1;    
268         }    
269         close(pstmt);    
270         return i;    
271     }    
272     /**  
273      * 返回结果集的第一行的一列的值,其他忽略  
274      * @param cmdText SQL 语句  
275      * @return  
276      */    
277     public static Object ExecScalar(String cmdText)    
278     {    
279         ResultSet rs = getResultSet(cmdText);    
280         Object obj = buildScalar(rs);    
281         closeConnection(rs);    
282         return obj;    
283     }    
284     /**  
285      * 返回结果集的第一行的一列的值,其他忽略  
286      * @param conn 数据库连接  
287      * @param cmdText SQL 语句  
288      * @return  
289      */    
290     public static Object ExecScalar(Connection conn, String cmdText)    
291     {    
292         ResultSet rs = getResultSet(conn, cmdText);    
293         Object obj = buildScalar(rs);    
294         closeEx(rs);    
295         return obj;    
296     }    
297     /**  
298      * 返回结果集的第一行的一列的值,其他忽略  
299      * @param cmdText 需要 ? 参数的 SQL 语句  
300      * @param cmdParams SQL 语句的参数表  
301      * @return  
302      */    
303     public static Object ExecScalar(String cmdText, Object... cmdParams)    
304     {    
305         ResultSet rs = getResultSet(cmdText, cmdParams);    
306         Object obj = buildScalar(rs);    
307         closeConnection(rs);    
308         return obj;    
309     }    
310     /**  
311      * 返回结果集的第一行的一列的值,其他忽略  
312      * @param conn 数据库连接  
313      * @param cmdText 需要 ? 参数的 SQL 语句  
314      * @param cmdParams SQL 语句的参数表  
315      * @return  
316      */    
317     public static Object ExecScalar(Connection conn, String cmdText, Object... cmdParams)    
318     {    
319         ResultSet rs = getResultSet(conn, cmdText, cmdParams);    
320         Object obj = buildScalar(rs);    
321         closeEx(rs);    
322         return obj;    
323     }    
324     /**  
325      * 返回一个 ResultSet  
326      * @param cmdText SQL 语句  
327      * @return  
328      */    
329     public static ResultSet getResultSet(String cmdText)    
330     {    
331         Statement stmt = getStatement();    
332         if (stmt == null)    
333         {    
334             return null;    
335         }    
336         try    
337         {    
338             return stmt.executeQuery(cmdText);    
339         } catch (SQLException ex)    
340         {    
341             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
342             closeConnection(stmt);    
343         }    
344         return null;    
345     }    
346     /**  
347      * 返回一个 ResultSet  
348      * @param conn  
349      * @param cmdText SQL 语句  
350      * @return  
351      */    
352     public static ResultSet getResultSet(Connection conn, String cmdText)    
353     {    
354         Statement stmt = getStatement(conn);    
355         if (stmt == null)    
356         {    
357             return null;    
358         }    
359         try    
360         {    
361             return stmt.executeQuery(cmdText);    
362         } catch (SQLException ex)    
363         {    
364             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
365             close(stmt);    
366         }    
367         return null;    
368     }    
369     /**  
370      * 返回一个 ResultSet  
371      * @param cmdText 需要 ? 参数的 SQL 语句  
372      * @param cmdParams SQL 语句的参数表  
373      * @return  
374      */    
375     public static ResultSet getResultSet(String cmdText, Object... cmdParams)    
376     {    
377         PreparedStatement pstmt = getPreparedStatement(cmdText, cmdParams);    
378         if (pstmt == null)    
379         {    
380             return null;    
381         }    
382         try    
383         {    
384             return pstmt.executeQuery();    
385         } catch (SQLException ex)    
386         {    
387             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
388             closeConnection(pstmt);    
389         }    
390         return null;    
391     }    
392     /**  
393      * 返回一个 ResultSet  
394      * @param conn 数据库连接  
395      * @param cmdText 需要 ? 参数的 SQL 语句  
396      * @param cmdParams SQL 语句的参数表  
397      * @return  
398      */    
399     public static ResultSet getResultSet(Connection conn, String cmdText, Object... cmdParams)    
400     {    
401         PreparedStatement pstmt = getPreparedStatement(conn, cmdText, cmdParams);    
402         if (pstmt == null)    
403         {    
404             return null;    
405         }    
406         try    
407         {    
408             return pstmt.executeQuery();    
409         } catch (SQLException ex)    
410         {    
411             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
412             close(pstmt);    
413         }    
414         return null;    
415     }    
416     public static Object buildScalar(ResultSet rs)    
417     {    
418         if (rs == null)    
419         {    
420             return null;    
421         }    
422         Object obj = null;    
423         try    
424         {    
425             if (rs.next())    
426             {    
427                 obj = rs.getObject(1);    
428             }    
429         } catch (SQLException ex)    
430         {    
431             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
432         }    
433         return obj;    
434     }    
435     
436        
437       
438      
439     /**  
440      * 获取一个具有更新功能的数据模型 如果只要读取数据,就不要用它了  
441      * @param cmdText 能返回一个数据集的查询SQL 语句  
442      * @return 表格数据模型  
443      *   
444      *   
445      * DataSet 没有找到在哪个包中,因为暂时用不到所以省略此方法  
446        
447     public static DataSet getDataSet(String cmdText)  
448     {  
449         Statement stmt = getStatement();  
450         DataSet dbc = new DataSet();  
451         if (stmt == null)  
452         {  
453             dbc.code = -2;  
454             return dbc;  
455         }  
456         try  
457         {  
458             // 查询语句  
459             dbc.rs = stmt.executeQuery(cmdText);  
460             dbc.model = buildTableModel(dbc.rs);  
461             dbc.code = dbc.model.getRowCount();  
462         } catch (SQLException ex)  
463         {  
464             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);  
465             dbc.code = -1;  
466         }  
467         return dbc;  
468     }  
469     */    
470         
471     /**  
472      * 获取一个具有更新功能的数据模型 如果只要读取数据,就不要用它了  
473      * @param conn 数据库连接  
474      * @param cmdText 能返回一个数据集的查询SQL 语句  
475      * @return 表格数据模型  
476      *   
477      * 同上一个方法  
478        
479     public static DataSet getDataSet(Connection conn, String cmdText)  
480     {  
481         Statement stmt = getStatement(conn);  
482         DataSet dbc = new DataSet();  
483         if (stmt == null)  
484         {  
485             dbc.code = -2;  
486             return dbc;  
487         }  
488         try  
489         {  
490             // 查询语句  
491             dbc.rs = stmt.executeQuery(cmdText);  
492             dbc.model = buildTableModel(dbc.rs);  
493             dbc.code = dbc.model.getRowCount();  
494         } catch (SQLException ex)  
495         {  
496             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);  
497             dbc.code = -1;  
498         }  
499         return dbc;  
500     }  
501     */    
502     /**  
503      * 获取一个具有更新功能的数据模型 如果只要读取数据,就不要用它了  
504      * @param cmdText 需要 ? 参数的 SQL 语句  
505      * @param cmdParams SQL 语句的参数表  
506      * @return 表格数据模型  
507      *   
508      *   
509      * 同上一个方法     *   
510      *   
511       
512     public static DataSet getDataSet(String cmdText, Object... cmdParams)  
513     {  
514         PreparedStatement pstmt = getPreparedStatement(cmdText, cmdParams);  
515         DataSet dbc = new DataSet();  
516         if (pstmt == null)  
517         {  
518             dbc.code = -2;  
519             return dbc;  
520         }  
521         try  
522         {  
523             // 查询语句  
524             dbc.rs = pstmt.executeQuery();  
525             dbc.model = buildTableModel(dbc.rs);  
526             dbc.code = dbc.model.getRowCount();  
527         } catch (SQLException ex)  
528         {  
529             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);  
530             dbc.code = -1;  
531         }  
532         return dbc;  
533     }  
534       
535      */    
536     /**  
537      * 获取一个具有更新功能的数据模型 如果只要读取数据,就不要用它了  
538      * @param conn 数据库连接  
539      * @param cmdText 需要 ? 参数的 SQL 语句  
540      * @param cmdParams SQL 语句的参数表  
541      * @return 表格数据模型  
542      *   
543      *   
544      * 同上  
545      *   
546        
547     public static DataSet getDataSet(Connection conn, String cmdText, Object... cmdParams)  
548     {  
549         PreparedStatement pstmt = getPreparedStatement(conn, cmdText, cmdParams);  
550         DataSet dbc = new DataSet();  
551         if (pstmt == null)  
552         {  
553             dbc.code = -2;  
554             return dbc;  
555         }  
556         try  
557         {  
558             // 查询语句  
559             dbc.rs = pstmt.executeQuery();  
560             dbc.model = buildTableModel(dbc.rs);  
561             dbc.code = dbc.model.getRowCount();  
562         } catch (SQLException ex)  
563         {  
564             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);  
565             dbc.code = -1;  
566         }  
567         return dbc;  
568     }  
569     */    
570     private static void close(Object obj)    
571     {    
572         if (obj == null)    
573         {    
574             return;    
575         }    
576         try    
577         {    
578             if (obj instanceof Statement)    
579             {    
580                 ((Statement) obj).close();    
581             } else if (obj instanceof PreparedStatement)    
582             {    
583                 ((PreparedStatement) obj).close();    
584             } else if (obj instanceof ResultSet)    
585             {    
586                 ((ResultSet) obj).close();    
587             } else if (obj instanceof Connection)    
588             {    
589                 ((Connection) obj).close();    
590             }    
591         } catch (SQLException ex)    
592         {    
593             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
594         }    
595     }    
596     private static void closeEx(Object obj)    
597     {    
598         if (obj == null)    
599         {    
600             return;    
601         }    
602         try    
603         {    
604             if (obj instanceof Statement)    
605             {    
606                 ((Statement) obj).close();    
607             } else if (obj instanceof PreparedStatement)    
608             {    
609                 ((PreparedStatement) obj).close();    
610             } else if (obj instanceof ResultSet)    
611             {    
612                 ((ResultSet) obj).getStatement().close();    
613             } else if (obj instanceof Connection)    
614             {    
615                 ((Connection) obj).close();    
616             }    
617         } catch (SQLException ex)    
618         {    
619             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
620         }    
621     }    
622     private static void closeConnection(Object obj)    
623     {    
624         if (obj == null)    
625         {    
626             return;    
627         }    
628         try    
629         {    
630             if (obj instanceof Statement)    
631             {    
632                 ((Statement) obj).getConnection().close();    
633             } else if (obj instanceof PreparedStatement)    
634             {    
635                 ((PreparedStatement) obj).getConnection().close();    
636             } else if (obj instanceof ResultSet)    
637             {    
638                 ((ResultSet) obj).getStatement().getConnection().close();    
639             } else if (obj instanceof Connection)    
640             {    
641                 ((Connection) obj).close();    
642             }    
643         } catch (SQLException ex)    
644         {    
645             Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);    
646         }    
647     }    
648 }    

 

posted @ 2013-05-08 18:37  爪哇公民  阅读(304)  评论(0编辑  收藏  举报