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 方法
package com.pensee.utils; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.pensee.config.Const; public class DBHelper {
static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
static String url = "jdbc:sqlserver://"+ Const.DB_URL +";DatabaseName="+ Const.DB_DatabaseName +"";
static Connection con = null;
static Statement st = null;
static ResultSet res = null; public static void dataBase() {
try {
Class.forName(driver);
con = DriverManager.getConnection(url, ""+ Const.DB_UserName +"", ""+ Const.DB_Password +"");
} catch (ClassNotFoundException e) {
System.err.println("装载 JDBC/ODBC 驱动程序失败。");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("无法连接数据库");
e.printStackTrace();
}
} /**
* 查询SQL方法
* @param sql
* @return
* @throws SQLException
*/
public static ResultSet find(String sql) throws SQLException{//对数据库进行数据查询
//获得连接
dataBase();
st=con.createStatement();
try {
res=st.executeQuery(sql);
return res;
} catch (SQLException e) {
e.printStackTrace();
return null;
} }
/**
* SQL删除修改
* @param sql
* @return
* @throws SQLException
*/
public static boolean update(String sql) throws SQLException{//对增删改
//获得连接
dataBase();
st = con.createStatement();
try {
st.executeUpdate(sql);
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
} }
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>
mvn install:install-file -Dfile=sqljdbc4.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0
安装成功之后就可以在pom中引用sqljdbc依赖了。(已经加好上传了)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import com.pensee.config.Const; public class DBHelper {
private static final Logger logger = LogManager.getLogger(DBHelper.class); static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
static String url = "jdbc:sqlserver://"+ Const.DB_URL +";DatabaseName="+ Const.DB_DatabaseName +""; private static Connection getDBConnection() {
Connection con = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, ""+ Const.DB_UserName + "", ""+ Const.DB_Password +"");
} catch (ClassNotFoundException e) {
logger.error("装载 JDBC/ODBC 驱动程序失败。");
} catch (SQLException e) {
logger.error("无法连接数据库");
}
return con;
} private static void closeConnection(Connection con) {
try {
con.close();
} catch (SQLException e) {
;
}
} /**
* 查询SQL方法
* @param sql
* @return
* @throws SQLException
*/
public static ArrayList<String> query(String sql) throws SQLException{//对数据库进行数据查询
//获得连接
Connection con = getDBConnection();
Statement st = con.createStatement();
ResultSet res;
try {
res = st.executeQuery(sql);
} catch (SQLException e) {
throw new RuntimeException("查询失败: " + sql);
}
ArrayList<String> result = new ArrayList<String>();
while(res.next()) {
ResultSetMetaData rsmd = res.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i=0;i<columnCount;i++) {
result.add(res.getString(i+1));
}
}
closeConnection(con);
return result;
}
/**
* SQL删除修改
* @param sql
* @return
* @throws SQLException
*/
public static void updateDB(String sql) throws SQLException{//对增删改
//获得连接
Connection con = getDBConnection();
Statement st = con.createStatement();
int recordsNo = st.executeUpdate(sql);
if(recordsNo == 0) {
throw new RuntimeException("执行失败: " + sql);
} else if(recordsNo == 1){
logger.info("更新成功1条: " + sql);
} else {
logger.info("更新成功条数: " + recordsNo);
}
closeConnection(con);
} //存在数据的时候更新,不存在的时候不需要更新,影响数据行数为0或者1
public static void updateDBIfExist(String sql) throws SQLException{//对增删改
//获得连接
Connection con = getDBConnection();
Statement st = con.createStatement();
int recordsNo = st.executeUpdate(sql);
logger.info("更新成功的record数量 " + recordsNo);
closeConnection(con);
} public static void deleteVacationBalance(String code, String staffId) throws SQLException {
String sql = "DELETE lb FROM Leave_Balance lb LEFT JOIN Leave_Code lc ON lc.id = lb.LeaveCode_id "
+ "WHERE lc.LeaveBenefitCode ='" + code + "' and taffno ='" + staffId + "'";
updateDB(sql);
} /**
* 删除历史组织架构
* @param code
* @param staffId
* @throws SQLException
*/
public static void deleteHistoryOrganzationalStructure(String hisname) throws SQLException {
String sql = "DELETE FROM Org_DataType WHERE NAME='" + hisname + "'";
updateDB(sql);
} /**
* 取得员工工号,该员工没有卡,用于case E-653
* @return
* @throws SQLException
*/
public static String getStaffNoWithoutCard() throws SQLException {
String sql = "SELECT ac.staffNo FROM At_Card ac INNER JOIN hr_Staff hs ON ac.StaffNo = hs.StaffNo "
+ "WHERE ac.No = '' AND hs.StaffType = 'Active'";
String id = query(sql).get(0);
String sqlDelete = String.format("DELETE ap FROM At_PunchClockInfo ap INNER JOIN At_Card ac ON ap.At_Card_id = ac.Id "
+ "WHERE ac.StaffNo ='%s'", id);
updateDB(sqlDelete);
return id;
}
}
六: jenkins配置增加JDBC

Java如何连接SQLServer,并实现查询、修改、删除方法的更多相关文章
- sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)
sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器) 我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instanc ...
- mysql 数据库 添加查询 修改 删除
cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据) 一 查看数据库.表.数据字段.数据 1 首先配置环境变量 进入mysql 或者通过一键集成工具 打开mysql命令行 ...
- navicate premium连接sqlserver时报08001错误的解决方法
---恢复内容开始--- navicate premium连接sqlserver时报08001错误的解决方法 1.自己一直使用navicate连接sqlserver,但是自从自己的电脑安装了sqlse ...
- spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
spring boot 使用jpa在pom.xml在上文中已经介绍过.在这里直接介绍各个类文件如何编写: 代码结构: domain(存放实体类文件): repository(存放数据库操作文件,相当于 ...
- java实现连接mysql数据库单元测试查询数据项目分享
1.按照javaweb项目的要求逐步建立搭建起机构,具体的类包有:model .db.dao.test;具体的架构详见下图: 2.根据搭建的项目架构新建数据库test和数据库表t_userinfo并且 ...
- java JDBC连接 Sqlserver 非默认的实例名问题
一般我们在连接数据库的时候都是用的默认实例名,今天遇到了用非默认是实例名:连接代码如下(Java): <property name="url" value="jdb ...
- SQLSERVER sa 用户密码修改的方法
本次驱动人生病毒的收获 . 偷懒总会有报应. . 应用(数据库或者是web应用nginx等.)都不要使用最高级别权限用户来使用 虽然这样的环境问题最少. . 密码还是需要定期更换的,虽然有成本,但是也 ...
- Java代码操作properties文件(读取,新增/修改,删除)
项目中需要用到操作properties文件中的数据,记录一下 package com.bonc.savepic.save; import java.io.FileNotFoundException; ...
- 解决mysql表不能查询修改删除等操作并出现卡死
问题现象1:进程wait卡住 测试环境mysql出现了一个怪表:select查询表卡死,alter修改表卡死,甚至我不想要这个表了,delete.truncate.drop表都卡死卡主了...... ...
随机推荐
- 【GMT43智能液晶模块】例程九:RTC实验——时钟显示
实验原理: STM32的实时时钟(RTC)是一个独立的定时器,有一组连续计数的 计数器,通过软件来对其进行相关的配置,可以提供时钟功能,通过修改计 数器的的值,可以调整时钟.最终通过emWin在显示屏 ...
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-9底层驱动之USART
视频简介:该视频介绍iCore3应用开发平台中RTC的基本配置方法以及在应用开发平台中RS-232, RS-485,RS-232的硬件实现方法. 源视频包下载地址:链接:http://pan.baid ...
- html5——canvas画布
一.基本介绍 1,canvas是画布,可以描画线条,图片等,现代的浏览器大部分都支持. canvas的width,height默认为300*150,要指定画布大小,不能用css样式的widh,heig ...
- ubuntu14.04 中virtual box 加入 usb
参考两篇文章: 1.http://www.cnblogs.com/ericsun/archive/2013/06/10/3130679.html 2.http://www.360doc.com/con ...
- 1分钟了解MyISAM与InnoDB的索引差异
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/z50L2O08e2u4afToR9A/article/details/82111747 <数据 ...
- 仿迅雷播放器教程 -- 基于VLC的C++播放器 (4)
经过前面的介绍,想必大家对VLC和ffmpeg都有一定印象了,还记得学习ffmpeg多么蛋疼吗?那么VLC会不会也这么蛋疼呢? 那么我们来看一段官方的Demo,Alberl精简了Demo,只留 ...
- mybatis 传入多个参数
一.单个参数: public List<XXBean> getXXBeanList(@param("id")String id); <select id=&quo ...
- centos7.0 yum 安装php服务器
https://blog.csdn.net/jiaoshenmo/article/details/50923900 首先收一下:centos7.0用yum直接安装apache.php他们的默认版本是a ...
- Linux设备驱动剖析之Input(一)
前言 以前在移植Qt到开发板上时只知道在配置文件中需要指定触摸屏的设备文件/dev/input/event0,仅此而已.直到一年半前突然想到用红外遥控器控制Tiny6410开发板上的Android系统 ...
- [原]openstack-kilo--issue(二十二) 虚拟机的vnc console图像调用错误
[问题点] 在打开node compute 上vm的vnc console窗口时候发现vm1-compute1调用的是vm1-controller上的vnc图像 =================== ...