JavaWeb笔记之JavaWeb JDBC
//Author 流云
//Version 1.0
一. 引言
1.1 如何操作数据库
1.2 实际开发中,不会采用数据库客户端操作
二. JDBC
2.1 介绍
2.2 核心思想
2.3 驱动包
2.4 常用类
2.5 环境搭建
三. 开发步骤
3.1 注册驱动
Class.forName("com.mysql.jdbc.Driver");//加载驱动
3.2 连接数据库
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/database?
useUnicode=true&characterEncoding=utf8", "root","1234");
3.3 获取执行对象
Statement statement = conn.createStatement();
3.4 执行SQL 语句
String sql ="INSERT INTO t_jobs(JOB_ID,JOB_TITLE,MIN_SALARY,MAX_SALARY)
VALUES('JAVA_Le','JAVA_Lecturer',4000,10000);";int result = statement.executeUpdate(sql);//执行SQL语句并接收结果
3.5 处理结果
if(result == 1){System.out.println("Success");
}
3.6 释放资源
statement.close();
conn.close();
3.7 综合案例
package com.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class DeleteJdbc {public static void main(String[] args) throws Exception{//1.加载驱动Class.forName("com.mysql.jdbc.Driver");//2.获得连接对象Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb","root","1234");//3.获得执行SQL的对象Statement statement = connection.createStatement();//4.执行SQL语句,并接收结果int result = statement.executeUpdate("delete from t_jobs where job_id = 'H5_mgr';");//5.处理结果if(result==1){System.out.println("删除成功!");}else{System.out.println("删除失败!");}//6.释放资源statement.close();connection.close();}
}
四. ResultSet
4.1 接收结果集
ResultSet rs= statement.executeQuery("SELECT * FROM t_employees;");
4.2 遍历结果集
boolean next() throws SQLException //判断 rs 结果集中下一行是否存在数据
4.2.1 遍历方法
int getInt(int columnIndex) throws SQLException //获得当前行第N列的int值
int getInt(String columnLabel) throws SQLException //获得当前行columnLabel列的int值double getDouble(int columnIndex) throws SQLException //获得当前行第N列的double值
double getDouble(String columnLabel) throws SQLException //获得当前行columnLabel列的double值String getString(int columnIndex) throws SQLException //获得当前行第N列的String值
String getString(String columnLabel) throws SQLException //获得当前行columnLabel列的String值......
4.3 综合案例
4.3.1 根据列名
package com.www.test;import java.sql.*;public class JobsQuery {public static void main(String[] args) {//1.加载驱动Class.forName("com.mysql.jdbc.Driver");//2.获取数据库连接对象Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/product", "root", "1234");//3.获取发送 sql 语句对象Statement statement = connection.createStatement();//4.执行 SQL 语句并接收结果集ResultSet resultSet = statement.executeQuery("select * from t_jobs");//5 处理结果集while(resultSet.next()){//5.1有数据,依据列名获取数据String job_id = resultSet.getString("job_id");String job_title = resultSet.getString("job_title");int min_salary = resultSet.getInt("min_salary");int max_salary = resultSet.getInt("max_salary");System.out.println(job_id+"\t"+job_title+"\t"+min_salary+"\t"+max_salary);}//6.释放资源rs.close();statement.close();connection.close();}
}
4.3.2 根据编号
//。。。。与上无异
while(resultSet.next()){//5.2有数据,依据列名获取数据String job_id = resultSet.getString(1);String job_title = resultSet.getString(2);int min_salary = resultSet.getInt(3);int max_salary = resultSet.getInt(4);System.out.println(job_id+"\t"+job_title+"\t"+min_salary+"\t"+max_salary);
}
//释放资源
五. 常见错误
六. 登录案例
6.1 创建表
6.2 实现登录
七. SQL注入
7.1 介绍
7.2 方案
八. PreparedStatement
8.1 应用
8.1.1 参数标记
//1.预编译 SQL 语句
PreparedStatement pstmt = conn.prepareStatement("select * from user where username=? and password=?");
8.1.2 动态参数绑定
//1.预编译 SQL 语句
PreparedStatement pstmt = conn.prepareStatement("select * from user where username=? and password=?");//2.为参数下标赋值
pstmt.setString(1,username);
pstmt.setString(2,password);
九. 封装工具类
9.1 重用性方案
9.1.1 实现
package com.jdbc;import java.sql.*;/**
* 重用性方案
* 获取连接
* 释放资源
*/public class DBUtils {static {//类加载,执行一次!try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}//1.获取连接public static Connection getConnection() {Connection connection = null;try {connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb", "root","1234");} catch (SQLException e) {e.printStackTrace();}return connection;}//2.释放资源public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {try {if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}} catch (SQLException e) {e.printStackTrace();}}
}
9.2 跨平台方案
9.2.1 实现
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb3
user=root
password=123456
package com.jdbc2;import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;public class DBUtils {private static final Properties PROPERTIES = new Properties();//存储配置文件的mapstatic {InputStream is = DBUtils.class.getResourceAsStream("/db.properties");try {PROPERTIES.load(is);//通过流,将配置文件内容加载到properties集合Class.forName(PROPERTIES.getProperty("driver"));} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() {Connection connection = null;try {connection = DriverManager.getConnection(PROPERTIES.getProperty("url"),PROPERTIES.getProperty("username"), PROPERTIES.getProperty("password"));} catch (SQLException e) {e.printStackTrace();}return connection;}public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {try {if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}} catch (SQLException e) {e.printStackTrace();}}
}
十. ORM
10.1 实体类
10.1.1 ORM应用
package com.www.test;public class T_Jobs {private String job_id;private String job_title;private int min_salary;private int max_salary;@Overridepublic String toString() {return "T_Jobs{" +"job_id='" + job_id + '\'' +", job_title='" + job_title + '\'' +", min_salary=" + min_salary +", max_salary=" + max_salary +'}';}public String getJob_id() {return job_id;}public void setJob_id(String job_id) {this.job_id = job_id;}public String getJob_title() {return job_title;}public void setJob_title(String job_title) {this.job_title = job_title;}public int getMin_salary() {return min_salary;}public void setMin_salary(int min_salary) {this.min_salary = min_salary;}public int getMax_salary() {return max_salary;}public void setMax_salary(int max_salary) {this.max_salary = max_salary;}public T_Jobs() {}public T_Jobs(String job_id, String job_title, int min_salary, int max_salary) {this.job_id = job_id;this.job_title = job_title;this.min_salary = min_salary;this.max_salary = max_salary;}
}
package com.www.test;import java.sql.*;public class JobsQuery {public static void main(String[] args) {Connection connection = null;Statement statement = null;ResultSet resultSet = null;String URL = "jdbc:mysql://localhost:3306/product";String user = "root";String password = "1234";try {//1.加载驱动Class.forName("com.mysql.jdbc.Driver");//2.获取数据库连接对象connection = DriverManager.getConnection(URL, user, password);//3.编写 SQL 语句String sql = "select * from t_jobs";//4.获取发送 sql 语句对象statement = connection.createStatement();//5.执行 SQL 语句并接收结果集resultSet = statement.executeQuery(sql);//5.1使用 while 循环判断下一行是否有数据while(resultSet.next()){//5.2有数据,依据列名获取数据String job_id = resultSet.getString(1);String job_title = resultSet.getString(2);int min_salary = resultSet.getInt(3);int max_salary = resultSet.getInt(4);//5.3 创建实体类对象T_Jobs t_jobs = new T_Jobs();//5.4 每列数据对应属性进行赋值t_jobs.setJob_id(job_id);t_jobs.setJob_title(job_title);t_jobs.setMin_salary(min_salary);t_jobs.setMax_salary(max_salary);System.out.println(t_jobs);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {try {//6.释放资源if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}} catch (SQLException e) {e.printStackTrace();}}}
}
十一. 数据访问对象
11.1 创建数据库
11.2 封装实体类
11.3 编写 DaoImpl 类
package com.person;import sun.awt.image.DataBufferNative;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/**
* 增、删、改、查单个、查所有
* 只做数据库访问操作!不参与逻辑判断
* 数据库一张表的访问的操作复用!
*/public class PersonDaoImpl {//新增public int insert(Person person){Connection connection = null;PreparedStatement preparedStatement = null;String sql = "insert into person(name,age,borndate,email,address) values(?,?,?,?,?);";try {connection = DBUtils.getConnection();preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,person.getName());preparedStatement.setInt(2,person.getAge());preparedStatement.setDate(3,null);preparedStatement.setString(4,person.getEmail());preparedStatement.setString(5,person.getAddress());int result = preparedStatement.executeUpdate();return result;} catch (SQLException e) {e.printStackTrace();}finally {DBUtils.closeAll(connection,preparedStatement,null);}return 0;}//修改public int update(Person person){Connection connection =null;PreparedStatement preparedStatement = null;String sql = "update person setname=?,age=?,borndate=?,email=?,address=? where id = ?";try {connection = DBUtils.getConnection();preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,person.getName());preparedStatement.setInt(2,person.getAge());preparedStatement.setDate(3,null);preparedStatement.setString(4,person.getEmail());preparedStatement.setString(5,person.getAddress());preparedStatement.setInt(6,person.getId());int result = preparedStatement.executeUpdate();return result;} catch (SQLException e) {e.printStackTrace();}finally {DBUtils.closeAll(connection,preparedStatement,null);}return 0;}//删除public int delete(int id){Connection connection = null;PreparedStatement preparedStatement = null;String sql = "delete from person where id= ?;";connection = DBUtils.getConnection();try {preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1,id);int result = preparedStatement.executeUpdate();return result;} catch (SQLException e) {e.printStackTrace();}finally {DBUtils.closeAll(connection,preparedStatement,null);}return 0;}//查单个public Person select(int id){Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;String sql = "select * from person where id = ?;";Person person = null;try {connection = DBUtils.getConnection();preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1,id);resultSet = preparedStatement.executeQuery();if(resultSet.next()){person = new Person();int pid= resultSet.getInt("id");String name = resultSet.getString("name");int age = resultSet.getInt("age");Date bornDate = resultSet.getDate("borndate");String email = resultSet.getString("email");String address = resultSet.getString("address");person.setId(pid);person.setName(name);person.setAge(age);person.setBornDate(bornDate);person.setEmail(email);person.setAddress(address);}return person;} catch (SQLException e) {e.printStackTrace();}finally {DBUtils.closeAll(connection,preparedStatement,resultSet);}return null;}//查所有public List<Person> selectAll(){Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;Person person = null;List<Person> personList = new ArrayList<>();try {connection = DBUtils.getConnection();preparedStatement = connection.prepareStatement("select * from person;");resultSet = preparedStatement.executeQuery();while(resultSet.next()){int pid= resultSet.getInt("id");String name = resultSet.getString("name");int age = resultSet.getInt("age");Date bornDate = resultSet.getDate("borndate");String email = resultSet.getString("email");String address = resultSet.getString("address");person = new Person(pid,name,age,bornDate,email,address);personList.add(person);}return personList;} catch (Exception e) {e.printStackTrace();}return null;}
}
十二. 三层架构
12.1 什么是三层
12.2 三层搭建
十三. 通用工具类
13.1通用DML
/**
* 将所有数据表的操作,抽离成一个公用的方法;
* @Param sql 语句
* @Param sql语句对应的参数
* @return
*/
public static boolean executeDML(String sql,Object... params){try {//获取连接Connection connection = getConnection();//获取预处理的对象PreparedStatement ps = connection.prepareStatement(sql);//设置参数if(null != params){for(int i = 0 ; i < params.length ; i++){//1:给占位符设置参数;2:获取参数ps.setObject(i+1,params[i]);}}int i = ps.executeUpdate();close(null,ps,connection);return i > 0;} catch (SQLException sqlException) {sqlException.printStackTrace();}return false;
}
13.2 通用DQL
/**
* 通用的查询;需要将我们的数据表信息,封装到List里面进行返回
* @param sql 查询语句
* @param cls 实体类的字节码对象
* @param params 查询语句里面的占位符
* @param <T> 实体类类型泛型
* @return 就是我们查询到的数据集合
*/public static <T> List<T> executeDQL(String sql, Class<T> cls , Object...params) {try {Connection connection = getConnection(); //获取连接//获取预处理sqlPreparedStatement preparedStatement = connection.prepareStatement(sql);//设置参数if(null != params){for(int i = 0 ; i < params.length ; i++){preparedStatement.setObject(i+1,params[i]);}}//执行查询 得到结果集ResultSet resultSet = preparedStatement.executeQuery();//获取元数据(我们的列名)ResultSetMetaData metaData = resultSet.getMetaData();//列的总数int columnCount = metaData.getColumnCount();//用来保存我们所有的表数据List<T> list = new ArrayList<T>();T t;//用来保存我们一条数据//遍历结果集while(resultSet.next()){ //每一行记录的遍历过程中t = cls.newInstance();//根据字节码文件,构建一个实体类的对象//获取所有列的数据for(int i = 1 ; i <= columnCount ; i++){//你的查询语句有时候有别名String columnLabel = metaData.getColumnLabel(i);//根据列名获取我们的记录Object object = resultSet.getObject(columnLabel);//需要将拿到的这一列的记录,放到t对象指定的属性里面;//需要拿到这个t对象的属性,然后赋值;//解决方案2: 如果Object是NULL没有必要设置了if(null != object){try {Field field = cls.getDeclaredField(columnLabel);//根据属性的名称通过反射获取他的属性对象field.setAccessible(true);field.set(t,object);} catch (NoSuchFieldException e) {//代表我们当前这个实体类里面,没有这个属性}}}//需要将t对象保存到listlist.add(t);}close(resultSet,preparedStatement,connection);return list;} catch (SQLException sqlException) {sqlException.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}return null;
}
13.3 Apache的DbUtils
13.3.1 简介
13.3.2 API
13.3.3 使用步骤
13.3.4 代码
package com.project.utils;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;/**
* 连接池工具类
*/public class DBUtils {private static DruidDataSource dataSource;static {Properties properties = new Properties();InputStream is = DBUtils.class.getResourceAsStream("/database.properties");try {properties.load(is);dataSource = (DruidDataSource)DruidDataSourceFactory.createDataSource(properties);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}// 返回一个数据源public static DataSource getDataSource(){return dataSource;}
}
package com.project.dao.impl;import com.project.dao.UserDao;
import com.project.entity.User;
import com.project.utils.DBUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;public class UserDaoImpl implements UserDao {//1.创建QueryRunner对象,并传递一个数据源对象private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());@Overridepublic int insert(User user) {Object[] params={user.getId(),user.getUsername(),user.getPassword(),user.getSex(),user.getEmail(),user.getAddress()};try {return queryRunner.update("insert into user(id,username,password,sex,email,address) values(?,?,?,?,?,?)",params);} catch (SQLException e) {e.printStackTrace();}return 0;}@Overridepublic int update(User user) {Object[] params={user.getUsername(),user.getPassword(),user.getSex(),user.getEmail(),user.getAdd ress(),user.getId()};try {return queryRunner.update("update user setusername=?,password=?,sex=?,email=?,address=? where id = ?",params);} catch (SQLException e) {e.printStackTrace();}return 0;}@Overridepublic int delete(int id) {try {return queryRunner.update("delete from user where id = ?",id);} catch (SQLException e) {e.printStackTrace();}return 0;}@Overridepublic User select(int id) {try {//把查询到的记录封装成 指定对象return queryRunner.query("select * from user where id = ?", newBeanHandler<User>(User.class), id);} catch (SQLException e) {e.printStackTrace();}return null;}/*** 查询所有* @return*/@Overridepublic List<User> selectAll() {try {return queryRunner.query("select * from user;",newBeanListHandler<User>(User.class));} catch (SQLException e) {e.printStackTrace();}return null;}
}
十四. 连接池
14.1 Druid
14.1.1 步骤
14.1.2 druid.properties
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mytest
username=root
password=123456
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 60000毫秒/1000等于60秒 -->
maxWait=5000
14.1.3 连接池工具类
public class DbUtils {//声明连接池对象private static DruidDataSource ds;static{//实例化配置对象Properties properties=new Properties();try {//加载配置文件内容properties.load(DbUtils.class.getResourceAsStream("druid.properties"));ds = (DruidDataSource)DruidDataSourceFactory.createDataSource(properties);} catch (IOException e) {e.printStackTrace();}}//获取连接对象public static Connection getConnection() {try {return ds.getConnection();} catch (SQLException e) {e.printStackTrace();}return null;}//释放资源。。
}
14.2 HikariCP
/*
一、主要配置
1、dataSourceClassName
这是DataSourceJDBC驱动程序提供的类的名称。请注意,如果您正在使用jdbcUrl“旧式”基于DriverManager的JDBC驱动程序配置,则不需要此属性 。 默认值:无
2、jdbcUrl
请注意,如果使用此属性,您仍然可以使用DataSource属性来配置您的驱动程序,实际上建议您使用URL本身中指定的驱动程序参数。 默认值:无
3、username
此属性设置从基础驱动程序获取连接时使用的默认身份验证用户名。
4、password
此属性设置从基础驱动程序获取连接时使用的默认身份验证密码。
*/
public static void main(String[] args) throws SQLException {HikariConfig hikariConfig = new HikariConfig();//设置urlhikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/mytest?characterEncoding=UTF-8");//数据库帐号hikariConfig.setUsername("root");//数据库密码hikariConfig.setPassword("123456");HikariDataSource ds = new HikariDataSource(hikariConfig);
}
十五 . 批处理
//如果保存1w条记录
String sql = "insert into userinfo(uname,upass) values(?,?)";
Connection connection = DBUtilPool.getConnectionByDruid();
long start = System.currentTimeMillis();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i = 0 ; i < 10000 ; i++){preparedStatement.setObject(1,"jack"+i);preparedStatement.setObject(2,"aaaa"+i);preparedStatement.addBatch(); //将当前的sql预编译好以后,加到批处理; 不会直接执行到数据库里面if(i % 500 == 0){preparedStatement.executeBatch(); //执行我们批处理preparedStatement.clearBatch(); //把上面的执行了,需要清空}
}
preparedStatement.executeBatch(); //最后一次进行批处理
long end = System.currentTimeMillis();
System.out.println("");
System.out.println(end-start);
十六. 事务
16.1 业务
16.2 service层
16.3 转账案例
BEGIN ;-- 代表我们开启了一个事务
UPDATE user_acount SET umoney = umoney-200 WHERE uname = 'jack';-- 断网了 断电了
UPDATE user_acount SET umoney = umoney+200 WHERE uname = 'rose';ROLLBACK -- 回滚事务(代表整个事务执行失败)
COMMIT; -- 提交事务
16.4 事务
16.5 转账事务案例
-- 默认提交事务
begin;
commit; -- 提交事务
rollback; -- 事务回滚//代码里面默认回滚事务
connection.setAutoCommit(false); //不自动提交事务
connection.commit();//提交事务
connection.rollback();//回滚事务
相关文章:

JavaWeb笔记之JavaWeb JDBC
//Author 流云 //Version 1.0 一. 引言 1.1 如何操作数据库 使用客户端工具访问数据库,需要手工建立连接,输入用户名和密码登录,编写 SQL 语句,点击执行,查看操作结果(结果集或受影响行数)。…...

pytorch网络的增删改
本文介绍对加载的网络的层进行增删改, 以alexnet网络为例进行介绍。 1. 加载网络 import torchvision.models as models alexnet models.alexnet(weightsmodels.AlexNet_Weights.DEFAULT) print(alexnet)2. 删除网络 在做迁移学习的时候,我们通常是在分类网络的…...
Tomcat (Linux系统)详解全集
点击标题进入对应模块学习,你也可以完全拿捏Tomcat! 1 Tomcat及JDK下载安装(Linux系统) 2 Tomcat目录介绍 3 Tomcat的启动关闭及日志说明 4 完美解决Tomcat启动慢的三种方法 5 Tomcat管理功能使用 6 Tomcat主配置文件(…...

[德人合科技]——设计公司 \ 设计院图纸文件数据 | 资料透明加密防泄密软件
国内众多设计院都在推进信息化建设,特别是在异地办公、应用软件资产规模、三维设计技术推广应用以及协同办公等领域,这些加快了业务的发展,也带来了更多信息安全挑战,尤其是对于以知识成果为重要效益来源的设计院所,防…...

数字化转型中的6S管理
在当今竞争激烈的制造业中,数字化转型已经成为企业保持竞争力和实现可持续发展的关键。科技的飞速发展,数字化已经成为推动制造业变革的引擎。在这个信息时代,数字化转型不仅仅是追求效率和成本节约的问题,更是企业在市场中生存和…...

Linux学习(1)——初识Linux
目录 一、Linux的哲学思想 1.1 基础知识 1.2 根目录下的文件夹 二、Shell 1、Shell的定义 2、Shell的作用 三、Linux命令行 1、Linux通用命令行使用格式 四、Linux命令的分类 1、内部命令和外部命令的理解 2、内部命令和外部命令的区别 3、命令的执行过程 五、编辑…...
2.5 - 网络协议 - HTTP协议工作原理,报文格式,抓包实战
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 HTTP协议 1、HTTP协议工作原理2、HTTP协议报文3、HTTP请求方法4、HTTP响应状态码5、…...

新增工具箱管理功能、重构网站证书管理功能,1Panel开源面板v1.9.0发布
2023年12月18日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.0版本。 在这一版本中,1Panel引入了新的工具箱管理功能,包含Swap分区管理、Fail2Ban管理等功能。此外,1Panel针对网站证书管理功能进行了全面重构&…...

棋牌的电脑计时计费管理系统教程,棋牌灯控管理软件操作教程
一、前言 有的棋牌室在计时的时候,需要使用灯控管理,在开始计时的时候打开灯,在结账后关闭灯,也有的不需要用灯控,只用来计时。 下面以 佳易王棋牌计时计费管理系统软件为例说明: 软件试用版下载或技术支…...
《Kotlin核心编程》笔记:设计模式
创建型模式 主流的创建型模式有:工厂方法模式、抽象工厂模式、构建者模式 伴生对象增强工厂模式 在有些地方会把工厂模式细分为简单工厂、工厂方法模式以及抽象工厂。 这里主要介绍简单工厂的模式,它的核心作用就是通过一个工厂类隐藏对象实例的创建…...

hive企业级调优策略之数据倾斜
测试所用到的数据参考: 原文链接:https://blog.csdn.net/m0_52606060/article/details/135080511 本教程的计算环境为Hive on MR。计算资源的调整主要包括Yarn和MR。 数据倾斜概述 数据倾斜问题,通常是指参与计算的数据分布不均࿰…...
MATLAB版本、labview版本、UHD版本 互相对应
LabVIEWMATLABUHD2019R2021bUHD_3.15.0.0-vendor2020R2022bUHD_4.1.0.4-vendorR2023bUHD_4.2.0.0-vendor 更换固件 MATLAB 更换固件指令 status sdruload(Device "X310", IPAddress 192.168.10.2)...

13 v-show指令
概述 v-show用于实现组件的显示和隐藏,和v-if单独使用的时候有点类似。不同的是,v-if会直接移除dom元素,而v-show只是让dom元素隐藏,而不会移除。 在实际开发中,v-show也经常被用到,需要重点掌握。 基本…...

23级新生C语言周赛(6)(郑州轻工业大学)
题目链接:ZZULIOJ 3110: 数(shu)数(shu)问题 分析: 看到这个题第一步想的是 先把每个平方数给求出来 然后枚举 但是时间复杂度大于1e8 交了一下TLE 但后来打表发现,好数太多了要是枚举的话 注定TLE 能不能间接的去做呢? 把不是的减去,那不就是好数了吗? 这个时候又是打表,会…...

关于“Python”的核心知识点整理大全24
目录 编辑 10.1.6 包含一百万位的大型文件 pi_string.py 10.1.7 圆周率值中包含你的生日吗 10.2 写入文件 10.2.1 写入空文件 write_message.py programming.txt 10.2.2 写入多行 10.2.3 附加到文件 write_message.py programming.txt 10.3 异常 10.3.1 处理 Ze…...
Vue - 基于Element UI封装一个表格动态列组件
1 组件需求背景 在后台管理系统中,表格的使用频率非常高,统一封装表格动态列组件并全局注册使用,可大大提升代码的复用性和可维护性。 2 全局注册 src/plugins/index.js: import columns from ./columns/indexexport default …...

计算机网络:DNS域名解析系统
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
java面试:==和equals有什么区别?
在 Java 中,"" 和 "equals" 有着不同的作用: "" 运算符: 在基本数据类型(如 int、char 等)中,"" 用于比较它们的值是否相等。 在引用类型中,"&q…...

数字人SaaS系统无限生成AI数字人!
市面上数字人软件层出不穷,选择一款适合的数字人软件是成功的第一步,只需要一款软件就解决数字人直播和数字人短视频的制作,青否数字人SaaS系统(数字人源码:zhibo175)你值得拥有! 青否数字人Saa…...

【MySQL】——数据类型及字符集
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...

Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

LeetCode - 148. 排序链表
目录 题目 思路 基本情况检查 复杂度分析 执行示例 读者可能出的错误 正确的写法 题目 148. 排序链表 - 力扣(LeetCode) 思路 链表归并排序采用"分治"的策略,主要分为三个步骤: 分割:将链表从中间…...