根据mooc 数据库旧代码 实现剥离数据库链接单独成类,并进行测试

news2024/11/15 21:24:16

数据源详情链接,SQLserver 2019 代码复制粘贴可产生数据 

 数据库JDBC 查询sqlserver 2019 利用模板实现输入查询-CSDN博客

效果如下

剥离的链接模块

 Slinkv2.java

package SQLadd;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import com.microsoft.sqlserver.jdbc.ISQLServerPreparedStatement;
import java.sql.PreparedStatement;

//对比给的BaseDao后发现每次增删查改都会进行链接,于是进行剥离,把链接部分摘出,形成Slinkv2类

public class Slinkv2 {
//	分离字符串
	
	private String drivername="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	private String url="jdbc:sqlserver://localhost:1433;DatabaseName=cyz;encrypt=true;trustServerCertificate=true";
	private String userName="sa";
	private String userPassWord="sa";
	private Connection conn=null;
//	链接数据库,在每次增删查改时使用
	public Connection getConnection() {
		try {
//			通过名称获取一个类,注释掉会报错在 catch 部分的链接失败,显示没有定义要抓取的错误
			Class.forName(drivername);
//			提取conn 
//			Connection conn=DriverManager.getConnection(url);
			conn=DriverManager.getConnection(url,userName,userPassWord);
		}
		catch(ClassNotFoundException e){
//			syso +alt键+/出自动补全
			System.out.println("驱动找不到");
			e.printStackTrace();
		}
		catch(SQLException e) {
			System.out.println("数据库链接失败");
			e.printStackTrace();
		}
		return conn;
	}
//	关闭数据库链接
	public void closeAll(Connection conn,Statement stmt,ResultSet rs) {
		try {
			if(rs!=null) {
				rs.close();
			}
			if(stmt!=null) {
				stmt.close();
			}
			if(rs!=null) {
				rs.close();
			}
		}catch(Exception e) {
			System.out.println("关闭失败");
			e.printStackTrace();
		}
	}
}
//后面的是原版 slink ,在改写过程中挤到下面了
//	
//	public static void main(String[] args) {
//		
//		
		Scanner scanner=new Scanner(System.in);
		String choose = scanner.next();
		System.out.println(choose);
//		
//		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			Class.forName(drivername);
//			Connection con =DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=cyz;encrypt=true;trustServerCertificate=true","sa","sa");
			System.out.println("数据库链接成功\n");
//			
//			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("use cyz SELECT bno, rbdate FROM borrow WHERE bno = 332211 ");
//			
//			
//            String sql="select * from borrow where bno=?";
//            
//            PreparedStatement pst=con.prepareStatement(sql);
//            pst.setString(1,choose);
//            ResultSet rsv2=pst.executeQuery();
//			
			? 问号被设定为参数
			String sql="SELECT bno,rbdate FROM borrow WHERE bno =?";
			设定为模板,其中(ISQLServerPreparedStatement) 是强制类型转换
            ISQLServerPreparedStatement pst=(ISQLServerPreparedStatement) con.prepareStatement(sql);
            pst.setString(1,"332211");
            第一个问号替换为字符串choose
            pst.setString(1,choose);
           执行查询
            ResultSet rsv2=pst.executeQuery();
			
//            
//            while(rsv2.next()) {
//				System.out.println(rsv2.getString("bno")+"\t"+rsv2.getString("rbdate")+"\t");
//			}
            while(rsv2.next()) {
				System.out.println(rsv2.getString("bno")+"\t"+rsv2.getString("rbdate")+"\t");
			}
//			
			while(rs.next()) {
				System.out.println(rs.getString("bno")+"\t"+rs.getString("rbdate")+"\t");
			}
//			System.out.println("读取完毕");
//			stmt.close();
//			con.close();
//		}
//		catch(ClassNotFoundException e) {
//			System.out.println("驱动找不到");
//			e.printStackTrace();
//		}catch(SQLException e) {
//			System.out.println("数据库链接不成功");
//			e.printStackTrace();
//		}
		try { 
			 //加载数据驱动
			Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			Connection con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=cyz;encrypt=true;trustServerCertificate=true","sa","sa");//库名,用户名,密码
			System.out.println("连接成功");
			
			Statement stmt = con.createStatement();// 创建SQL命令对象
			ResultSet rs = stmt.executeQuery("SELECT * FROM borrow");// 返回SQL语句查询结果集(集合)   表名
			// 循环输出每一条记录
			while (rs.next()) {
	              // 输出每个字段
	              System.out.println(rs.getString("bno") + "\t" + rs.getString("bno")+rs.getString("rbdate"));
			}
	          System.out.println("读取完毕");
	          // 关闭连接
	          stmt.close();// 关闭命令对象连接
	          con.close();// 关闭数据库连接
	          
		} catch (ClassNotFoundException e) {
			System.out.println("驱动找不到");
			e.printStackTrace();
		}catch (SQLException e) {
			System.out.println("数据库连接不成功");
			e.printStackTrace();
		}
//	}
    参考链接        
原文链接:https://blog.csdn.net/qq_46110556/article/details/116765473
//
//}

测试主函数

CheckMethod.java

package SQLadd;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class CheckMethod {
	
	public static void main(String[] args) {

		
		Scanner scanner = new Scanner(System.in);
		String choose = scanner.next();
		System.out.println(choose);
		
		Slinkv2 linkmanager = new Slinkv2();
		
		Connection con = linkmanager.getConnection();
//		自动补齐的
		try {
			Statement stmt = con.createStatement();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String sql = "select * from borrow where bno=?";

		PreparedStatement pst = null;
		try {
			pst = con.prepareStatement(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			pst.setString(1, choose);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		ResultSet rsv2 = null;
		try {
			rsv2 = pst.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			while (rsv2.next()) {
				System.out.println(rsv2.getString("bno") + "\t" + rsv2.getString("rbdate") + "\t");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("读取完毕");
		
//		关闭数据流动,实际是设置为 null 来标记为空
		linkmanager.closeAll(con, pst, rsv2);
		
	}
}
//		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			Connection con = DriverManager.getConnection(
					"jdbc:sqlserver://localhost:1433;DatabaseName=cyz;encrypt=true;trustServerCertificate=true", "sa",
					"sa");
			System.out.println("数据库链接成功\n");
			新增这一条,发现有数据检测不到exception,于是之间禁用excetion,表现为全部注释掉,重新提取,去除意外检测模块
//			Connection con = linkmanager.getConnection();
//
//			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("use cyz SELECT bno, rbdate FROM borrow WHERE bno = 332211 ");
//
//			String sql = "select * from borrow where bno=?";
//
//			PreparedStatement pst = con.prepareStatement(sql);
//			pst.setString(1, choose);
//			ResultSet rsv2 = pst.executeQuery();
//
			? 问号被设定为参数
			String sql="SELECT bno,rbdate FROM borrow WHERE bno =?";
			设定为模板,其中(ISQLServerPreparedStatement) 是强制类型转换
            ISQLServerPreparedStatement pst=(ISQLServerPreparedStatement) con.prepareStatement(sql);
            pst.setString(1,"332211");
            第一个问号替换为字符串choose
            pst.setString(1,choose);
           执行查询
            ResultSet rsv2=pst.executeQuery();
			
//
//			while (rsv2.next()) {
//				System.out.println(rsv2.getString("bno") + "\t" + rsv2.getString("rbdate") + "\t");
//			}
            while(rsv2.next()) {
				System.out.println(rsv2.getString("bno")+"\t"+rsv2.getString("rbdate")+"\t");
			}
//
			while(rs.next()) {
				System.out.println(rs.getString("bno")+"\t"+rs.getString("rbdate")+"\t");
			}
//			System.out.println("读取完毕");
			stmt.close();
			con.close();
//		} catch (ClassNotFoundException e) {
//			System.out.println("驱动找不到");
//			e.printStackTrace();
//		} catch (SQLException e) {
//			System.out.println("数据库链接不成功");
//			e.printStackTrace();
//		}
//	}
//    参考链接        
//原文链接:https://blog.csdn.net/qq_46110556/article/details/116765473

//}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS-内网搭建FTP-Server

一、镜像选择 1、 Centos-everting或者DVD 2、7.5 7.6 7.9 均可 二、安装步骤 1、其余步骤和普通安装一致。 2、最重要的一步为“软件选择” 1、勾选FTP、文件以及存储服务器、性能以及开发工具。 三、FTPServer搭建 1、关闭防火墙 systemctl stop firewalld or 通过21和20…

PS教程系统17

橡皮擦工具 主要配合画笔工具来使用 选择画笔工具新建图层试验擦除线条 如果直接在背景图片上进行擦除 会有背景颜色补充 背景橡皮擦 将其白色背景擦除掉shift相关键,进行工作区域切换吸取样点一次采样、两次采样连续、不连续等功能 在进行涂擦的过程一…

为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加,市场竞争越来越激烈,传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识,在数字化的进程中,中小企业首要考虑生存问题,不能…

通过ClangFormat进行格式设置时出现错误

1、打开工具->选项 2、文本编辑器->C/C->格式设置->启动ClangFormat支持(去掉勾选)

六种图算法的python实现

六种图算法的python实现 1. Prim 算法 基本原理 Prim算法是一种求解最小生成树的贪心算法。所谓最小生成树,就是对于给定的连通图,找到一棵包含所有顶点的树,且树上所有边的权重之和最小。Prim算法从一个顶点开始,每次选择与当…

[CUDA编程] cuda graph优化心得

CUDA Graph 1. cuda graph的使用场景 cuda graph在一个kernel要多次执行,且每次只更改kernel 参数或者不更改参数时使用效果更加;但是如果将graph替换已有的kernel组合,且没有重复执行,感觉效率不是很高反而低于原始的kernel调用…

使用fvm切换flutter版本

切换flutter版本 下载fvm 1、dart pub global activate fvm dart下载fvm 2、warning中获取下载本地的地址 3、添加用户变量path: 下载地址 终端查看fvm版本 fvm --version 4、指定fvm文件缓存地址 fvm config --cache-path C:\src\fvm(自定义地址&…

北京多商入驻app开发项目的主要优势及功能

多商入驻app开发项目的定义 随着电子支付技术的不断成熟,全国各地的消费者通过网络在线上购物的频率越来越高,为此,多商入驻app开发项目应用而生。各商家也纷纷开始申请入驻商城平台,开设自己的店铺。 图片来源:unspl…

【Ardiuno】实验使用ESP32单片机连接Wifi(图文)

ESP32单片机最为精华和有特色的地方当然是wifi连接,这里我们就写程序实验一下适使用ESP32主板连接wifi,为了简化实验我们这里只做了连接部分,其他实验在后续再继续。 由于本实验只要在串口监视器中查看结果状态即可,因此电路板上…

Ubuntu server 24 (Linux) lvm 动态扩容磁盘空间

1 查看磁盘信息 sudo fdisk -l 2 查看lvm分区信息 sudo lvdisplay 3 扩展逻辑卷 sudo lvextend -l 100%FREE /dev/ubuntu-vg/ubuntu-lv 4 刷新逻辑卷 sudo resize2fs /dev/ubuntu-vg/ubuntu-lv 5 查看磁盘信息 df -h

[Shell编程学习路线]——编制第一个shell脚本入门篇

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月12日10点23分 🀄️文章质量:93分 目录 ——前言—— 💥常用的几种shell Bash Sh …

【吊打面试官系列-Mysql面试题】什么是通用 SQL 函数?

大家好,我是锋哥。今天分享关于 【什么是通用 SQL 函数?】面试题,希望对大家有帮助; 什么是通用 SQL 函数? 1、CONCAT(A, B) – 连接两个字符串值以创建单个字符串输出。通常用于将两个或多个字段合并为一个字段。 10…

40V/1A 步进电机驱动芯片SS6810R兼容BD68610

SS6810R是一款功能丰富的PWM电流驱动的双极低功耗电机驱动集成芯片,其工作电压范围:10V~40V;有两路H桥驱动,输出40V/1A;具有较大的输出能力和多种保护功能。它适用于各种电机驱动应用,能够提供稳…

Apollo9.0 PNC源码学习之Control模块(三)

本文将对Apollo的纵向控制器进行讲解,看完本文,你将会对百度Apollo的纵向控制有更深的理解 前面文章: Apollo9.0 PNC源码学习之Control模块(一) Apollo9.0 PNC源码学习之Control模块(二) 1 纵向…

c语言回顾-函数递归

1.递归的介绍 1.1什么是递归 递归是指在一个函数的定义中调用自身的过程。简单来说,递归是一种通过重复调用自身来解决问题的方法。 递归包括两个关键要素:基本情况和递归情况。基本情况是指当问题达到某个特定条件时,不再需要递归调用&am…

6.7.32 用于计算机辅助检测和诊断研究的精选乳房 X 线摄影数据集

由于在乳房 X 线摄影决策支持系统领域缺乏标准的评估数据集,已发表的研究结果很难复制;大多数乳房 X 线摄影中乳腺癌的计算机辅助诊断 (CADx) 和检测 (CADe) 算法都是在私人数据集或公共数据库的未指定子集上进行评估的。这导致无法直接比较方法的性能或…

MyBatis插件机制介绍与原理

插件简介 什么是插件 插件是一种软件组件,可以在另一个软件程序中添加功能或特性。插件通常被设计成可以 随时添加或删除 的,而不影响 主程序 的功能。插件可以 扩展 软件程序的功能,这让用户可以根据自己的需求定制软件,提高工作…

flutter报错You are currently using Java 1.8

flutter报错Could not run phased build action using connection to Gradle distribution ‘https://services.gradle.org/distributions/gradle-7.6.3-all.zip’.\r\norg.gradle.api.ProjectConfigurationException: A problem occurred configuring root project ‘android’…

物联网安全的优秀实践以及七种策略

大多数物联网安全漏洞都是可以预防的,甚至可能是全部。看看任何引人注目的物联网攻击,都会发现一个已知的安全漏洞。 2019年的Ring智能摄像头漏洞?用户可以创建弱密码并跳过多因素身份验证。2021年的Verkada监视服务攻击?该公司的系统中有太多的超级管…

SAP SO定价上面2个ZPR1 其中一个不活跃

查看价格表 取定价的时候排除不活动的 即可