首页
归档
友链
关于
Search
1
网易云音乐黑胶会员月月免费赠送
3,339 阅读
2
十年之约RSS聚合订阅服务上线
2,754 阅读
3
工资发放日的区别
2,468 阅读
4
rsyslogd内存占用过高解决方案
2,323 阅读
5
Nginx反代MinIO后,上传文件签名异常
2,169 阅读
零碎
标本
码海
工具
其他
登录
Search
标签搜索
北京
摄影
生活
Java
旅行
学习笔记
教程
Linux
服务器
软件
SpringBoot
日记
Windows
服务
数据库
福利
Spring
系统
SQL
docker
萧瑟
累计撰写
195
篇文章
累计收到
1,355
条评论
首页
栏目
零碎
标本
码海
工具
其他
页面
归档
友链
关于
搜索到
195
篇与
萧瑟
的结果
2023-05-07
再见,我的大玩具
时隔一年,陪伴我一年的大玩具也离开了我,自从入了摩友圈,经常刷抖音看到,各种摩友博主惨淡离世,我家小可爱也每每提醒我要慢点。所以经过思索,把这个车转手卖了,总里程不到6000公里。买家也很实在,差不多1.3W收了我的22款魅影255S,而我新的石油版画也才贴不就,真是可惜了。过户其实也很简单,买方觉得繁琐,后来找了黄牛,花了450,如果自己去办的话,差不多300左右就能解决。卖完车后,群里的小伙伴也经常喊我去跑山踏春。车卖了不到一周,又去车行看了看车,原本想入手川崎400,谁知钱包羞涩,跟小可爱谈了谈,最后入手了蒙娜丽莎melalisa150,这个踏板我家小可爱也是可以骑的,算是双赢。这次入手的是火星灰/黄这款,极限速度能跑到105km/h,买车当天车直接骑走了,车行直接去拿了个临牌。简单记录一下,作为生活中的流水账。
2023年05月07日
386 阅读
44 评论
2023-04-28
Java 使用JDBC备份数据库中的表和数据
实现思路加载数据库驱动程序并建立数据库连接。使用JDBC API查询需要备份的表格和数据。在输出文件中以适当的格式编写SQL语句来创建表格。用适当的格式编写INSERT语句将行数据写入输出文件。5. 关闭所有数据库连接和输出文件。实现代码package com.yanqingshan.admin.jdbc; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.io.FileWriter; import java.io.IOException; import java.sql.*; import java.util.ArrayList; import java.util.List; /** * 通过JDBC备份 库表数据 * * @author yanqs * @date 2023年04月28日 9:31 */ @Slf4j @SpringBootTest class BuildSql { @Test void testBuildSql() throws ClassNotFoundException, SQLException, IOException { String dbUrl = "jdbc:mysql://192.168.57.110:3306/boot-startup"; String username = "test"; String password = "123456"; // 加载JDBC驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立数据库连接 Connection conn = DriverManager.getConnection(dbUrl, username, password); // 创建Statement对象 Statement stmt = conn.createStatement(); // 查询所有表格名字 ResultSet result = stmt.executeQuery("SHOW TABLES"); // 备份的SQL文件 FileWriter writer = new FileWriter("backup.sql"); // 循环遍历所有表 存表 List<String> tableNameList = new ArrayList<>(); while (result.next()) { tableNameList.add(result.getString(1)); } for (String tableName : tableNameList) { log.info("开始备份“{}”表结构", tableName); // 在输出文件中写入创建表格SQL语句 ResultSet rs = stmt.executeQuery("SHOW CREATE TABLE " + tableName); if (rs.next()) { writer.write("\n\n" + rs.getString(2) + ";\n\n"); } // 循环遍历表格中的所有行来写入数据 rs = stmt.executeQuery("SELECT * FROM " + tableName); int columnCount = rs.getMetaData().getColumnCount(); log.info("开始生成“{}”表数据", tableName); while (rs.next()) { writer.write("INSERT INTO " + tableName + " VALUES ("); for (int i = 1; i <= columnCount; i++) { writer.write("'" + rs.getString(i) + "'"); if (i < columnCount) { writer.write(","); } } writer.write(");\n"); } } // 关闭所有连接 writer.close(); result.close(); stmt.close(); conn.close(); log.info("备份完成"); } }实现效果
2023年04月28日
182 阅读
4 评论
2023-04-23
Java+Selenium学习笔记
Selenium介绍Selenium是一个用于Web应用程序自动化测试工具,背后有google 维护源代码,支持全部主流浏览器,支持主流的编程语言,包括:java,Python,C#,PHP,Ruby等特点开源、免费多浏览器支持:FireFox、Chrome、IE、Opera、Edge;多平台支持:Linux、Windows、MAC;多语言支持:Java、Python、Ruby、C#、JavaScript、C++;对Web页面有良好的支持;简单(API 简单)、灵活(用开发语言驱动);支持分布式测试用例执行。chromeDriver驱动下载:http://chromedriver.storage.googleapis.com/index.html下载的驱动要和自己安装的谷歌浏览器版本相互匹配项目依赖包最新版可以在mvnrepository查找,链接如下<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>${selenium.version }</version> </dependency> 使用手册1 导航1.1 打开网页driver.get("https://www.baidu.com") driver.navigate.to("https://www.baidu.com") // 区别:get是有逻辑的跳转,而navigate.to是直接跳转到该页面,没有任何逻辑 // 参考:https://blog.csdn.net/gaokao2011/article/details/171699691.2 获取当前页面url//返回的是字符串 String url = driver.getCurrentUrl(); //https://www.baidu.com System.out.println(url); 1.3 返回上一页driver.navigate.back();1.4 前进下一页面driver.navigate.forward();1.5 刷新当前页面driver.navigate.refresh();1.6 获取当前页面的titleString title = driver.getTitle(); //返回字符串 System.out.println(title); //百度一下,你就知道2 窗口、Tabs当driver打开一个新窗口时,若想操作新窗口上的元素,则需要将driver切换到新窗口2.1 获取当前窗口句柄//返回字符串 String currentWindowHandle = driver.getWindowHandle();2.2 获取所有窗口句柄//返回字符串集合 Set<String> allWindowHandles = driver.getWindowHandles(); 2.3 切换到新窗口//newHandle为要切换的新窗口的句柄 driver.switchTo().window(newHandle); 2.4 关闭窗口或tabsdriver.close();2.5 会话结束时退出浏览器driver.quit();3 Frames and IFrames当页面上有iframe和frame元素时,若想操作iframe和frame下的html元素,则需要切换driver3.1 切换到指定iframe或frameWebElement element_iframe = driver.findElement(By.id("iframe1")); driver.switchTo().frame(element_iframe);3.2 切换回父页面driver.switchTo().defaultContent();4 window管理4.1 获取窗口大小int width = driver.manage().window().getSize().getWidth(); int height = driver.manage().window().getSize().getHeight(); Dimension size = driver.manage().window().getSize(); int width = size.getWidth(); int height = size.getHeight();4.2 设置窗口大小driver.manage().window().setSize(new Dimension(1024,768));4.3 获取窗口位置int x = driver.manage().window().getPosition().getX(); int y = driver.manage().window().getPosition().getY(); Point position = driver.manage().window().getPosition(); int x = position.getX(); int y = position.getY();5 设置窗口5.1 设置窗口位置driver.manage().window().setPositon(new Point(0,0));5.2 最大化窗口driver.manage().window().maximize();5.3 全屏窗口driver.manage().window().fullscreen();6 定位driver.find 或 element.findfindElement(By.id("XXX")) findElement(By.name("XXX")) findElement(By.className("XXX")) findElement(By.cssSelector("XXX")) findElement(By.linkText("XXX")) findElement(By.partialLinkText("XXX")) findElement(By.tagName("XXX")) findElement(By.xpath("XXX")) findElements(By.id("XXX")) findElements(By.name("XXX")) findElements(By.className("XXX")) findElements(By.cssSelector("XXX")) findElements(By.linkText("XXX")) findElements(By.partialLinkText("XXX")) findElements(By.tagName("XXX")) findElements(By.xpath("XXX"))7 执行js脚本//声明一个js执行器 JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("alert(123)");
2023年04月23日
191 阅读
0 评论
2023-03-22
癸卯年甲寅月塞北之旅
偶然间看到12306铁路会员还有100多会员积分要到期了,准备换张周边火车票,来场说走就走的旅行,考虑了几个地方,天津去了好几趟,石家庄没什么玩的地方,张家口滑雪又怕摔,想来初春可以去草原逛逛。就定了去乌兰察布的行程。{dplayer src="https://blog.yanqingshan.com/usr/upload/2023/03/20230305.mp4"/}在“马蜂窝”上看到乌兰察布有火山,景色也不错。但是交通不是很方便,就准备了租车玩耍,行程攻略写了一些,然后就因为工作繁忙,没有下文了,每次都说走就走,不要攻略也罢,走到那算那。乌兰察布内蒙古有条火山喷发带:北起大兴安岭北段东坡的诺敏河火山群,经大兴安岭的阿尔山—柴河火山群、锡林浩特—阿巴嘎火山群,南抵察哈尔右翼后旗的乌兰哈达火山群,绵延近千公里,其中乌兰哈达火山群直到2012年才被国内外火山学界所知。这条火山带最突出的特点就是年轻:从第四纪的晚更新世(大约12万年前)才进入活动鼎盛期。但其实,这个火山带的大多数火山都喷发于距今4万—6万年前。尤其可贵的是,其中一些火山喷发于全新世,即距今一万年前,在这里甚至还发现了喷发于两千年前的火山。{callout color="#ef584d"}PS:来这里建议自驾,因为交通不便,租车也比较便宜。{/callout}沿着草原一路前行,翻过几座山,就来到了呼和浩特。呼和浩特塞上老街位于呼和浩特市大南街大召寺附近,是条具有明清建筑风格的古街。其兴建于明万历年间的大召,门前西侧有一条横街,立了牌楼,名为塞上老街。老街其实不老,塞上老街是市政府花两年时间重新修缮,体现历史文化名城亮点的一条街道。因为是晚上去的,吃了一些小吃,逛了逛,人并不是很多。羊肉串口感也不错。旁边就是大召寺,但是晚上关门了,也就没去看看,听说很宏伟。第二天就去了内蒙古博物馆,这个是全区唯一的自治区级综合性博物馆,也是全国少数民族地区最早建立的博物馆。内蒙古博物馆的展厅大楼造型别致,极具民族特色;楼顶塑有凌空奔驰的骏马,象征着内蒙古的吉祥与腾飞,是自治区标志性建筑之一。博物院的展厅大楼有四层,其中二、三、四层用于展览服务。院内目前有四个基本陈列,分别是《内蒙古古生物化石陈列》、《内蒙古历史文物陈列》、《内蒙古民族文物陈列》、《内蒙古革命文物陈列》。下午就着手回京了,两天一夜内蒙之旅到此完结,等再过段时间,再去逛逛大草原,吃上一只烤全羊,应该会更爽。
2023年03月22日
216 阅读
16 评论
2023-03-14
癸卯年初春安四路跑山小记
春天即将到来,天气也逐渐暖和起来了,喊上“京魅摩友小分队”一起踏春跑山。简单分享一下周末骑行之旅,两天大概跑了200公里。银山塔林(220311)银山塔林位于北京昌平区安四路,因岩壁色黑如铁,山上积雪如银,又称为铁壁银山,主峰最高处为726米,虽然海拔不高,但是山型陡峭,山道弯折坡度较陡,景区内最著名的景点是塔林,塔林大多建议辽、金时期,有喇嘛塔也称为覆钵塔,还有密檐塔。银山塔林位于京城正北,是国务院公布的全国重点文物保护单位,也是八达岭、十三陵风景名胜区的重点文物景点。银山——因秋去冰雪层积而得名,又因山岩陡峭,岩壁色黑如铁,称为“铁壁”,合称“银山铁壁”。为明清时期“燕京八景”之一。据考证,辽代于山前建有宝岩寺,金天会三年(公元1125年)改建为大延圣寺。寺内有金代密檐式砖塔五座,元代喇嘛塔两座,寺外山麓上也建造了许多形制各异的僧塔,是为银山塔林。银山南麓有众多古塔立于峡谷之间,最壮观的是华禅寺内的金代佛塔。 现在只剩下七座比较大的佛塔,矗立在山脚下。安四路 观景台
2023年03月14日
477 阅读
19 评论
2023-02-18
svn迁移git仓库教程
项目交付、版本管理工具变更等情况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等。git自带了从svn迁移至git的工具命令,可很好的对svn上的提交历史做迁移和映射,操作简单方便。但是初次接触不熟练,这里做一个总结和记录,内容尽量简单化。争取提供给刚刚接触git和准备迁移的用户一个简单易懂的方案。迁移流程图迁移教程这里分为两步来说明,第一步是比较简单迁移要件准备,已经准备好的用户可直接略过,直接进入第二步进行迁移操作。第一步:准备工作:① svn项目(SvnProject)地址及访问此svn项目权限账号: 地址:https://mytest.cn/svn/project/Example/ SvnProject / 账号:test/test@123② git新建一个仓库(如:GitProject)存放迁移项目 远程仓库地址:https://192.165.22.33/migrate/GitProject 账号/密码: my_test/mytest@123③ 待迁移svn项目有过提交记录的用户清单:如果具备①的svn账号又没有svn管理员权限,可以通过导出所有提交历史并用代码提取一下用户清单(开发人员都懂,不赘述)。获取到的用户清单为user1,user2,user3。创建文件users.txt,按如下格式存入svn账号与git账号的映射关系,“=”前为svn账号,“=”号后为git账号,尖括号为git用户的邮箱,尖括号及邮箱可无。注:如果有些用户已经离职了,其账号在git中没有,这里依然可以映射至不存在的git用户。如果SVN用户未全部列举,执行迁移时会报如下错误:报这个错误时可简单粗暴删除文件夹重新导出即可。④ :电脑上安装git客户端,客户端下载地址:https://www.git-scm.com/download/下载后安装客户端,安装及配置参考:https://blog.csdn.net/u013295518/article/details/78746007第二步:数据迁移一:导出svn记录到本地在你存放users.txt的同级目录新建一个文件,命名为你的项目名:GitProject右键文件空白处,单击Git Bash Here在bash界面,输入git拷贝命令:git svn clone https://mytest.cn/svn/project/Example/MyProject/ --no-metadata --authors-file=users.txt GitProject参数说明:git svn clone 是Git的迁移命令https://mytest.cn/svn/project/Example/MyProject/是svn服务器地址,注意需要到迁移项目的根目录一级--no-metadata 参数去除了svn上很多杂乱的参数信息,保留了清晰简洁的提交记录信息。-file=users.txt 为你的用户映射文件夹;GitProject是刚刚新建的空白项目名文件夹第一次操作,会多次要求账号密码:请注意每次提示信息,第一次密码输入是操作系统的用户密码,第二次为svn账号和密码,第三次为git的账号密码。注意按提示输入。第三步:关联git远程仓库执行cd GitProject进入迁移项目路径下:执行:git remote add origin git@192.165.22.33:migrate/GitProject.git后即已关联远程git仓库,执行可查看关联情况git remote –v未关联时:关联成功后:如果关联错了,可以使用 git remote rm origin删除错位关联后重新关联即可 git remote rm origin第四步:提交记录至gitsvn项目中的所有提交记录和历史版本都已经导出本地并关联了远程仓库,现在只需要将这些记录推送至远程仓库即可。执行git push -u origin master命令输入后需要输入git账号\密码执行成功后,就完成了整个迁移过程。登录git网站,可以看到空白仓库中多了很多提交记录和文件。引用资料:svn 迁移至git操作手册github推送项目常见错误fatal: remote origin already exists0Git 与其他系统 - Git 与 Subversion
2023年02月18日
208 阅读
4 评论
2023-02-12
Navicat Premium 16无限试用教程
Navicat Premium 16 Windows版无限试用教程,本文脚本为技术探索,请勿牟利!!! 请支持正版!!!
2023年02月12日
456 阅读
5 评论
2023-01-23
壬寅年元旦京魅摩友小分队白瀑寺骑行之旅
前言元旦约上京都魅影内小分队的摩友一起开启2023年第一次骑行,我们沿着南雁路一起西行,前往白瀑寺,开启元旦一日游。旅途风景{dplayer src="https://blog.yanqingshan.com/usr/upload/2023/01/2023010104_720p.mp4"/}后记人生坎坷,风雨,永不停息。努力拼搏,战胜自我,无怨无悔。
2023年01月23日
353 阅读
16 评论
2022-12-26
Vue集成OnlyOffice组件实现在线预览
最近有个项目需要预览上传的附件(如:PDF、Excel、Word 等),且效果要好,Vue 插件中也有对应的插件:表格使用 xlsx 、文档使用 docx-prrview 、pdf 则使用 iframe 内嵌网页实现,公司的 OA 也是这样实现的,但是效果极差,之前使用 zfile 搭建私有网盘发现了一个 OnlyOffice 组件,实属不错,刚好对接一下,实现了附件预览。
2022年12月26日
1,294 阅读
1 评论
2022-12-22
Java mybatis中#和$的区别
在mybatis中#和$的主要区别是:#传入的参数在SQL中显示为字符串,$传入的参数在SqL中直接显示为传入的值. #方式能够很大程度防止sql注入,$方式无法防止Sql注入; 1、传入的参数在SQL中显示不同#传入的参数在SQL中显示为字符串(当成一个字符串),会对自动传入的数据加一个双引号。例:使用以下SQLselect id,name,age from student where id =#{id} 当我们传递的参数id为 "1" 时,上述 sql 的解析为: select id,name,age from student where id ="1"$传入的参数在SqL中直接显示为传入的值例:使用以下SQLselect id,name,age from student where id =${id} 当我们传递的参数id为 "1" 时,上述 sql 的解析为: select id,name,age from student where id =12、#可以防止SQL注入的风险(语句的拼接);但$无法防止Sql注入。3、$方式一般用于传入数据库对象,例如传入表名。4、大多数情况下还是经常使用#,一般能用#的就别用$;但有些情况下必须使用$,例:MyBatis排序时使用 order by 动态参数时需要注意,用$而不是#。
2022年12月22日
87 阅读
0 评论
1
...
5
6
7
...
20