Java后端开发——JDBC组件

JDBC(Java Database Connectivity)是Java SE平台的一种标准API,它提供了一种标准的方法来访问关系型数据库,使得Java程序能够与各种不同的数据库进行交互,这篇文章我们来进行实验体验一下。

自定义JDBC连接工具类
1.编写第一代JDBCUtils并测试查看结果
第一代JDBCUtils:

package com.javaweb.utils;
import java.io.FileReader;
import java.sql.*;
import java.util.Properties;public class JDBCUtils2 {private static String driver;private static String url;private static String user;private static String password;
static {try {// 1. 创建Properties集合类。Properties properties = new Properties();// 2. 加载文件properties.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("jdbc.properties").getPath()));driver = properties.getProperty("driver");url = properties.getProperty("url");user = properties.getProperty("user");password = properties.getProperty("password");// 注册驱动Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}
public static Connection getConnection() throws SQLException { return   DriverManager.getConnection(url, user, password);}// 释放资源public static void close(ResultSet rs, PreparedStatement pstm, Connection conn) {try {if (rs != null) {rs.close();}if (pstm != null) {pstm.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}
}

在这里插入图片描述
第一代JDBCUtils测试:

package com.javaweb.utils;import java.sql.*;public class testJdbcUtils1 {public static void main(String[] args) throws Exception {Connection conn = JDBCUtils.getconnection();String sql="update account set money = ? where id = ?";PreparedStatement pstm = conn.prepareStatement(sql);pstm.setString(1, "20000");pstm.setString(2, "1");int count=pstm.executeUpdate();JDBCUtils.close( null,pstm, conn);System.out.println(count);}
}

在这里插入图片描述
在这里插入图片描述
2.编写第二代JDBCUtils并测试查看结果
在src下创建数据库连接配置文件:jdbc.properties
在这里插入图片描述
第二代JDBCUtils代码:

package com.javaweb.utils;
import java.io.FileReader;
import java.sql.*;
import java.util.Properties;public class JDBCUtils2 {private static String driver;private static String url;private static String user;private static String password;
static {try {// 1. 创建Properties集合类。Properties properties = new Properties();// 2. 加载文件properties.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("jdbc.properties").getPath()));driver = properties.getProperty("driver");url = properties.getProperty("url");user = properties.getProperty("user");password = properties.getProperty("password");// 注册驱动Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}
public static Connection getConnection() throws SQLException { return   DriverManager.getConnection(url, user, password);}// 释放资源public static void close(ResultSet rs, PreparedStatement pstm, Connection conn) {try {if (rs != null) {rs.close();}if (pstm != null) {pstm.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}
}

在这里插入图片描述
第二代JDBCUtils测试:

package com.javaweb.utils;
import java.sql.*;
public class testJdbcUtils2 {public static void main(String[] args) throws Exception {Connection conn = JDBCUtils2.getConnection();String sql = "update account set money = ? where id = ?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setDouble(1, 50000);pstmt.setInt(2, 1);int count = pstmt.executeUpdate();System.out.println(count);}
}

在这里插入图片描述
在这里插入图片描述
封装增删改查DAO
1.搭建数据库环境,创建库tb_user,插入测试记录
在MySQL中创建一个名称为db的数据库,然后在该数据库中创建一个tb_user表,再向表中插入3条数据。

create database db charset=utf8;
CREATE TABLE tb_user(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(40),password VARCHAR(40),email VARCHAR(60),birthday DATE 
)CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO tb_user(username,password ,email,birthday) VALUES('zs','123456','zs@sina.com','1980-12-04');
INSERT INTO tb_user(username,password ,email,birthday) VALUES('lisi','123456','lisi@sina.com','1981-12-04');
INSERT INTO tb_user(username,password ,email,birthday) VALUES('wangwu','123456','wangwu@sina.com','1979-12-04');

在这里插入图片描述
2.创建JavaBean:User.java
在src目录下,新建一个名称为chapter02.jdbc.example的包
创建JavaBean,User类的具体实现方式如下:

package com.javaweb.bean;import java.util.Date;public class user {private int id;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}private String username;private String password;private String email;private Date birthday;}

在这里插入图片描述
创建数据库访问层DAO类封装增删改查代码:UserDao.java

package chapter02.jdbc.example;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;import com.javaweb.bean.user;public class UsersDao {//添加用户的操作public boolean insert(user user) {Connection conn = null;Statement stmt=null;ResultSet rs = null;try {conn = JDBCUtils.getConnection();stmt = conn.createStatement();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String birthday = sdf.format(user.getBirthday());String sql = "INSERT INTO tb_user(id,username,password,email,birthday)"+"VALUES("+user.getId()+",'"+user.getUsername()+"','"+user.getPassword()+"','"+user.getEmail()+"','"+birthday + "')";System.out.println(sql);int num = stmt.executeUpdate(sql);if (num > 0) {return true;}return false;} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.release(rs,stmt,conn);}return false;}public ArrayList<user> findAll(){Connection conn = null;Statement stmt=null;ResultSet rs = null;ArrayList<user> list = new ArrayList<user>();try {conn = JDBCUtils.getConnection();stmt = conn.createStatement();String sql = "SELECT * FROM tb_user";rs = stmt.executeQuery(sql);while(rs.next()) {user user = new user();user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setEmail(rs.getString("email"));user.setBirthday(rs.getDate("birthday"));list.add(user);}return list;} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.release(rs, stmt, conn);}return null;}public user find(int id) {Connection conn=null;Statement stmt=null;ResultSet rs = null;try {conn = JDBCUtils.getConnection();stmt=conn.createStatement();String sql = "SELECT * FROM tb_user WHERE id=" + id;rs = stmt.executeQuery(sql);while(rs.next()) {user user = new user();user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setEmail(rs.getString("email"));user.setBirthday(rs.getDate("birthday"));return user;}return null;} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.release(rs,stmt, conn);}return null;}public boolean delete(int id) {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {conn = JDBCUtils.getConnection();stmt= conn.createStatement();String sql = "DELETE FROM tb_user WHERE id=" + id;int num =stmt.executeUpdate(sql);if(num > 0) {return true;}return false;} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.release(rs, stmt,conn);}return false;}public boolean update(user user) {Connection conn =null;Statement stmt = null;ResultSet rs = null;try {conn= JDBCUtils.getConnection();stmt = conn.createStatement();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String birthday =sdf.format(user.getBirthday());String sql = "UPDATE tb_user set username='"+user.getUsername()+"',password='"+user.getPassword() + "',email='"+user.getEmail() + "',birthday='" + birthday+"'WHERE id=" + user.getId();int num = stmt.executeUpdate(sql);if (num > 0) {return true;}return false;} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.release(rs, stmt, conn);}return false;}
}

在这里插入图片描述
4.利用JUnit对DAO的方法进行单元测试,并查看结果
创建测试类JDBCTESTl,利用JUnit对DAO-insert方法添加tb_user表中的数据:

在这里插入代码片`package chapter02.jdbc.example;import java.util.Date;import com.javaweb.bean.user;@Test
public class JDBCTest {public static void main(String[] args) {//向users表插入一个用户信息UsersDao ud = new UsersDao();user user=new user();user.setId(4);user.setUsername("xiaoli");user.setPassword("00000");user.setEmail("h23526456@qq.com");user.setBirthday(new Date());boolean b= ud.insert(user);System.out.println(b);}}`

在这里插入图片描述
测试结果:
在这里插入图片描述
创建测试类JDBCTEST03,利用JUnit对DAO-findAll方法根据ID查询tb_user表中数据:

package chapter02.jdbc.example;import java.util.ArrayList;import com.javaweb.bean.user;public class FindAllUsersTest {public static void main(String[] args) {UsersDao usersDao = new UsersDao();ArrayList<user> list = usersDao.findAll();for (int i=0; i< list.size(); i++) {System.out.println("第" + (i+1) + "条数据的username的值为:"+list.get(i).getUsername());}}}

在这里插入图片描述
在这里插入图片描述
测试结果,成功查询出tb_user表中所有username值:
在这里插入图片描述
创建测试类JDBCTEST03,利用JUnit对DAO-find方法根据ID查询tb_user表中数据:
我们根据ID查询tb_user表中ID为13的数据库信息:

package chapter02.jdbc.example;import static org.junit.Assert.*;import org.junit.Test;import com.javaweb.bean.user;public class JDBCTEST03 {@Testpublic void testFind() throws Exception {UsersDao dao= new UsersDao();user user=dao.find(13);System.out.println("id为13的User对象的name值为:"+user.getUsername());}}

在这里插入图片描述
测试结果:
成功通过ID查询rb_user表中ID为13的username信息
在这里插入图片描述

创建测试类JDBCTEST04,利用JUnit对DAO-update方法方法根据ID更新tb_user表中数据:

package chapter02.jdbc.example;import java.util.Date;import org.junit.Test;import com.javaweb.bean.user;public class JDBCTEST04 {@Testpublic void testUpdate() throws Exception {UsersDao dao= new UsersDao();user user=new user();user.setId(13);user.setUsername("项秀才让");user.setPassword("abc");user.setEmail("123456@sina.com");user.setBirthday(new Date());boolean b=dao.update(user);System.out.println(b);}}

在这里插入图片描述
测试结果:
成功修改ID为13的数据库记录信息!
在这里插入图片描述
创建测试类JdbcTest01,利用DAO-delete方法删除tb_user表中的数据

package chapter02.jdbc.example;
import org.junit.jupiter.api.Test;
class JdbcTest01 {@Testpublic void testDelete() {UsersDao dao= new UsersDao();boolean b=dao.delete(8);System.out.println(b);}	
}

在这里插入图片描述
测试结果和sql查询结果:
在这里插入图片描述
用户登录程序
1.创建数据库表
在MySQL中使用一个名称为db_myweb的数据库,然后在该数据库中创建一个tb_user表,再向表中插入3条数据。

在这里插入代码片`Use db_myweb;
CREATE TABLE tb_user(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(40),password VARCHAR(40),email VARCHAR(60),birthday DATE 
)CHARACTER SET utf8 COLLATE utf8_general_ci;
插入数据:
INSERT INTO tb_user(username,password ,email,birthday) VALUES('zs','123456','zs@sina.com','1980-12-04');
INSERT INTO tb_user(username,password ,email,birthday) VALUES('lisi','123456','lisi@sina.com','1981-12-04');
INSERT INTO tb_user(username,password ,email,birthday) VALUES('wangwu','123456','wangwu@sina.com','1979-12-04');
`

在这里插入图片描述
2.编写登录页面
在web目录下创建一个名称为login的JSP文件,在该文件中添加用于用户登录时输入用户信息的表单元素。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/myweb/LoginServlet" method="post">
用户名:<input type="text" name="username">     <br>
密  码:<input type="password" name="password"> <br> 
<input type="submit" value="登录">
</form>
</body>
</html>

在这里插入图片描述
3.编写工具类
由于每次操作数据库时,都需要加载数据库驱动、建立数据库连接以及关闭数据库连接,为了避免代码的重复书写,所以需要建立一个专门用于操作数据库的工具类。在src下创建一个包com.javaweb.utils,在包中创建一个封装了上述操作的工具类JDBCUtils。

package com.javaweb.utils;import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;import com.mysql.jdbc.Connection;public class JDBCUtils {// 加载驱动static {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}// 获取连接public static Connection getconnection() throws Exception {String url = "jdbc:mysql://localhost:3306/db_myweb?useSSL=false";String user = "root";String password = "root";Connection conn = (Connection) DriverManager.getConnection(url, user, password);return conn;}// 释放资源public static void close(ResultSet rs, java.sql.PreparedStatement pstm, java.sql.Connection conn) {try {if (rs != null) {rs.close();}if (pstm != null) {pstm.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}

在这里插入图片描述
4.UserDao增加方法按用户名和密码查询方法

// 根据username,password查找指定的user
public boolean findByUsernameAndPassword(String username,String password){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 发送SQL语句
String sql = "select * from tb_user where username=? and password=?";
// 获得PreparedStatement对象
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
// 处理结果集
if (rs.next()) 
return true;
return false;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, pstmt, conn);
}
return false;
}

在这里插入图片描述
5.实现登录功能的LoginServlet

package com.javaweb.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class LoginServlet*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
/*** */private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter();String username=request.getParameter("username");String password=request.getParameter("password");if(username!=null&&password!=null&&!username.equals("")&&!password.equals("")) {UserDao dao=new UserDao();boolean b=dao.findByUsernameAndPassword(username, password);if(b)out.print("欢迎登录!");elseout.print("用户名或密码不正确!");	}elseout.print("用户名或密码不能为空!");	}}

在这里插入图片描述
运行项目,查看效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
C3P0数据库连接池实验
1.导入JAR包c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar
在项目中导入JAR包c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar,并使用C3P0数据库连接池对象获取Connection对象。
在这里插入图片描述
2.创建C3P0Test测试用例类,测试代码

package com.javaweb.test;import java.sql.Connection;
import java.sql.SQLException;import org.junit.Test;import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3P0Test {@Test
public void test() throws PropertyVetoException, SQLException, java.beans.PropertyVetoException {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/db_myweb?useSSL=false");
ds.setUser("root");
ds.setPassword("root");
ds.setInitialPoolSize(5);
ds.setMaxPoolSize(10);
Connection conn = ds.getConnection();
System.out.println(conn);
}}

在这里插入图片描述
测试结果:
在这里插入图片描述
3.在项目的src根目录下创建一个c3p0-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/db_myweb?useSSL=false</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="checkoutTimeout">30000</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>

在这里插入图片描述
在这里插入图片描述
4.创建C3P0Test测试用例类,测试代码

package chapter02.jdbc.example;import java.beans.PropertyVetoException;
import java.sql.SQLException;import org.junit.Test;import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mysql.jdbc.Connection;public class C3P0Test {@Test
public void testC3P0() throws SQLException {
ComboPooledDataSource ds= new ComboPooledDataSource();
System.out.println(ds.getConnection());
}
}

在这里插入图片描述
测试结果:
测试成功!
在这里插入图片描述
5.封装DataSourceUtils工具类

package com.javaweb.test;import java.sql.SQLException;import com.mysql.jdbc.Connection;public class DataSourceUtils {private static ComboPooledDataSource ds=new ComboPooledDataSource();public static ComboPooledDataSource getDataSource(){return  ds;}public static Connection getConnection() throws SQLException {return ds.getConnection();}
}

在这里插入图片描述
6.修改UserDao从DataSourceUtils工具类,获取数据库连接,并测试结果。
在这里插入图片描述在这里插入图片描述

BUtils工具增删改查
1.将commons-dbutils-1.7.jar添加到项目的lib目录中
在这里插入图片描述
2.创建UserDaoQr.java,编写QueryRunner示例代码:增加、删除、修改

package cn.itcast.jdbc.dao;import java.sql.SQLException;
import java.util.List;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;import cn.itcast.jdbc.javabean.User;
import cn.itcast.jdbc.utils.DataSourceUtils;public class UserDaoQr {
public boolean insert(User user) throws SQLException {
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "INSERT INTO t_user(id,username,password) VALUES(null,?,?)";
int num= r.update(sql,user.getName(),user.getPassword());
if (num > 0) {
return true;
}
return false;
}
public boolean update(User user) throws SQLException {
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "update t_user set username=?,password=?";
int num= r.update(sql,user.getName(),user.getPassword());
if (num > 0) {
return true;
}
return false;
}public boolean delete(int id) throws SQLException {
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "delete from t_user where id=?";
int num= r.update(sql,id);
if (num > 0) {
return true;
}
return false;
}public User find(int id) throws SQLException{
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "SELECT * FROM user WHERE id=?";
User user= r.query(sql, new BeanHandler<User>(User.class),id);
return user;
}
public List<User> findAll() throws SQLException{
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "SELECT * FROM user";
List<User> list=r.query(sql, new BeanListHandler<User>(User.class));
return list;
}}

在这里插入图片描述
3.QueryRunner示例代码:单元测试增删改代码
单元测试增加数据:

package cn.itcast.jdbc.dao;
import java.sql.SQLException;import org.junit.Test;import cn.itcast.jdbc.javabean.User;public class test {
@Testpublic void testInsert() throws SQLException {UserDaoQr dao=new UserDaoQr();User user=new User();user.setName("svdviming");user.setPassword("dad2dadadadad3");boolean b=dao.insert(user);if(b)System.out.println("数据插入成功!");elseSystem.out.println("数据插入失败!");}
}单元测试删除数据:
@Test
public void testDelete() throws SQLException {
UserDaoQr dao=new UserDaoQr();
boolean b=dao.delete(3);
if(b)
System.out.println("数据删除成功!");
else
System.out.println("数据删除失败!");
}}

测试结果:
数据删除成功!
在这里插入图片描述
4.QueryRunner示例代码:查询单个,并测试

package cn.itcast.jdbc.dao;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;import cn.itcast.jdbc.javabean.User;
import cn.itcast.jdbc.utils.DataSourceUtils;public class UserDaoQr {public User find(int id) throws SQLException{QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());String sql = "SELECT * FROM user WHERE id=?";User user= r.query(sql, new BeanHandler<User>(User.class),id);return user;}}

测试ID为2的数据:

package cn.itcast.jdbc.dao;import java.sql.SQLException;import org.junit.Test;import cn.itcast.jdbc.javabean.User;public class test {@Testpublic void testFind() throws SQLException {UserDaoQr dao=new UserDaoQr();User user=dao.find(2);System.out.println("name="+user.getName());}}

测试结果:
成功查询ID=2的数据!
在这里插入图片描述
5.QueryRunner示例代码:查询全部,并测试

package cn.itcast.jdbc.dao;import java.sql.SQLException;
import java.util.List;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;import cn.itcast.jdbc.javabean.User;
import cn.itcast.jdbc.utils.DataSourceUtils;public class UserDaoQr {
public List<User> findAll() throws SQLException{
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "SELECT * FROM user";
List<User> list=r.query(sql, new BeanListHandler<User>(User.class));
return list;
}
}

测试结果:
成功通过 findAll测试查询表中数据信息。
在这里插入图片描述

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

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

相关文章

【IDEA使用maven package时,出现依赖不存在以及无法从仓库获取本地依赖的问题】

Install Parent project C:\Users\lxh\.jdks\corretto-1.8.0_362\bin\java.exe -Dmaven.multiModuleProjectDirectoryD:\学习\projectFile\study\study_example_service "-Dmaven.homeD:\Program Files\JetBrains\IntelliJ IDEA2021\plugins\maven\lib\maven3" "…

操作系统的线程模型

操作系统的线程调度有几个重要的概念&#xff1a; 调度器&#xff08;Thread Scheduler&#xff09;&#xff1a;内核通过操纵调度器对内核线程进行调度&#xff0c;并负责将线程的任务映射到各个处理器上内核线程&#xff08;Kernel Level Thread&#xff09;&#xff1a;简称…

【GitLab CI/CD、SpringBoot、Docker】GitLab CI/CD 部署SpringBoot应用,部署方式Docker

介绍 本文件主要介绍如何将SpringBoot应用使用Docker方式部署&#xff0c;并用Gitlab CI/CD进行构建和部署。 环境准备 已安装Gitlab仓库已安装Gitlab Runner&#xff0c;并已注册到Gitlab和已实现基础的CI/CD使用创建Docker Hub仓库&#xff0c;教程中使用的是阿里云的Docker…

100量子比特启动实用化算力标准!玻色量子重磅发布相干光量子计算机

2023年5月16日&#xff0c;北京玻色量子科技有限公司&#xff08;以下简称“玻色量子”&#xff09;在北京正大中心成功召开了2023年首场新品发布会&#xff0c;重磅发布了自研100量子比特相干光量子计算机——“天工量子大脑”。 就在3个月前&#xff0c;因“天工量子大脑”在…

【Orangepi Zero2 全志H616】资料及环境搭建

一、资料文档 二、MobaXterm远程连接工具 三、修改登录密码 四、修改内核日志等级 五、配置网络 六、SSH 访问 OrangePi ZERO 2 七、配置 vim 八、基于官方外设开发SDK 一、资料文档 官网资料下载 GitHub&#xff1a;新版本的 orangepi-build 源码 环境搭建&#xff1a;新手配…

vue+asp.net Web api前后端分离项目发布部署

一、前后端项目介绍 1.前端项目是使用vue脚手架进行创建的。 脚手架版本&#xff1a;vue/cli 5.0.8 编译器版本&#xff1a;vs code 1.82.2 2.后端是一个asp.net Core Web API 项目 后端框架版本&#xff1a;.NET 6.0 编译器版本&#xff1a;vs 2022 二、发布部署步骤 第…

安卓抓包之小黄鸟

下载安装 下载地址: https://download.csdn.net/download/yijianxiangde100/88496463 安装apk 即可。 证书配置:

【嵌入式】HC32F07X CAN通讯配置和使用配置不同缓冲器以连续发送

一 背景说明 使用小华&#xff08;华大&#xff09;的MCU HC32F07X实现 CAN 通讯配置和使用 二 原理分析 【1】CAN原理说明&#xff08;参考文章《CAN通信详解》&#xff09;&#xff1a; CAN是控制器局域网络(Controller Area Network, CAN)的简称&#xff0c;是一种能够实现…

HTML基础知识——URL、文本标签、链接标签、图片标签、列表标签

目录 URL&#xff08;统一资源定位符&#xff09; 概述 网址的组成部分 协议 主机 端口 路径 查询参数 锚点 文本标签 示例&#xff1a; 链接标签 示例&#xff1a; 图片标签 示例&#xff1a; 列表标签 示例&#xff1a; URL&#xff08;统一资源定位符&#xff09;…

玩转AIGC:如何选择最佳的Prompt提示词?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

周赛369(位运算、分类讨论、记忆化搜索==>动态规划、树形DP)

文章目录 周赛369[2917. 找出数组中的 K-or 值](https://leetcode.cn/problems/find-the-k-or-of-an-array/)位运算模拟 [2918. 数组的最小相等和](https://leetcode.cn/problems/minimum-equal-sum-of-two-arrays-after-replacing-zeros/)分类讨论 [2919. 使数组变美的最小增量…

docker部署MySQL服务

部署 MySQL8.0.35社区版 1.下载镜像 docker pull container-registry.oracle.com/mysql/community-server:8.0.35 查看镜像 docker images 2. 启动MySQL服务器实例 docker run --namemysql8 --restart on-failure -p 3309:3306 -d container-registry.oracle.com/mysql/comm…

探索C++中的不变之美:const与构造函数的深度剖析

W...Y的主页&#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; 关于C的博客中&#xff0c;我们已经了解了六个默认函数中的四个&#xff0c;分别是构造函数、析构函数、拷贝构造函数以及函数的重载。但是这些函数都是有返回值与参数的。提到参数与返回…

零日漏洞预防

零日漏洞&#xff0c;是软件应用程序或操作系统&#xff08;OS&#xff09;中的意外安全漏洞&#xff0c;负责修复该漏洞的一方或供应商不知道该漏洞&#xff0c;它们仍然未被披露和修补&#xff0c;为攻击者留下了漏洞&#xff0c;而公众仍然没有意识到风险。 零日攻击是如何…

Unity中Shader的烘培分支的判断

文章目录 前言一、上一篇文章中所需要的 lightmapUV 只有在烘焙时才会使用1、查看帮助文档后&#xff0c;Unity中判断烘培是否开启&#xff0c;使用的是LIGHTMAP_ON2、我们在 appdata 和 v2f 中&#xff0c;定义第二套UV 前言 Unity中Shader的烘培分支的判断&#xff0c;基于上…

JDBC数据库连接---附通用的CRUD类

文章目录 JDBC数据库连接1 导包2 编写配置文件3 编写连接数据库代码4 测试工具类5 附加1 通用的CRUD类2 测试CURD类3 测试 JDBC数据库连接 本篇文章以 MySQL 数据库为例&#xff0c;若要切换其他数据库&#xff0c;只需修改 resource文件夹中的 jdbc.properties 配置文件即可。…

PS2024免费磨皮滤镜Portraiture插件下载

Portraiture 4是一款适用于LR的人像智能磨皮美化滤镜插件&#xff0c;操作简便、省去了选择蒙版和逐步像素处理的繁琐流程&#xff0c;帮助您实现高效的肖像修饰。快速对照片中皮肤、头发、眉毛等部位进行美化&#xff0c;无需手动调整&#xff0c;大大提高P图效率。全新4版本&…

基于单片机的智能鱼缸控制系统的设计与实现

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、开发技术和原理的相关知识2.1开发设计目标2.2 开发设计使用技术和原理2.2.1嵌入式技术2.2.2传感器技术 二、基于单片机的智能鱼缸控制系统的总体设计3.1智能鱼缸控制系统的基本组成3.1.1系统的构成部分3.2需求…

uni-app 解决钉钉小程序日期组件uni-datetime-picker不兼容ios问题

最近在使用uni-app开发 钉钉小程序 &#xff0c;遇到一个ios的兼容性问题 uni-datetime-picker 组件在模拟器上可以使用&#xff0c;在真机上不生效问题 文章目录 1. 不兼容的写法&#xff0c;uni-datetime-picker 不兼容IOS2. 兼容的写法&#xff0c;使用 dd.datePicker 实现。…

Java数组小练习求出数组中的最大值

加油&#xff0c;新时代打工人&#xff01; Java基础八之数组的定义和获取元素 package demo;/*** author wenhao* date 2023/11/04 10:47* description 数组练习*/ public class ArrDemo {public static void main(String[] args) {//求一个数组中的最大值int [] arr {66,12…