首页
留言板
友链
关于
Search
1
内测“合金弹头”嘿嘿
896 阅读
2
Nginx搭建一个简易的图床
847 阅读
3
Kettle循环遍历结果集作为参数传入转换
824 阅读
4
Apache Dubbo初步认识
437 阅读
5
Maven3.3.9的安装与配置
436 阅读
知识库
好奇猫
日常说
笔记本
登录
/
注册
Search
标签搜索
maven
Spring
vue
Java
Java代码
前端
idea
帆软
MySQL
git
CSS
游戏
Bootstrap
生活
网上冲浪
邮件配置
说说
Nginx
Excel
数据库调优
龙流
累计撰写
61
篇文章
累计收到
18
条评论
首页
栏目
知识库
好奇猫
日常说
笔记本
页面
留言板
友链
关于
搜索到
61
篇与
龙流
的结果
2021-10-09
数据库连接池介绍
为什么使用连接池? 连接数据库使用的TCP协议,每次连接需要进行"三次握手"非常耗时,所以产生了连接池需求。程序一开始就创建一定数量的连接,放在一个容器中,这个容器称为连接池(相当于碗柜/容器)。使用的时候直接从连接池中取一个已经创建好的连接对象。关闭的时候不是真正关闭连接,而是将连接对象再次放回到连接池中。连接池使用: Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。(eg:需遵循统一的规则,这样应用程序可以方便的切换不同厂商的连接池!)常见的第三方连接池:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0是异步操作的,所以一些操作时间过长的JDBC通过其它的辅助线程完成。目前使用它的开源项目有Hibernate,Spring等。C3P0有自动回收空闲连接功能阿里巴巴-德鲁伊druid连接池:Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求。DBCP(DataBase Connection Pool)数据库连接池,是Apache上的一个Java连接池项目,也是Tomcat使用的连接池组件。dbcp没有自动回收空闲连接的功能。使用步骤:1. C3P0连接池使用导入jar包 (两个)c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar拷贝配置文件到src目录创建连接池(配置文件自动读取的)编写配置文件 c3p0-config.xml最后数据库本身的驱动jar包不要忘记了,这里用的是mysql-connector-java-5.1.37-bin.jar<c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day19</property> <property name="user">root</property> <property name="password">root</property> <!-- 连接池参数 --> <property name="initialPoolSize">5</property> </default-config> </c3p0-config>c3p0连接池常用的配置参数:参数说明initialPoolSize初始连接数maxPoolSize最大连接数checkoutTimeout最大等待时间maxIdleTime最大空闲回收时间编写Java代码/** * C3P0连接池的工具类 * */ public class C3P0Utils { //1. 创建一个C3P0的连接池对象(会自动读取src目录下的c3p0-config.xml,所以不需要我们解析配置文件) public static DataSource ds = new ComboPooledDataSource(); //2. 提供 从连接池中 获取连接对象的方法 public static Connection getConnection() throws SQLException { Connection conn = ds.getConnection(); return conn; } //3. 提供 获得数据源(连接池对象)的方法 public static DataSource getDataSource(){ return ds; } }2. Druid连接池使用Druid的下载地址:https://github.com/alibaba/druidDRUID连接池使用的jar包:`druid-1.1.16.jar步骤:导入DRUID jar 包拷贝配置文件到src目录根据配置文件 创建连接池对象从连接池对象获得连接编写配置文件druid.properties, 放在src目录下driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/day19 username=root password=root编写Java代码/** * 阿里巴巴的连接池 Druid 工具类 */ public class DruidUtils { /* 1. 加载 druid.properties 配置文件 2. 创建 Druid 连接池对象 3. 提供 获得 连接池对象的方法 4. 提供 从连接池中 获取连接对象Connection的 方法 */ public static DataSource ds = null; static { try { //1. 加载 druid.properties 配置文件 InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties"); Properties prop = new Properties(); prop.load(is); //2. 创建 Druid 连接池对象 ds = DruidDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } /* 3. 提供 获得 连接池对象的方法 */ public static DataSource getDataSource(){ return ds; } /* 4. 提供 从连接池中 获取连接对象Connection的 方法 */ public static Connection getConnetion() throws SQLException { Connection conn = ds.getConnection(); return conn; } }
2021年10月09日
222 阅读
0 评论
0 点赞
2021-09-30
小米笔记本怎么样(仅限小米笔记本电脑Pro15.6 2019款)
先说下使用感受:糟糕,真的很糟糕!首先电脑看一下电脑配置:然后说一下毛病: 大毛病一: 电脑使用好好的老是会蓝屏,系统没有问题,它奇怪的点是蓝屏后只需要强制关机重新正常启动就正常了,日志信息说是检测不到内存条;我以为是内存条松了或是金手指接触不良,拆机处理过还是会出现蓝屏,没办法这个问题它是不固定的会出现,所以继续使用留意最近几次出现问题时的情况,我怀疑是负荷太大时会导致内存条温度骤升,然后就导致内存条不工作就蓝屏了,重新启动它就又好了。。。 毛病二: 系统卡死!卡死最多的情况是在操作文件夹,反正我是很多时候使用右键文件夹想弹出操作菜单栏时它就一直转圈圈,最后一直等待可能会好,就是页面上所有的窗口都突然被强制关闭,也会就一直卡死鼠标还能正常操作其它应用。。。这个问题不知道是不是Windows系统的锅,系统bug几次被折磨没有什么损失的时候都是忍忍使用,想重装系统觉得备份代价太大,一是不想画精力去整理电脑文件,二是系统是出厂预装的正版激活windows 10 家庭中文版心里有这个官方渠道疙瘩病,不想去动目前正在验证这两个问题的原因!记录一下,最后个人感受,小米的产品力有待提升,选品慎重考虑!下图看下小米笔记本与联想笔记本做工(ps:联想的外观不喜欢但系统没怎么出过毛病,小米的外观比较符合我的审美,做工也看到舒服;但好看不实用那肯定不行滴,咱也不能当花瓶啊)
2021年09月30日
144 阅读
0 评论
0 点赞
2021-09-15
Java基础
Java基础包括但不限于{collapse}{collapse-item label="1、基本数据类型" open}学习java基本数据之前先清楚了解计算机存储单元与存储设备的最小信息单元的区别?在计算机中无论是硬盘还是内存,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写字母'b'表示。存储单元:计算机中最基本的存储单元叫“字节(byte)”,通常用大写字母'B'表示,一个字节是由连续的8个位组成。 除字节外还有一些常见的存储单位,其换算单位如下: 1B(字节) = 8bit 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1024GBjava中的基本数据类型数据类型关键字内存占用取值范围整数byte1-128~127整数short2-32768~32767整数int4-2的31次方到2的31次方-1整数long8-2的63次方到2的63次方-1浮点float4负数:-3.402823E+38到-1.401298E-45 正数: 1.401298E-45到 3.402823E+38浮点double8负数:-1.797693E+308到-4.9000000E-324 正数:4.9000000E-324 到 1.797693E+308字符char20-65535布尔boolean1true,false说明:e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。在java中整数默认是int类型,浮点数默认是double类型。基本数据类型转换 在Java中,一些数据类型之间是可以相互转换的。分为两种情况:自动类型转换和强制类型转换。自动类型转换:把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可。例如:double num = 10; // 将int类型的10直接赋值给double类型 System.out.println(num); // 输出10.0强制类型转换:把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量;例如:double num1 = 5.5; int num2 = (int) num1; // 将double类型的num1强制转换为int类型 System.out.println(num2); // 输出5(小数位直接舍弃){/collapse-item}{collapse-item label="2、什么是常量/变量"} 变量的定义 变量:在程序运行过程中,其值可以发生改变的量。从本质上讲,变量是内存中的一小块区域,其值可以在一定范围内变化。 常量的定义 常量:在程序运行过程中,其值不可以发生改变的量。Java中的常量分类:字符串常量 用双引号括起来的多个字符(可以包含0个、一个或多个),例如"a"、"abc"、"中国"等整数常量 整数,例如:-10、0、88等小数常量 小数,例如:-5.5、1.0、88.88等字符常量 用单引号括起来的一个字符,例如:'a'、'5'、'B'、'中'等布尔常量 布尔值,表示真假,只有两个值true和false空常量 一个特殊的值,空值,值为null除空常量外,其他常量均可使用输出语句直接输出 使用变量时的注意事项在同一对花括号中,变量名不能重复。变量在使用之前,必须初始化(赋值)。定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容{/collapse-item}{/collapse}
2021年09月15日
109 阅读
0 评论
0 点赞
2021-09-14
FTP文件同步监控 CSV数据分析拆分多个
概述{dotted startColor="#ff6c6c" endColor="#1989fa"/}{x}通过properties配置两个FTP服务器,可以同步某个文件夹内容{x}实现FileAlterationListener监控文件夹文件新增/改变{x}通过后缀筛选文件类型{x}apache.commons包获取FTP连接客户端{x}net.sourceforge.javacsv包操作scv文件pom文件1、首先建议养成先配置日志的习惯 <!-- 日志工具包 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.10.0</version> </dependency> <!--日志核心包--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.10.0</version> </dependency> <!--slf4j的log4j实现类--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.9.1</version> </dependency> <!--程序运行的时候检测用了哪种日志实现类--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>2.9.1</version> </dependency> 2、使用到的工具包 <!--功能强大,操作文件,FTP连接--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.3</version> </dependency> <!--快速读取和生成CSV文件--> <dependency> <groupId>net.sourceforge.javacsv</groupId> <artifactId>javacsv</artifactId> <version>2.0</version> </dependency>public class ITransferImpl implements ITransfer { @Override public void transferInner(String fromAccount, String outAccount, BigDecimal amount) { //使用java的JDBC //1、注册驱动 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Connection connection = null; //Statement statement = null; try { //2、获取连接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root"); //3、执行SQL对象 // statement = connection.createStatement(); } catch (SQLException e) { e.printStackTrace(); } //4、查询转出账户余额是否大于转出金额 BigDecimal amount1 = null; String fromAccountSQL = "SELECT amount from ACCOUNT where accountid = ?"; try { PreparedStatement preparedStatement = connection.prepareStatement(fromAccountSQL); preparedStatement.setString(1,fromAccount); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()){ amount1 = resultSet.getBigDecimal("amount"); if (amount.compareTo(amount1) == 1){ System.out.println("账户金额不足!"); return; } } //5、开启事务 connection.setAutoCommit(false); //6、更新转出账户余额 BigDecimal updateFromAccount = amount1.subtract(amount); String updateFromAccountSQL = "UPDATE ACCOUNT set amount = ? WHERE ACCOUNTID = ?"; PreparedStatement pps = connection.prepareStatement(updateFromAccountSQL); pps.setBigDecimal(1,updateFromAccount); pps.setString(2,fromAccount); pps.executeUpdate(); //7、更新转入账户余额 //7.1先查询转入账户余额 PreparedStatement ppsOut = connection.prepareStatement(fromAccountSQL); ppsOut.setString(1,outAccount); ResultSet resultSet1 = ppsOut.executeQuery(); BigDecimal amount2 = null; while (resultSet1.next()){ amount2 = resultSet1.getBigDecimal("amount"); } //7.2余额与转入额相加 BigDecimal updateOutAccount = amount2.add(amount); PreparedStatement ppsOutAccount = connection.prepareStatement(updateFromAccountSQL); //ppsOutAccount.setBigDecimal(1,updateOutAccount); ppsOutAccount.setString(2,outAccount); ppsOutAccount.executeUpdate(); //8、提交事务 connection.commit(); //9、关闭连接 connection.close(); } catch (SQLException e) { e.printStackTrace(); } } }
2021年09月14日
377 阅读
1 评论
0 点赞
2021-09-14
记录1万条数据插入耗时
记录下1万条记录插入耗时:近5分钟,受不了受不了然后:1、该死d,Toad for db2工具找不到怎么执行sql脚本2、粘入2万条数据会造成Toad for db2内存溢出
2021年09月14日
277 阅读
2 评论
0 点赞
2021-09-09
19年“投资”显卡大赚,懂的都懂~
哎,今天一下和朋友提到的了我的显卡,就点到了现在的显卡价格!一看那是真不得了了感觉贵的离谱。。。不过懂的都懂。显卡呢我其实不太了解,就大学的时候想玩玩吃鸡于是的就自己配置了一个台式机,只大概知道吃鸡对显卡有点要求,我又想能流畅玩但是呢又穷,所以就在价格限制的情况下买了个盈通的RX580 8G显存,那个时候19年3月价格999!当时同时加入我购物车的还有几款价位差不多的GTX1060 3G显存版价格也是1100好像,而GTX1060 6G显存版就是1500了,超预算了就看了看算了。感觉在当时我们很多人都是比较喜欢N卡的,N卡打游戏好,其实我当时也挺纠结的,不过最后为什么选的是RX580呢?原因是它是8G显存,我个人觉得8G显存应该会比3G显存好...哈哈哈 好了,回归正题。说到现在的显卡价格,我就去某二手平台上瞅了瞅,它喵的现在RX580二手的价格都是2300+当前成交价已经是2600了,而某宝上二手价格是3000!! 看到这里,我觉得我“发”了,朋友们是不是到了该出手的时候了(ps:我现在不打游戏,一直在哪里闲置这在hhhhhh){dotted startColor="#ff6c6c" endColor="#1989fa"/}{gird column="2" gap="15"}{gird-item} {/gird-item}{gird-item} {/gird-item}{/gird}
2021年09月09日
141 阅读
0 评论
0 点赞
2021-08-18
“葵花宝典”——持续更新
{collapse}{collapse-item label="两种动态代理的区别?" }回答要点:1、动态代理的作用2、动态代理的特点3、动态代理的分类4、两种动态代理的使用要求1、不改变原代码的情况下,增强方法2、动态代理的特点,字节码随用随创建,随用随加载3、4、基于接口的动态代理(JDK动态代理):由JDK官方提供要求:被代理类最少实现一个接口涉及类:Proxy创建代理对象的方法:newProxyInstance方法中的参数:ClassLoader:类加载器。 负责加载代理对象的字节码。 和被代理对象使用相同的类加载器。固定写法。 Class[]:字节码数组。 负责让生成的代理对象具有和被代理对象相同的方法。写什么要看被代理对象是一个接口还是一个实现类。 如果是一个接口: new Class[]{接口字节码} 如果是一个实现类:XXX.getClass().getInterfaces();固定写法 InvocationHandler:一个接口,需要我们提供该接口的实现。 作用是用于对方法增强。 增强的代码,谁用谁写。写的是一个接口的实现类。 通常是一个匿名内部类,但是不绝对。 基于子类的动态代理(CGlib动态代理):由cglib第三方提供要求:需要导入cglib的坐标。被代理类不能是最终类。(不能被final修饰)涉及类:Enhancer创建代理对象的方法:create方法中的参数:Class:字节码对象。 用于加载代理对象字节码的。 写的是被代理对象的字节码。是固定写法Callback:如何代理。提供增强代码的。它是个接口,需要自己写实现。 该接口没有方法,需要用它的子接口MethodInterceptor 应用场景1、基于aop思想的方法增强。2、自定义连接池中,实现Connection的close方法还回池中操作3、解决tomcat8.5以下全站中文乱码,get和post两种提交方式的。在get方式需要对以下三个方法增强,用于解决乱码: String value = getParameter(String name); String[] value = getParameterValues(String name); Map<String,String> map = getParameterMap();{/collapse-item}{collapse-item label="IOC和DI的关系" }1、技术介绍2、应用场景IOC(控制反转)全称为: Inverse of Control。从字面上理解就是控制反转了,将在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。简单来说就是把本来在类内部控制的对象,反转到类外部进行创建后注入,不再由类本身进行控制,这就是IOC的本质。DI(依赖注入)全称为Dependency Injection,意思是自身对象中的内置对象是通过注入的方式进行创建。IOC和DI的关系ioc就是容器,di就是注入这一行为,那么di 确实就是ioc的具体功能的实现。而ioc则是di 发挥的平台和空间。所以说,ioc和 di即是相辅相成的搭档。最重要的是,他们都是为了实现解耦而服务的。DI是如何实现的?依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。应用场景例如:在生产实际中,一个类中会调用其他类的方法,一般情况(原始情况)下直接new创建类对象,但这种方法是需要开发人员自行维护二者的依赖关系,也就是说当依赖关系发生改变时需要修改代码并重新构建整个系统,这对公司业务而言是有损失的(重启需暂停服务,对用户而言难以接受)。这个时候就出现了IOC这一技术,如果通过一个容器来管理这些对象以及对象的依赖关系,则只需要在类A中定义好用于关联接口B的方法(接口B通过构造器或setter方法注入),将类A和接口B的实现类C放入容器中,通过对容器的配置来实现二者的关联。{/collapse-item}{collapse-item label="怎么对IOC容器的配置,管理IOC容器中的对象bean"}通过 Spring 提供的 IOC容器可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。一是通过xml配置文件的方式配置bean(使用标签)二是通过注解的方式配置bean(常用注解@Controller、@Service、@Repository、@Component)@Autowired注解,可以实现自动装配@Autowired private BookService bookservice;//等同于bookservice = ioc.getbean(BookService.class)依赖注入原理: (1)先按类型找: 找到一个就赋值; 没找到就报错; (2)找到多个按照属性名作为id名继续匹配–>找到就装配,找不到还是报错Tips:1)加@Qualifier表示用指定的变量名作为id名去找组件而非属性名了;2)默认通过@Autowired注解实现自动装配是一定要找到的,所有情况下找不到就会报错;3)@Autowired注解的required属性指定某个属性允许找不到还不报错@Autowired(required = false) private BookService bookservice;4)如果对一个数组或集合类型标注自动装配,则自动匹配类型兼容的所有bean组件5)@autowired和@resource都能实现自动装配,区别:@autowired–只能在spring框架里用@resource–j2ee的标准,扩展性更强Spring之IOC容器创建bean对象的XML配置总结{/collapse-item}{collapse-item label="Git使用重点" }Git版本控制,版本管理git本地仓库 删除文件git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop恢复。git reset --hard HASH #返回到某个节点,不保留修改。git reset --soft HASH #返回到某个节点。保留修改原文地址:http://www.pizida.com/git-rm.html{/collapse-item}{collapse-item label="EL与JSTL" }学习EL与JSTL不然首先要创建JSP,在JSP中:1、JSP指令 格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> - page:contentType -> 等同于response.setContentType() import -> 导包 errorPage -> 当前页面发生异常后跳转到指定页面 isErrorPage -> 标识当前页面是否是错误页面,默认为false。设置为true时,可以使用内置对象exception - include:设置包含某页面 - taglib:导入资源2、JSP内置对象 在JSP页面中不需要创建,直接使用的对象;一共有9个 - pageContext 当前页面共享数据,还可以获取其他八个内置对象 - request 一次请求访问的多个资源(转发) - session 一次会话的多个请求间 - application 所有用户间共享数据 - response 响应对象 - page 当前页面(Servlet)的对象 - out 输出对象,数据输出到页面上 - config Servlet的配置对象 - exception 异常对象3、EL - EL运算符:empty应用于判断字符串、集合、数组对象是否为null并且长度是否为0 ${empty list} - 获取值 **el表达式只能从域对象中获取值** 语法:${域名称.键名} 从指定域中获取指定键的值 - 对象属性的获取,其实将对象的getter和setter方法去掉前面的get和set, 然后大写字母变小写获得的值就是就可以用EL表达式${对象.属性}即可获得属性值 {gird column="2" gap="15"}{gird-item}{/gird-item}{gird-item}{/gird-item}{/gird}4、JSTL - JSP标准标签库; 用于简化和替换JSP页面上的java代码 - 首先需要导入jstl相关jar包 - 引入标签库:taglib指令 <%@ taglib uri="" %> - 常用JSTL标签 1、if :相当于java中的if 2、choose :相当于java中的witch 3、foreach :相当于java中的for循环{/collapse-item}{collapse-item label="IPV6使用案例" }通过IPV6直接访问NAS设备知乎教程亲测有效测试网络是否支持IPV6,访问IPV6测试网址检测是否能正常访问:test-ipv6.com从外网使用IPv6 ping一下自己:https://ipw.cn/ipv6ping/{/collapse-item}{/collapse}
2021年08月18日
149 阅读
0 评论
0 点赞
2021-07-25
MySQL处理Excel数据
了解一下-关于Excel神操作拿Excel当PhotoShop作画.Excel函数版bad apple.甚至用Excel编程...{bilibili bvid="BV1yC4y1a7Rz"/} Excel表格,对里面的数据进行比对和整理,首先不可能一个一个去修改去填写数据啊,利用函数啊或其他什么Excel功能我这三脚猫的Excel操作在满足不了需求啊,另辟蹊径把数据导入到MySQL数据库的形式进行数据操作,得到需要的数据在给领导。Excel数据导入MySQL数据库- 任何一个MySQL客户端(如:Navicat、SQLyog)都有导入向导,我用的是SQLyog 1. 在工具栏选择(高级工具->导入外部数据)会出现一个导入数据向导,直接点击下一步 2. 然后选择导入的文件是什么格式的,选择文件位置,再点下一步 3. 选择导入的数据库,默认是当前连接的数据库,所以直接下一步 4. 由于是从Excel表格导入数据,Excel中有列名,所以选择从数据源拷贝数据->下一步 5. source下对应的是Excel中的Shell名,勾选你需要导入的Shell数据;Destination选择导入的表,也可以直接以Excel数据为表,直接设置一个表名;Map设置Exce列与表字段映射关系;设置好后,就可以点击下一步 6. 后面都是点下一步,直到最后窗口日志,出现successful。最后完成效果图{gird column="2" gap="15"}{gird-item}{/gird-item}{gird-item}{/gird-item}{/gird}MySQL存储过程FETCH INFO与WHILE和LOOP的使用WHILE实现CREATE DEFINER=`root`@`localhost` PROCEDURE `P_GX_LZPI1_202`() BEGIN #Routine body goes here... DECLARE flag INT DEFAULT 0; DECLARE tab_num varchar(10); DECLARE curJob CURSOR FOR SELECT `表顺序号` FROM `冷轧pi系统字段1_202` GROUP BY `表顺序号`; # 溢出处理,查询是否有下一个数据,没有将标识设为1 DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1; OPEN curJob; # 取值设置到tab_num中 FETCH curJob INTO tab_num; # 使用while循环 WHILE flag != 1 DO # 主要操作过程 INSERT INTO `冷轧test` SELECT a.`机组号`, a.`机组中文名`, a.`工艺顺序号`, a.`工艺段`, a.`表顺序号`, a.`表名`, (@i:=@i+1) AS 字段顺序号, a.`字段名` , a.`字段中文名`, a.`是否需对齐` FROM `冷轧pi系统字段1_202` a,(SELECT @i:=0) AS it WHERE a.`表顺序号` = tab_num; # 把游标向后移一位 FETCH curJob INTO tab_num; # 结束循环 END WHILE; CLOSE curJob; ENDLOOP方式实现CREATE DEFINER=`root`@`localhost` PROCEDURE `P_GX_LZPI2_112`() BEGIN DECLARE tab_num VARCHAR(10); DECLARE done INT DEFAULT FALSE; DECLARE curJob CURSOR FOR ( -- 定义 SELECT `表顺序号` FROM `冷轧pi系统字段1_202` GROUP BY `表顺序号` ); DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 监听器 OPEN curJob; -- 打开游标 label:LOOP FETCH curJob INTO tab_num; IF done THEN LEAVE label; END IF; INSERT INTO `冷轧test` SELECT a.`机组号`, a.`机组中文名`, a.`工艺顺序号`, a.`工艺段`, a.`表顺序号`, a.`表名`, (@i:=@i+1) AS 字段顺序号, a.`字段名` , a.`字段中文名`, a.`是否需对齐` FROM `冷轧pi系统字段2_112` a,(SELECT @i:=0) AS it WHERE a.`表顺序号` = tab_num; END LOOP label; CLOSE curJob; -- 关闭游标 END
2021年07月25日
347 阅读
0 评论
0 点赞
2021-07-20
Nginx搭建一个简易的图床
Nginx下载官网,建议下载稳定版,我这里下载的是1.8.1(windows),linux版安装方法与之类似安装方法:直接解压到指定盘符即可,完成后可以看到一个nginx.exe的文件测试:双击nginx.exe文件,一个窗口一闪而过就属于在运行了,打开浏览器输入localhost回车,看到Welcome to Nginx就成功了怎么去搭建图床呢 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。 而图片呢就属于静态资源,用nginx来发布一些图片资源就很高效。### 实现过程: 打开nginx配置文件`conf/nginx.conf`,在server中添加如下配置。 **注意:配置多个location站点时,准确的目录使用alias属性** location /images/ { #指定图片存放路径 #root D:/Program_Files/nginx-1.8.1/images/;#(可以放在nginx文件夹路径里也可以放其他盘) alias F:/Project/itcast_health/images/; }保存上述配置文件,重启nginx。可以开始测试图片是否可以访问了我们在F:\Project\itcast_health\images目录下放一张111222.jpg图片然后打开浏览器,在地址栏输入localhost:8686/images/111222.jpg 回车即可查看效果延伸端口绑定(同时部署多个资源项目端口不同)上传2个(或更多)项目的独立目录到/usr/local/nginx下:index目录和regist目录修改nginx.conf配置文件:/usr/local/nginx/conf/nginx.conf#添加两个或多个server server { listen 81; # 监听的端口 server_name localhost; # 域名或ip location / { # 访问路径配置 root index;# 根目录 index index.html index.htm; # 默认首页 } error_page 500 502 503 504 /50x.html; # 错误页面 location = /50x.html { root html; } } server { listen 82; # 监听的端口 server_name localhost; # 域名或ip location / { # 访问路径配置 root regist;# 根目录 index regist.html; # 默认首页 } error_page 500 502 503 504 /50x.html; # 错误页面 location = /50x.html { root html; } }反向代理了解什么是:正向代理: 代理服务器明确知道去访问那个服务地址,然后再将数据返回给请求者反向代理:请求某项服务,首先会到达代理服务器,代理服务器根据一定的规则(eg:轮循规则)去访问服务器例如:正常访问一个项目时可以直接访问tomcat服务器,现在使用nginx作为反向代理把请求转发到tomcat,这样就可以部署tomcat集群,提升性能!实现: 打开nginx服务器配置文件 添加如下配置 upstream tomcat-travel{ server 192.168.177.129:8080; #被代理服务器的IP和端口 } server { listen 80; # 监听的端口 server_name www.hmtravel.com; # 域名或ip location / { # 访问路径配置 # root index;# 根目录 proxy_pass http://tomcat-travel; index index.html index.htm; # 默认首页 } }过程结构图负载均衡简单说就是在反向代理中的nginx服务器配置文件中配置多个目标服务器/tomcat。
2021年07月20日
847 阅读
1 评论
0 点赞
2021-07-09
vue子组件向父级(组件)传递数据
组件通信 子组件向父组件通信 案例:点击组件按钮,改变父级数据的值 父级数值为:{{num}} 引入子组件 总结:子组件与父组件去通信(传递数据),本质是子组件的方法绑定父组件的方法,通过方法传递参数到父组件的方法,方法返回的对象然后再传递给子组件 //定义组件 const operation = { template:` + - `, props:["num"], methods:{ //组件方法,去调用父方法实现数据通信 incrNum(){ return this.$emit("plus"); }, decrNum(){ return this.$emit("reduce"); } } }; var app = new Vue({ el:"#app", data:{ num:0 }, //注册组件时:组件的定义要在上面,否则会报错:找不到组件 components:{ operation:operation }, methods:{ numPlus(){ this.num++; }, numReduce(){ this.num--; } } }); <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>组件通信</title> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> </head> <body> <div id="app"> <h2>子组件向父组件通信</h2> <b>案例:</b>点击组件按钮,改变父级数据的值 <h2>父级数值为:{{num}}</h2> <hr> <b>引入子组件</b> <!--在实例中引入方法--> <operation @plus="numPlus" @reduce="numReduce" :num="num"></operation> <hr> <p>总结:子组件与父组件去通信(传递数据),本质是子组件的方法绑定父组件的方法,通过方法传递参数到父组件的方法,方法返回的对象然后再传递给子组件</p> <hr> </div> <script type="text/javascript"> //定义组件 const operation = { template:` <div> <!--vue模板中不允许同时出现两个根元素--> <button @click="incrNum">+</button> <button @click="decrNum">-</button> </div> `, props:["num"], methods:{ //组件方法,去调用父方法实现数据通信 incrNum(){ return this.$emit("plus"); }, decrNum(){ return this.$emit("reduce"); } } }; var app = new Vue({ el:"#app", data:{ num:0 }, //注册组件时:组件的定义要在上面,否则会报错:找不到组件 components:{ operation:operation }, methods:{ numPlus(){ this.num++; }, numReduce(){ this.num--; } } }); </script> </body> </html>
2021年07月09日
238 阅读
0 评论
0 点赞
1
...
4
5
6
7