Java如何连接SQLServer,并实现查询、修改、删除方法

场景:A:在UI自动化时,删除数据时候,在界面UI提示“该XX已被使用,无法删除”。 这时候我们有需要做数据初始化的操作,需要把历史数据做删除,来确脚本运行的重复执行,和稳定性质。

B: 在做新增操作时候,需要校验数据是否存在后台。需要校验后台数据。

实现思路:

1.把数据库的连接地址、用户名、密码。 配置在框架配置文件处。

public class Const {
    public static final String DB_URL = "XXXX";
    public static final String DB_DatabaseName = "XXX";
    public static final String DB_UserName = "XXX";
    public static final String DB_Password = "XXX";
}

 

2.DBHelper 方法

 1 package com.pensee.utils;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 import com.pensee.config.Const;
 9 
10 public class DBHelper {
11     static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
12     static String url = "jdbc:sqlserver://"+ Const.DB_URL +";DatabaseName="+ Const.DB_DatabaseName +"";
13     static Connection con = null;
14     static Statement st = null;
15     static ResultSet res = null;
16     
17 
18     public static void dataBase() {
19         try {
20             Class.forName(driver);
21             con = DriverManager.getConnection(url, ""+ Const.DB_UserName +"", ""+ Const.DB_Password +"");
22         } catch (ClassNotFoundException e) {
23             System.err.println("装载 JDBC/ODBC 驱动程序失败。");
24             e.printStackTrace();
25         } catch (SQLException e) {
26             System.err.println("无法连接数据库");
27             e.printStackTrace();
28         }
29     }
30     
31     /**
32      * 查询SQL方法
33      * @param sql
34      * @return
35      * @throws SQLException
36      */
37     public static ResultSet find(String sql) throws SQLException{//对数据库进行数据查询
38         //获得连接
39         dataBase();
40         st=con.createStatement();
41         try {
42             res=st.executeQuery(sql);
43             return res;
44         } catch (SQLException e) {
45             e.printStackTrace();
46             return null;
47         }
48         
49     }
50     /**
51      * SQL删除修改
52      * @param sql
53      * @return
54      * @throws SQLException
55      */
56     public static boolean update(String sql) throws SQLException{//对增删改
57         //获得连接
58         dataBase();
59         st = con.createStatement();
60         try {
61             st.executeUpdate(sql);
62             return true;
63         } catch (SQLException e) {
64             e.printStackTrace();
65             return false;
66         }
67     }
68 
69 }


3. 如何调用DB

String sql = "update hr_staff_policy set HolidayPolicy = 3  where staffno ='0092'";
boolean result = DBHelper.update(sql);
Assert.isTrue(result);
System.out.println("SQL执行结果为:" +DBHelper.update(sql));

 

4. 效果图:

 

框架如何增加JDBC


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

 

进入sqljdbc4.jar包所在的位置,cmd运行以下命令(即在我们的project 的\lib路径下)

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

安装成功之后就可以在pom中引用sqljdbc依赖了。(已经加好上传了)


五、 优化后的代码
 
  1 import java.sql.Connection;
  2 import java.sql.DriverManager;
  3 import java.sql.ResultSet;
  4 import java.sql.ResultSetMetaData;
  5 import java.sql.SQLException;
  6 import java.sql.Statement;
  7 import java.util.ArrayList;
  8 
  9 import org.apache.logging.log4j.LogManager;
 10 import org.apache.logging.log4j.Logger;
 11 
 12 import com.pensee.config.Const;
 13 
 14 public class DBHelper {
 15     private static final Logger logger = LogManager.getLogger(DBHelper.class);
 16     
 17     static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
 18     static String url = "jdbc:sqlserver://"+ Const.DB_URL +";DatabaseName="+ Const.DB_DatabaseName +"";
 19      
 20     private static Connection getDBConnection() {
 21         Connection con = null;
 22         try {
 23             Class.forName(driver);
 24             con = DriverManager.getConnection(url, ""+ Const.DB_UserName + "", ""+ Const.DB_Password +"");
 25         } catch (ClassNotFoundException e) {
 26             logger.error("装载 JDBC/ODBC 驱动程序失败。");
 27         } catch (SQLException e) {
 28             logger.error("无法连接数据库");
 29         }
 30         return con;
 31     }
 32     
 33     private static void closeConnection(Connection con) {
 34         try {
 35             con.close();
 36         } catch (SQLException e) {
 37             ;
 38         }
 39     }
 40     
 41     /**
 42      * 查询SQL方法
 43      * @param sql
 44      * @return
 45      * @throws SQLException
 46      */
 47     public static ArrayList<String> query(String sql) throws SQLException{//对数据库进行数据查询
 48         //获得连接
 49         Connection con = getDBConnection();
 50         Statement st = con.createStatement();
 51         ResultSet res;
 52         try {
 53             res = st.executeQuery(sql);
 54         } catch (SQLException e) {
 55             throw new RuntimeException("查询失败: " + sql);
 56         }  
 57         ArrayList<String> result = new ArrayList<String>();
 58         while(res.next()) {
 59             ResultSetMetaData rsmd = res.getMetaData();
 60             int columnCount = rsmd.getColumnCount();
 61             for (int i=0;i<columnCount;i++) {
 62                 result.add(res.getString(i+1));
 63             }
 64         }
 65         closeConnection(con);
 66         return result;        
 67     }
 68     /**
 69      * SQL删除修改
 70      * @param sql
 71      * @return
 72      * @throws SQLException
 73      */
 74     public static void updateDB(String sql) throws SQLException{//对增删改
 75         //获得连接
 76         Connection con = getDBConnection();
 77         Statement st = con.createStatement();
 78         int recordsNo = st.executeUpdate(sql);
 79         if(recordsNo == 0) {
 80             throw new RuntimeException("执行失败: " + sql);
 81         } else if(recordsNo == 1){
 82             logger.info("更新成功1条: " + sql);
 83         } else {
 84             logger.info("更新成功条数: " + recordsNo);
 85         }
 86         closeConnection(con);
 87     }
 88     
 89     //存在数据的时候更新,不存在的时候不需要更新,影响数据行数为0或者1
 90     public static void updateDBIfExist(String sql) throws SQLException{//对增删改
 91         //获得连接
 92         Connection con = getDBConnection();
 93         Statement st = con.createStatement();
 94         int recordsNo = st.executeUpdate(sql);
 95         logger.info("更新成功的record数量 " + recordsNo);   
 96         closeConnection(con);
 97     }
 98     
 99     public static void deleteVacationBalance(String code, String staffId) throws SQLException {
100         String sql = "DELETE lb FROM Leave_Balance lb LEFT JOIN Leave_Code lc ON lc.id = lb.LeaveCode_id "
101                 + "WHERE lc.LeaveBenefitCode ='" + code + "' and taffno ='" + staffId + "'";
102         updateDB(sql);
103     } 
104     
105     /**
106      * 删除历史组织架构
107      * @param code
108      * @param staffId
109      * @throws SQLException
110      */
111     public static void deleteHistoryOrganzationalStructure(String hisname) throws SQLException {
112         String sql = "DELETE FROM Org_DataType WHERE NAME='" + hisname + "'";
113         updateDB(sql);
114     } 
115     
116     /**
117      * 取得员工工号,该员工没有卡,用于case E-653
118      * @return
119      * @throws SQLException
120      */
121     public static String getStaffNoWithoutCard() throws SQLException {
122         String sql = "SELECT ac.staffNo FROM At_Card ac INNER JOIN hr_Staff hs ON ac.StaffNo = hs.StaffNo "
123                 + "WHERE ac.No = ''  AND hs.StaffType  = 'Active'";
124         String id = query(sql).get(0);
125         String sqlDelete = String.format("DELETE ap  FROM At_PunchClockInfo ap INNER JOIN At_Card ac ON ap.At_Card_id = ac.Id "
126                 + "WHERE ac.StaffNo ='%s'", id);
127         updateDB(sqlDelete);
128         return id;
129     }
130 }

 

六: jenkins配置增加JDBC

posted @ 2017-11-25 14:56  vame  Views(1159)  Comments(0Edit  收藏  举报