当前位置: 首页 > news >正文

张晨光-JAVA零基础保姆式JDBC技术教程

JDBC文档

JDBC概述

JDBC概述

Java DataBase Connectivity Java 数据库连接技术

JDBC的作用

通过Java语言操作数据库,操作表中的数据

SUN公司为**了简化、**统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC

在这里插入图片描述

JDBC的本质

是官方(sun公司)定义的一套操作所有关系型数据库的规则(接口)。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,运行时的代码其实是驱动jar包中的实现类。

总结:

在java中要想访问数据库只能通过JDBC.
JDBC是java访问数据库的基础,其他数据库访问技术都是对JDBC的封装(Hibernate,MyBatis)
JDBC是为了访问不同的数据库,提供了一种统一的访问方式
JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层.由java编写的一组类和接口,接口的实现由各大数据库厂商来实现

JDBC 入门案例

使用junit测试用例

/*** @Auther: yanqi* 只有无返回值和没有参数据的情况下才能使用junit,点击方法用右击运行JUnit run * @Desc:*      在同一个类中只能有一个main方法,这个main是被jvm所调用*      我还想测试main2,没办法去运行这个main2*      为了解决多次测试问题?*      提供了一个  【测试用例】 junit*/
public class JdbcDemo1 {/*使用junit测试用例:1:在方法上加@Test2: 前提-测试的方法返回值只能是void , 不能参数3:注意 类名不能叫 test*///单元测试@Testpublic void test1(){System.out.println("aaaa");}//单元测试@Testpublic void test2(){System.out.println("bbbb");}}

JDBC_CRUD操作

实现步骤

1、要连接mysql数据库。有一个mysql的数据库,并且要启动
2、创建一个数据库,创建一个表,把表添加一些数据。
3、找到msyql的驱动,并且拷贝到工程中。build-path
4、书写java代码。

准备数据库

CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(25) DEFAULT NULL,`passworld` varchar(25) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建JavaWeb工程

在这里插入图片描述

添加驱动jar包

在这里插入图片描述

JDBC的查询操作

    /*** 通过jdbc连接数据库步骤* 1、加载驱动* 2、连接数据库* 3、创建statement对象* 4、发送sql* 5、处理结果集* 6、关闭连接*/
public class JDBC_CRUD {/*** jdbc实现查询操作*/@Testpublic void TestSelectUser() throws Exception {// 1、加载驱动Class.forName("com.mysql.jdbc.Driver");// 2、连接数据库String url="jdbc:mysql://localhost:3306/test";String user="root";String password ="root";Connection conn = DriverManager.getConnection(url, user, password);// 3、创建statement对象,这个对象是可以发送sqlStatement statm = conn.createStatement();//4、发送sqlString sql="select * from t_user";ResultSet rs = statm.executeQuery(sql);//5、处理结果集while (rs.next()){//指针一个一个的去找,如果找到就取出int id = rs.getInt("id");String username = rs.getString("username");String passworld2 = rs.getString("passworld");int age = rs.getInt("age");System.out.println(id+"-"+username+"-"+passworld2+"-"+age);}// 6、关闭连接 后打开的先关闭rs.close();statm.close();conn.close();}
}

两种取值方式

//5、处理结果集
while (rs.next()){//指针一个一个的去找,如果找到就取出/*** 取值方式有两种:* 1、按字段名来取,比较真观,推荐使用(常用)* 2、按列号来取,可以在字段少的情况下使用*/int id = rs.getInt(1);//表示第一列id字段String username = rs.getString(2);//表示第二列username字段String passworld2 = rs.getString("passworld");int age = rs.getInt("age");System.out.println(id+"-"+username+"-"+passworld2+"-"+age);
}

JDBC的添加操作

/*** jdbc实现添加操作*/
@Test
public void TestAddUser() throws Exception {// 1、加载驱动Class.forName("com.mysql.jdbc.Driver");//2、连接数据库String url="jdbc:mysql://127.0.0.1:3306/test";String user="root";String pwd="root";Connection conn = DriverManager.getConnection(url, user, pwd);//3、创建statement对象Statement stmt = conn.createStatement();//4、发送sql  添加,修改,删除 都用executeUpdate()方法String sql = "INSERT INTO `test`.`t_user`(`id`, `username`, `passworld`, `age`) VALUES (null, 'rose', '123', 97)";int i = stmt.executeUpdate(sql);System.out.println(i);//表示的影响的行数//5、关闭连接stmt.close();conn.close();
}

JDBC的删除操作

/*** jdbc实现删除操作*/
@Test
public void TestDeleteUser() throws Exception {// 1、加载驱动Class.forName("com.mysql.jdbc.Driver");// 2、连接数据库String url="jdbc:mysql://127.0.0.1:3306/test";String user="root";String pwd="root";Connection conn = DriverManager.getConnection(url, user, pwd);// 3、创建statement对象Statement stmt = conn.createStatement();// 4、发送sqlString sql="delete from t_user";int i = stmt.executeUpdate(sql);System.out.println(i);// 5、关闭连接stmt.close();conn.close();
}

JDBC的修改操作

/*** jdbc实现修改操作*/
@Test
public void TestUpdateUser() throws Exception {// 1、加载驱动Class.forName("com.mysql.jdbc.Driver");// 2、连接数据库String url="jdbc:mysql://127.0.0.1:3306/test";String user="root";String pwd="root";Connection conn = DriverManager.getConnection(url, user, pwd);// 3、创建statement对象Statement stmt = conn.createStatement();// 4、发送sqlString sql="update t_user set username ='张三' where id = 4 ";int i = stmt.executeUpdate(sql);System.out.println(i);// 5、关闭连接stmt.close();conn.close();
}

异常的处理

public class JdbcEx {/*** jdbc实现查询操作*/@Testpublic void TestSelectUser(){// 1、加载驱动try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}// 2、连接数据库
`	    String url="jdbc:mysql://localhost:3306/test";String user="root";String password ="root";Connection conn = null;Statement statm = null;ResultSet rs = null;try {conn = DriverManager.getConnection(url, user, password);// 3、创建statement对象,这个对象是可以发送sqlstatm = conn.createStatement();//4、发送sqlString sql="select * from t_user";rs = statm.executeQuery(sql);//5、处理结果集while (rs.next()){//批针一个一个的去找,如果找到就取出/*** 取值方式有两种:* 1、按字段名来取,比较真观,推荐使用(常用)* 2、按列号来取,可以在字段少的情况下使用*/int id = rs.getInt(1);//表示第一列id字段String username = rs.getString(2);//表示第二列username字段String passworld2 = rs.getString("passworld");int age = rs.getInt("age");System.out.println(id+"-"+username+"-"+passworld2+"-"+age);}} catch (SQLException e) {e.printStackTrace();}finally {// 6、关闭连接 后打开的先关闭try {if(rs != null){rs.close();rs =null;//关闭连接,给赋值null,gc垃圾回收回机制会优先处理这些对象}} catch (SQLException e) {e.printStackTrace();}try {if(statm != null){statm.close();statm=null;}} catch (SQLException e) {e.printStackTrace();}try {if(conn != null){conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}}
}

工具类的抽取

public class JDBCUtil {//静态代码块,随着类的加载而加载,并且只加载一次static {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}//获取连接public static Connection getConnection(){String url="jdbc:mysql://localhost:3306/test";String user="root";String password ="root";Connection conn = null;try {conn =  DriverManager.getConnection(url, user, password);} catch (SQLException e) {e.printStackTrace();}return conn;}//关闭方法public static void close(ResultSet rs , Statement statm, Connection conn){try {if(rs != null){rs.close();rs =null;//关闭连接,给赋值null,gc垃圾回收回机制会优先处理这些对象}} catch (SQLException e) {e.printStackTrace();}try {if(statm != null){statm.close();statm=null;}} catch (SQLException e) {e.printStackTrace();}try {if(conn != null){conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}//关闭方法public static void close( Statement statm, Connection conn){try {if(statm != null){statm.close();statm=null;}} catch (SQLException e) {e.printStackTrace();}try {if(conn != null){conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}
}

工具类的测试

public class UtilTest {@Testpublic void testUpdate(){Connection conn = null;Statement stmt = null;try {conn = JDBCUtil.getConnection();stmt = conn.createStatement();int i = stmt.executeUpdate("update t_user set username = '江一燕' where id = 4");System.out.println(i);} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.close(stmt,conn);}}/*** 测试的查询*/@Testpublic void test(){Connection conn = null;Statement stmt = null;ResultSet rs = null;try {conn =  JDBCUtil.getConnection();stmt = conn.createStatement();rs = stmt.executeQuery("select * from t_user");while (rs.next()){int id = rs.getInt("id");String username = rs.getString("username");String passworld = rs.getString("passworld");int age = rs.getInt("age");System.out.println(id);System.out.println(username);System.out.println(passworld);System.out.println(age);}} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.close(rs,stmt,conn);}}
}

工具类的优化

jdbc.properties

ClassforName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
user=root
password=root
public class JDBCUtil {private static  String classforName;private static String url;private static  String user;private static String password;private static Connection conn = null;//静态代码块,随着类的加载而加载,并且只加载一次static {//FileInputStream fis = null;  //获取的配置文件方式一Properties pro = null;try {//fis = new FileInputStream("src/jdbc.properties"); //获取的配置文件方式一,web项目中无法用//获取的配置文件二(通过类加载器)InputStream is=JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");pro = new Properties();//加载到Properties集合对象中pro.load(is);} catch (IOException e) {e.printStackTrace();}finally {try {is.close();} catch (IOException e) {e.printStackTrace();}}classforName= pro.getProperty("ClassforName");url = pro.getProperty("url");user = pro.getProperty("user");password = pro.getProperty("password");//加载驱动try {Class.forName(classforName);} catch (ClassNotFoundException e) {e.printStackTrace();}//创建连接try {conn =  DriverManager.getConnection(url, user, password);} catch (SQLException e) {e.printStackTrace();}}//获取连接public static Connection getConnection(){return conn;}//关闭方法public static void close(ResultSet rs , Statement statm, Connection conn){try {if(rs != null){rs.close();rs =null;//关闭连接,给赋值null,gc垃圾回收回机制会优先处理这些对象}} catch (SQLException e) {e.printStackTrace();}try {if(statm != null){statm.close();statm=null;}} catch (SQLException e) {e.printStackTrace();}try {if(conn != null){conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}//关闭方法public static void close( Statement statm, Connection conn){try {if(statm != null){statm.close();statm=null;}} catch (SQLException e) {e.printStackTrace();}try {if(conn != null){conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}
}

封装实现体类

public class UserTest {@Testpublic void queryUser() throws SQLException {Connection conn = JDBCUtil.getConnection();Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("select * from t_user");List<User> list = new ArrayList<>();while (rs.next()){           User u = new User();u.setId(rs.getInt("id"));u.setUsername(rs.getString("username"));u.setPassworld(rs.getString("passworld"));u.setAge(rs.getInt("age"));list.add(u);}list.forEach(System.out::println);JDBCUtil.close(rs,stmt,conn);}
}

MVC三层架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERyu1jsE-1676683410519)(assets/image-20211122171228868.png)]

案例-登录功能

所用的技术: jdbc mysql 接口 实现类 三层架构 web – service – dao

创建工程: web工程

所需要的jar包: mysql的驱动包

image-20211123111234601

数据库准备

CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(25) DEFAULT NULL,`passworld` varchar(25) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

实体对象

public class User {private int id;private String username;private String pwd;private int age;//提供有参无参构造方法//提供get set 方法//提供 toString 方法
}

dao层

方法

    public User login(User user);
public class UserDaoImpl implements UserDao {@Overridepublic User login(User u) {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}//如果你的数据是本地的,并且端口是默认3306,是可以省略String url = "jdbc:mysql:///test";String user ="root";String pwd ="root";Connection conn = null;Statement stmt = null;try {conn = DriverManager.getConnection(url, user, pwd);stmt =  conn.createStatement();String sql ="select * from t_user where username = '"+u.getUsername()+"' and passworld = '"+u.getPassworld()+"' ";ResultSet rs = stmt.executeQuery(sql);//登录,只有两个结果,查到,查不到if(rs.next()){String username = rs.getString("username");String passworld = rs.getString("passworld");//如果有数据封装并返回User user1 = new User();user1.setUsername(username);user1.setPassworld(passworld);return user1;}} catch (SQLException e) {e.printStackTrace();}//TODO关闭连接//如果没有查到用户,整体返回nullreturn null;}
}

dao单元测试

image-20211123104440102 image-20211123104725054
/*** 测试dao层代码是否正常使用*/
@Test
public void login() {//创建dao层UserDao dao = new UserDaoImpl();User user = new User();user.setUsername("dfdfdf");user.setPassworld("123");//调用dao方法User u = dao.login(user);if(u!=null){System.out.println("登录成功");}else{System.out.println("登录失败");}
}

service层

public interface UserService {public boolean login(User user);
}
public class UserServiceImpl implements UserService {//创建dao对象private UserDao userDao = new UserDaoImpl();@Overridepublic boolean login(User user) {//调用dao层方法User res = userDao.login(user);if(res != null){//不能null表示dao查到数据,登录成功return true;}//否则登录失败return false;}
}

测试service

@Test
public void login() {//创建对象UserService service = new UserServiceImpl();User user = new User();user.setUsername("rose");user.setPassworld("123");boolean login = service.login(user);if(login){System.out.println("登录成功");}else{System.out.println("登录失败");}
}

web层

public class UserWeb {public static void main(String[] args) {//创建对象UserService service = new UserServiceImpl();User user = new User();user.setUsername("jack");user.setPassworld("123");boolean login = service.login(user);if(login){System.out.println("登录成功");}else{System.out.println("登录失败");}}
}

sql注入问题

-- 原sql
select * from t_user where username = "jack" and passworld = '123'-- 什么是sql注入: 通过字符串拼接,篡改sql,这就是sql注入
select * from t_user where username = ''or '1'='1' and passworld = ''or '1'='1'
select * from t_user where 1 = 1

解决sql注入问题的思路

-- 解决sql注入问题?
-- 出现的sql注入原因:字符串拼接,篡改sql
-- 解决思想,就让sql进行拼接
select * from t_user where username = ? and passworld = ?

PreparedStatement解决sql注入

1,执行效率:Statement 采取直接编译 SQL 语句的方式,扔给数据库去执行,而 PreparedStatement 则先将 SQL 语句预编译一遍,再填充参数,这样效率会高一些。SQL 语句被预编译并且存储在 PreparedStatement 对象中,其后可以使用该对象高效地多次执行该语句。2,代码可读性:Statement 中 SQL 语句中需要 Java 中的变量,加就得进行字符串的运算,还需要考虑一些引号、单引号的问题,参数变量越多,代码就越难看,而且会被单引号、双引号搞疯掉;而 PreparedStatement,则不需要这样,参数可以采用“?”占位符代替,接下来再进行参数的填充,
这样利于代码的可读性,并且符合面向对象的思想。3,安全性:Statement 由于可能需要采取字符串与变量的拼接,很容易进行 SQL 注入攻击,而 PreparedStatement 由于是预编译,再填充参数的,不存在 SQL 注入问题。
public class UserDaoImpl implements UserDao {@Overridepublic User login(User u) {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}//如果你的数据是本地的,并且端口是默认3306,是可以省略String url = "jdbc:mysql:///test";String user ="root";String pwd ="root";Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {conn = DriverManager.getConnection(url, user, pwd);/*stmt =  conn.createStatement();String sql ="select * from t_user where username = '"+u.getUsername()+"' and passworld = '"+u.getPassworld()+"' ";ResultSet rs = stmt.executeQuery(sql);*///预处理,提前把sql进行处理,可以防止sql注入问题String sql ="select * from t_user where username = ? and passworld = ?";pstmt = conn.prepareStatement(sql);pstmt.setString(1,u.getUsername());pstmt.setString(2,u.getPassworld());//执行,再发送rs = pstmt.executeQuery();//登录,只有两个结果,查到,查不到if(rs.next()){String username = rs.getString("username");String passworld = rs.getString("passworld");//如果有数据封装并返回User user1 = new User();user1.setUsername(username);user1.setPassworld(passworld);return user1;}} catch (SQLException e) {e.printStackTrace();}//TODO关闭连接//如果没有查到用户,整体返回nullreturn null;}
}

PreparedStatement进行了预编译处理,当下次执行相同的sql,sql就不会再编译了,比Statement的效率高。

Statement每执行一次sql进行编译一次

jdbc批处理-了解

业务场景:当需要向数据库中发送一批sql时,就可以用jdbc的批处理机制,以提升执行效率,避免向数据库一条条的发送

statement批处理

 /*** statement批处理*/@Testpublic void test1(){Connection conn = null;Statement statement = null;try {conn =  JDBCUtil.getConnection();statement = conn.createStatement();for(int i = 1; i<= 10000; i++){String sql ="insert into t_user (id,username, passworld,age) values(null,'"+i+"', '123', 28)";statement.addBatch(sql);//一次性向数据库中添加了3000条if(i % 3000 == 0 ){//执行批次statement.executeBatch();//清空批次statement.clearBatch();}}//执行批次statement.executeBatch();//清空批次statement.clearBatch();} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.close(statement,conn);}}

PreparedStatement批处理

    /*** PreparedStatement* @throws SQLException*/@Testpublic void test2() throws SQLException {Connection conn = JDBCUtil.getConnection();String sql ="insert into t_user (username, passworld,age) values(?, ?, ?)";PreparedStatement pstmt = conn.prepareStatement(sql);for (int i = 1; i <=10000 ; i++) {pstmt.setString(1,"u"+i);pstmt.setString(2,"p"+i);pstmt.setInt(3,i);pstmt.addBatch();if(i % 3000 == 0){pstmt.executeBatch();pstmt.clearBatch();}}pstmt.executeBatch();pstmt.clearBatch();JDBCUtil.close(pstmt,conn);}

ent.clearBatch();
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.close(statement,conn);
}

}

**PreparedStatement批处理**```java/*** PreparedStatement* @throws SQLException*/@Testpublic void test2() throws SQLException {Connection conn = JDBCUtil.getConnection();String sql ="insert into t_user (username, passworld,age) values(?, ?, ?)";PreparedStatement pstmt = conn.prepareStatement(sql);for (int i = 1; i <=10000 ; i++) {pstmt.setString(1,"u"+i);pstmt.setString(2,"p"+i);pstmt.setInt(3,i);pstmt.addBatch();if(i % 3000 == 0){pstmt.executeBatch();pstmt.clearBatch();}}pstmt.executeBatch();pstmt.clearBatch();JDBCUtil.close(pstmt,conn);}

相关文章:

张晨光-JAVA零基础保姆式JDBC技术教程

JDBC文档 JDBC概述 JDBC概述 Java DataBase Connectivity Java 数据库连接技术 JDBC的作用 通过Java语言操作数据库&#xff0c;操作表中的数据 SUN公司为**了简化、**统一对数据库的操作&#xff0c;定义了一套Java操作数据库的规范&#xff0c;称之为JDBC JDBC的本质 是官方…...

华为OD机试 - 最多提取子串数目(Python)

最多提取子串数目 题目 给定由 [a-z] 26 个英文小写字母组成的字符串 A 和 B,其中 A 中可能存在重复字母,B 中不会存在重复字母 现从字符串 A 中按规则挑选一些字母,可以组成字符串 B。 挑选规则如下: 1) 同一个位置的字母只能被挑选一次 2) 被挑选字母的相对先后顺序不…...

LeetCode-1237. 找出给定方程的正整数解【双指针,二分查找】

LeetCode-1237. 找出给定方程的正整数解【双指针&#xff0c;二分查找】题目描述&#xff1a;解题思路一&#xff1a;双指针。首先我们不管f是什么&#xff0c;即function_id等于什么不管。但是我们可以调用customfunction中的f函数&#xff0c;然后我们遍历x,y(1 < x, y &l…...

广度优先搜索算法 - 迷宫找路

广度优先搜索算法1 思考问题1.1 这个迷宫需不需要指定入口和出口&#xff1f;2 先粗略实现2.1 源码2.2 源码解释3 优化代码3.1 优化读取文件部分3.2 增加错误处理4 再优化-让程序变得更加灵活4.1 用户外部可以循环输入入口和出口5 完整代码这是一个提问者的提出的问题&#xff…...

泡脚材料简记

文章目录一般条件中药包&#xff08;药粉&#xff09;泡脚丸中药包&#xff08;药材&#xff09;艾叶生姜益母草藏红花食盐花椒白醋柠檬藿香泡脚私方紫苏叶、白术、白芍、黄芪、青皮、柴胡、夜交藤、丹参、当归&#xff0c;每种各10g艾叶、花椒、肉桂、桂枝、红花干姜30克、小茴…...

【计算机网络】因特网概述

文章目录因特网概述网络、互联网和因特网互联网历史与ISP标准化与RFC因特网的组成三种交换方式电路交换分组交换和报文交换三种交换方式的对比与总结计算机网络的定义和分类计算机网络的定义计算机网络的分类计算机网络的性能指标速率带宽吞吐量时延时延带宽积往返时间利用率丢…...

STC单片机 VS/HX1838红外接收和发送实验

STC单片机 VS/HX1838红外接收和发送实验 📌相关篇《STC单片机获取红外解码从串口输出》🔨所使用的红外接收头VS1838 📋VS1838引脚定义🌿5MM发射头,940nm红外发射二极管 红外遥控发射头。(外观看起来和普通的发光二极管没有什么差异,购买时需要注意确认)。 🔰采用的…...

前端开发常用案例(一)

前端开发常用案例1.实现三角形百度热榜样式分页效果小米商城自动轮播图效果二级下拉菜单效果时间轴效果展示音乐排行榜效果鼠标移入文字加载动画鼠标悬停缩放效果1.实现三角形 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8…...

Linux 日志查找常用命令

1.1 cat、zcat cat -n app.log | grep "error"&#xff1a;查询日志中含有某个关键字error的信息&#xff0c;显示行号。 cat -n app.log | grep "error" --color&#xff1a;查询日志中含有某个关键字error的信息&#xff0c;显示行号&#xff0c;带颜色…...

CleanMyMac4.12.5最新版安装下载教程

告别硬盘空间不足&#xff0c;让您的Mac极速如新CleanMyMac是一款强大的 Mac 清理、加速工具和健康卫士&#xff0c;让您的 Mac 加快启动速度。CleanMyMac是一款专业的Mac清理软件&#xff0c;可智能清理mac磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻…...

RFID射频识别技术(四) RFID高频电路基础|课堂笔记|10月11日

2022年10月11日 week7 ​​​​​​​ 目录 ​​​​​​​ 第四讲: RFID高频电路基础 一、RLC(串联)电路的阻抗...

数据库系统是什么?它由哪几部分组成?

数据库系统&#xff08;Database System&#xff0c;DBS&#xff09;由硬件和软件共同构成。硬件主要用于存储数据库中的数据&#xff0c;包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统&#xff0c;以及支持多种语言进行应用开发…...

华为OD机试题 - 任务混部(JavaScript)

最近更新的博客 2023新华为OD机试题 - 斗地主(JavaScript)2023新华为OD机试题 - 箱子之形摆放(JavaScript)2023新华为OD机试题 - 考古学家(JavaScript)2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)2023新华为OD机试题 - 最多等和不相交连续子序列(JavaScri…...

键盘输入a,到屏幕显示,操作系统做了什么

首先&#xff0c;假定操作系统有中断系统。 等待的键盘写入的时候&#xff0c;txt进程被read函数阻塞。输入a之后&#xff0c;首先控制器&#xff0c;把扫描到的a放入到了控制器的寄存器中。触发硬中断通知cpu—> 中断IO控制方式&#xff0c;由硬件触发的。键盘读入中断cpu…...

Python机器学习入门笔记(2)—— 分类算法

目录 转换器&#xff08;transformer&#xff09;和估计器&#xff08;estimator&#xff09; K-近邻&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;算法 模型选择与调优 交叉验证&#xff08;Cross-validation&#xff09; GridSearchCV API 朴素贝叶…...

Docker镜像发布到阿里云和私有库

目录 一、Docker镜像 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;Docker镜像加载原理 &#xff08;三&#xff09;镜像分层结构优势 &#xff08;四&#xff09;重点理解 &#xff08;五&#xff09;docker commit操作实例 &#xff08;六&#xff09;总…...

初识CSS,美化HTML

CSS称为&#xff1a;层叠样式表&#xff08;Cascading style sheets&#xff09;美化HTML即给页面种的HTML标签设置样式CSS语法规则css要写在head标签的里边&#xff0c;title标签的下面&#xff0c;用style标签框住<head> <title>...</title> <style>…...

华为OD机试 - 二维矩阵的最大值(Python)

题目二维矩阵的最大值 给定一个仅包含0和1的n*n二维矩阵 请计算二维矩阵的最大值 计算规则如下 每行元素按下标顺序组成一个二进制数(下标越大约排在低位), 二进制数的值就是该行的值,矩阵各行之和为矩阵的值允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置 …...

华为OD机试 - 快递业务站(Python)

快递业务站 题目 快递业务范围有 N 个站点,A 站点与 B 站点可以中转快递,则认为 A-B 站可达, 如果 A-B 可达,B-C 可达,则 A-C 可达。 现在给 N 个站点编号 0、1、…n-1,用 s[i][j]表示 i-j 是否可达, s[i][j] = 1表示 i-j可达,s[i][j] = 0表示 i-j 不可达。 现用二维…...

百度沈抖:文心一言将通过百度智能云对外提供服务

2月17日&#xff0c;在2023 AI工业互联网高峰论坛上&#xff0c;百度智能云宣布“文心一言”将通过百度智能云对外提供服务&#xff0c;为产业带来AI普惠。 百度集团执行副总裁、百度智能云事业群总裁沈抖表示&#xff0c;“文心一言”是基于百度智能云技术打造出来的大模型&a…...

cmd 窗口、记事本打开后一片空白且几秒钟后闪退的问题解决方案汇总

前言 前段时间&#xff0c;电脑忽然出现了问题&#xff0c;首先是通过 微软应用商店 Microsoft Store 下载安装的 Snipaste 截图软件崩溃&#xff0c;不过将其卸载后&#xff0c;通过电脑管家下载后又可以正常使用了。 之后就是突然发现&#xff0c;记事本文本文档不能使用了…...

Linux 安装 SNMP服务

从安装盘IOS中导入安装SNMP. --挂载系统安装盘 [rootnb /]# mount -o loop -t iso9660 /software/radhat.iso /media mount: /dev/loop0 is write-protected, mounting read-only --导入安装包 [rootnb /]# rm -f /etc/yum.repos.d/*.repo [rootnbubackup /]# cat >/etc/yu…...

华为OD机试 - 滑动窗口最大和(Python)

滑动窗口最大和 有一个N个整数的数组,和一个长度为M的窗口。 窗口从数组内的第一个数开始滑动,直到窗口不能滑动为止。 每次滑动产生一个窗口,和窗口内所有数的和, 求窗口滑动产生的所有窗口和的最大值 输入 第一行输入一个正整数N,表示整数个数0 < N < 100000 …...

用Nacos搭建微服务操作

Nacos服务搭建 我们首先在Nacos的GitHub中下载相关的安装文件。https://github.com/alibaba/nacos/releases 但是因为服务器在国外&#xff0c;所以我们直接给大家提供了对应的安装文件。直接解压缩到非中文的目录下&#xff0c;然后启动即可 服务访问的地址是&#xff1a;htt…...

ChatGPT模型采样算法详解

ChatGPT模型采样算法详解 ChatGPT所使用的模型——GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型有几个参数&#xff0c;理解它们对文本生成任务至关重要。其中最重要的一组参数是temperature和top_p。二者控制两种不同的采样技术&#xff0c;用于因果…...

【Unity3d】Unity与iOS通信

在unity开发或者sdk开发经常需要用到unity与oc之间进行交互&#xff0c;这里把它们之间通信代码整理出来。 Unity调用Objective-C 主要分三个步骤&#xff1a; (一)、在xcode中定义要被unity调用的函数 新建一个类&#xff0c;名字可以任意&#xff0c;比如UnityBridge&…...

RDD的持久化【博学谷学习记录】

RDD的缓存缓存: 一般当一个RDD的计算非常的耗时|昂贵(计算规则比较复杂),或者说这个RDD需要被重复(多方)使用,此时可以将这个RDD计算完的结果缓存起来, 便于后续的使用, 从而提升效率通过缓存也可以提升RDD的容错能力, 当后续计算失败后, 尽量不让RDD进行回溯所有的依赖链条, 从…...

Python3 正则表达式

Python3 正则表达式 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块&#xff0c;它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根…...

Qt-基础

Qt1. 概念其他概念对话框模态对话框与非模态对话框事件事件拦截/过滤事件例子鼠标/屏幕使用界面功能qt-designer工具debug目录结构mainwindow控件窗口QMainWindow事件2. 项目概览QOBJECT tree 对象树3. 信号和槽信号函数关联自定义信号和槽函数自定义信号和槽函数1自定义信号和…...

ABB机器人将实时坐标发送给西门子PLC的具体方法示例

ABB机器人将实时坐标发送给西门子PLC的具体方法示例 本次以PROFINET通信为例进行说明,演示ABB机器人将实时坐标发送给西门子PLC的具体方法。 首先,要保证ABB机器人和PLC的信号地址分配已经完成,具体的内容可参考以下链接: S7-1200PLC与ABB机器人进行PROFINET通信的具体方法…...

如何选择wordpress主机/强强seo博客

2019独角兽企业重金招聘Python工程师标准>>> 什么是Shell脚本&#xff1f; Shell脚本&#xff08;英语Shellscript&#xff09;是一种电脑程序与文本文件内容由一连串的shell命令组成经由UnixShell直译其内容后运作被当成是一种脚本语言来设计其运作方式与直译语言相…...

腾讯云备案 网站名称/怎样推广一个产品

论文链接 定义 词汇表VVV&#xff0c;w1⋯wTw_{1} \cdots w_{T}w1​⋯wT​表述词汇表中的单词目标函数&#xff0c;f(wt,⋯,wt−n1)P^(wt∣w1n−1)f\left(w_{t}, \cdots, w_{t-n1}\right)\hat{P}\left(w_{t} | w_{1}^{n-1}\right)f(wt​,⋯,wt−n1​)P^(wt​∣w1n−1​)&…...

攻击网站常用方法/希爱力跟万艾可哪个猛

Java Swing教程 - Java Swing JSpinnerJSpinner组件组合来自JFormattedTextField和可编辑的JComboBox的函数。JSpinner可以有一个选择列表&#xff0c;同时&#xff0c;我们也可以应用一个格式到显示的值。它从选择列表中一次只显示一个值&#xff0c;它允许我们输入一个新值。…...

网站制作多少钱400/企业培训体系搭建

众包测试 什么是众包测试&#xff1f; 众包测试使用的是众多专家测试人员进行手动测试。测试人员旨在发现错误、记录可重现的步骤并提供错误报告。 众包测试有什么好处&#xff1f; 与内部 QA 相比&#xff0c;众包测试是一种具有成本效益的选择。 由于可用的测试人员数量众…...

深圳做网站推广的公司哪家好/徐州百度推广公司

在树的模块中&#xff0c;讲解树的结构化特性。会以MySQL语法树为例&#xff0c;看树是如何在 Amazon AWS 中以超大型数据库查询起到中流砥柱的作用的&#xff0c;后半部分则会拆解 LSM 树在 Apache 项目中的应用。 树和图最大的区别就是有没有环。树是没有环的图。因为没有遍历…...

网站建设的市场规模/企业培训课程清单

刚才跟FantasySoft兄聊天&#xff0c;他说我不该为了翻译而翻译&#xff0c;也应该学习翻译文章中的技术&#xff0c;我觉得也是&#xff0c;同时因为在看《C#技术揭秘》&#xff0c;里面的知识点比较分散&#xff0c;也不知道怎么马上用到实际中去。所以两者结合起来&#xff…...