前言

hello我是bigsai,今天咱们进行JDBC+MySQL实战,非常适合初入门的小伙伴打开新的世界。实现一个增删改查(curd)的例子。先点赞再观看、帅哥靓女养成好习惯!

在这个案例进行之前,你要确保自己电脑上拥有MySQL和IDEA编译器,另外还要安装MySQL数据库连接管理工具Navicat。方能进行以下的操作。

如果以前没见过或者使用过也不要紧,本课程提供傻瓜式教学你只需跟着我的要求来包成功包会。

通过本翩你可以掌握以下内容:

  • MySQL数据库的创建
  • JDBC+MySQL项目的创建
  • JDBC成功对MySQL增删改查

案例分析

本次案例到底是个什么结果呢?本案例实现一个学生信息的管理,即学生个人信息的增删改查。

核心思路拆解

我们该如何设计这个项目呢?

别急别急,听我慢慢说道。对于本案例的实战,旨在实现用Java语言(JDBC)操作MySQL,核心的主轴是MySQL的数据,所以我们从MySQL为起始点入手,整个案例实现的流程大致可以分为:

  • 分析设计需求、创建MySQL数据库和表
  • 创建Java项目,添加JDBC以及Junit单元测试的依赖
  • 编写项目代码,实现JDBC增删改查案例
  • 单元测试

而对于JDBC编程来说,它需要与MySQL进行连接交互,它也有一定流程顺序需要遵守,通常为以下6个流程:

  •  1:注册驱动 (仅仅做一次)
  •  2:建立连接(Connection)
  •  3:创建运行SQL的语句(Statement)
  •  4:运行语句
  •  5:处理运行结果(ResultSet)
  •  6:释放资源

案例涉及知识点

本案例主要涉及的知识点为MySQL和JDBC。而这两个知识点是Java Web开发非常常用的技术,下面我就给你介绍一番。

MySQL

MySQL是当前非常流行的数据库之一,且免费开源,数据库是用来储存数据的,就数据格式而言,有关系型数据和非关系型数据,MySQL是一种关系型数据库。就web方面,MySQL是最好的RDBMS(关系数据库管理系统:Relational Database Management System)之一:MySQL的sql语句是常用关系数据库的标准之一,具有速度快、体积小、成本低等优势,是中小企业以及学习使用的最好方式之一。

在Java中利用JDBC可以快速在应用中使用MySQL。除了DDL(数据库模式定义语言:Data Definition Language)和DML(数据操纵语言:Data Manipulation Language)等传统操作外,你可以通过JDBC使用MySQL的大部分功能。并且MySQL提供索引优化查询速度,利用B+树或哈希方式的索引满足不同场景查询性能的要求。还提供视图、函数、约束、触发器等功能能够使得数据库满足更多的场景使用。而MySQL提供的事务、回滚等机制能够使得数据在安全性一致性方面有更大的保证。



JDBC

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口(位于jdk的java.sql中)。我们通常说的JDBC是面向关系型数据库的,提供了诸如查询、更新、删除、增加数据库中数据的方法。在使用时候需要导入具体的jar包,不同数据库需要导入的jar包不同。



而JDBC主要有以下API:

  • DriverManager:负责加载不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。
  • Driver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。
  • Connection:数据库连接,负责与数据库进行通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement、PreparedStatement等。
  • Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。
  • PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)继承Statement,本案例使用PreparedStatement。
  • CallableStatement:用以调用数据库中的存储过程。
  • SQLException:代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)。

我想现在你对MySQL和JDBC有了更清楚的认识吧,MySQL就是一个数据库供我们使用,而JDBC就是Java使用MySQL的一个工具和桥梁,结合上面知识,下面我们就开始实战吧!

第一关 创建数据库和项目

在实战之前,需要把数据库和项目创建好才能进行JDBC的增删改查。

创建数据库

我们使用Navicat创建数据库,你可能好奇Navicat到底是个什么样的工具,有何作用?

其实Navicat是一个数据库管理工具,它并不能直接修改MySQL的数据和结构,而是经过你的可视化界面操作它帮你执行sql代码,因为考虑到如果直接让你用sql操作数据库,可能不太直观并且上手难度挺大的,通过Navicat管理数据库可以清晰看到数据库结构、数据、设置情况也能够很容易的进行更改,大大提升开发效率一定程度减少错误。可以参考下图:

打开Navicat连接数据库,连接成功的数据库右击创建数据库,数据库名称为:boxuegu,字符集和排序规则使用其默认即可。



然后打开boxuegu数据库,在表的栏目右击新建表,设置id,name,age,high四个字段,其中id设为主键且自增。



保存时候把这张表命名为student,代指学生表。这样,学生表就添加完成了。其中id为自增主键,插入的时候不插入id会自动递增插入,name就是学生的姓名,age表示学生年龄。high表示学生身高,我们用这几个字段表示一个学生信息情况。

当然,如果你不喜欢使用数据库管理工具进行这样操作,更喜欢控制台或者命令行创建数据库以及表格,当然也是可以的:

  1. SET FOREIGN_KEY_CHECKS=0;
  2. -- ----------------------------
  3. -- Table structure for students
  4. -- ----------------------------
  5. DROP TABLE IF EXISTS `student`;
  6. CREATE TABLE `students` (
  7. `id` int(11) NOT NULL AUTO_INCREMENT,
  8. `name` varchar(255) NOT NULL,
  9. `age` int(11) NOT NULL,
  10. `high` int(11) NOT NULL,
  11. PRIMARY KEY (`id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这样我们数据库以及表就创建完成啦,我们下面就要用JDBC对MySQL的这张表进行增删改查实战。让你动手操作数据。

创建项目

我们创建java项目要引入JDBC的依赖,这里我为了更简单不让你去自己找JDBC的jar包,使用Maven的方式引入jar包,所以我们使用IDEA创建Maven项目。

首先打开IDEA,创建Maven项目,点击next。



接着填写GroupId和ArtifactId可以自行填写,本案例填写com和JDBCTest,点击next。



紧接着选择磁盘中一个文件夹作为项目的路径,点击finish项目即创建成功。接着我们需要添加MySQL的JDBC依赖以及Junit单元测试依赖,在项目pom.xml文件中添加以下内容:

  1. <dependencies>
  2. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  3. <dependency>
  4. <groupId>mysql</groupId>
  5. <artifactId>mysql-connector-java</artifactId>
  6. <version>5.1.49</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>junit</groupId>
  10. <artifactId>junit</artifactId>
  11. <version>4.12</version>
  12. <scope>test</scope>
  13. </dependency>
  14. </dependencies>

然后项目就成功创建啦,紧接着创建以下类:

  • main的java目录下:sqlmanage类,用于编写sql相关语句
  • main的java目录下:student类,表示student实体与MySQL的student
  • test的java目录下:test类,用于编写单元测试。

有了JDBC的环境只需编写正确的代码即可运行!对于项目最终的目录是这样的:

第二关 JDBC插入和查询

我们上面有讲过进行JDBC操作的6个步骤,但有些步骤不需要重复进行,比如加载驱动、建立连接、关闭等可以复用。此外,我们在项目中将MySQL中的数据和Java中的对象进行映射(即MySQL表中每一条记录可以生成一个Java对象),项目中函数的设计基于Java对象而非MySQL中数据字段,降低项目中各模块的耦合性。

预备工作

首先在student 类中编写以下内容,该类与MySQL数据库的student表对应。

  1. public class student {
  2. private int id;//与student表得id对应
  3. private String name;//与student表得name对应
  4. private int age;//年龄与student表得age对应
  5. private int high;//身高与student表high对应
  6. //带id构造方法(查询时使用)
  7. public student(int id, String name, int age, int high) {
  8. this.id = id;
  9. this.name = name;
  10. this.age = age;
  11. this.high = high;
  12. }
  13. //不带id得构造方法(插入时候使用)
  14. public student(String name, int age, int high) {
  15. this.name = name;
  16. this.age = age;
  17. this.high = high;
  18. }
  19. //toString()方法,控制台打印测试使用
  20. @Override
  21. public String toString() {
  22. return "student{" +
  23. "id=" + id +
  24. ", name='" + name + '\'' +
  25. ", age=" + age +
  26. ", high=" + high +
  27. "}\n";
  28. }
  29. //get set 方法,设置值,取值使用
  30. public int getId() {
  31. return id;
  32. }
  33. public void setId(int id) {
  34. this.id = id;
  35. }
  36. public String getName() {
  37. return name;
  38. }
  39. public void setName(String name) {
  40. this.name = name;
  41. }
  42. public int getAge() {
  43. return age;
  44. }
  45. public void setAge(int age) {
  46. this.age = age;
  47. }
  48. public int getHigh() {
  49. return high;
  50. }
  51. public void setHigh(int high) {
  52. this.high = high;
  53. }
  54. }

紧接着处理sqlmanage类,我们将JDBC的一些操作封装到这里面。在初始化函数中进行注册驱动、建立连接的操作。在sqlmanage中编写以下内容:

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.SQLException;
  4. public class sqlmanage {
  5. private Connection con=null;//数据库连接,从DriverManager的方法获得,用以产生执行sql的PreparedStatement
  6. public sqlmanage() throws SQLException, ClassNotFoundException {
  7. //step1 加载数据库驱动
  8. Class.forName("com.mysql.jdbc.Driver");
  9. System.out.println("数据库驱动加载成功");
  10. //step2 连接数据库
  11. this.con = DriverManager.getConnection("jdbc:mysql://localhost:3306/boxuegu?useSSL=false","root","bigsai66");
  12. System.out.println("数据库连接成功");
  13. }
  14. public void close() throws SQLException {
  15. this.con.close();;
  16. }
  17. }

其中通过Connection建立连接,Connection是一个接口类。其功能是与数据库进行连接(会话)。建立Connection接口类对象:

Connection conn =DriverManager.getConnection(url, user, password);

其中url的格式要求为:

  • jdbc:mysql://<host>:<port>/<database_name>?property1=value1&property2=value2…
  • host为主机地址或者域名,本地可以用localhost或127.0.0.1.
  • database_name为MySQL中创建数据库名,本案例中数据库名为boxuegu。
  • property用来配置一些例如编码、时区等属性。

其中user为MySQL登录用户名,password为MySQL登录密码。

单个插入

MySQL插入的sql语句很简单:

  1. insert into 表名
  2. ( 字段1, 字段2,...字段n)
  3. value
  4. ( 1, 2,...值n );

我们JDBC中进行插入操作使用的sql满足上述规范,在sqlmanage中编写insertStudent(student student)函数用来插入单个学生记录,具体函数如下:

  1. public void insertStudent(student student) throws SQLException {
  2. //创建sql语句
  3. String sql="insert into student(name,age,high)value(?,?,?)";
  4. //PreparedStatement能够对SQL语句进行预编译,这样防止了 SQL注入 提高了安全性。
  5. PreparedStatement ps = con.prepareStatement(sql);
  6. ps.setString(1,student.getName());
  7. ps.setInt(2,student.getAge());
  8. ps.setInt(3,student.getHigh());
  9. //执行 sql 因为这里插入操作就不对结处理
  10. ps.executeUpdate();
  11. ps.close();
  12. }

在test类中的编写insertTest()函数,用来测试插入三条学生的记录:

  1. @Test
  2. public void insertTest() throws SQLException, ClassNotFoundException {
  3. sqlmanage sqlmanage=new sqlmanage();
  4. sqlmanage.insertStudent(new student("bigsai",22,180));
  5. sqlmanage.insertStudent(new student("bigpian",21,165));
  6. sqlmanage.insertStudent(new student("doudou",20,160));
  7. }

执行完毕刷新navicat中student表你会发现数据被成功插入了:

批量插入

如果同时有100组数据或者更多若干组数据让你插入你会怎么操作?

  • 循环一个一个的插入

  • 批处理一次插入多个



    批量处理相比循环的单个单个处理起来省了很多时间,提高了系统效率。所以当遇到较多数据时可以选择多个插入。

批量插入实现也很容易,在sqlmanage中编写insertStudents(student students[])函数用来批量插入学生记录:

  1. public void insertStudents(student students[]) throws SQLException {
  2. this.con.setAutoCommit(false);//不自动提交
  3. String sql="insert into student(name,age,high)value(?,?,?)";
  4. PreparedStatement ps =con.prepareStatement(sql);
  5. for(int i=0;i<students.length;i++)
  6. {
  7. ps.setString(1,students[i].getName());
  8. ps.setInt(2,students[i].getAge());
  9. ps.setInt(3,students[i].getHigh());
  10. ps.addBatch();
  11. if(i%1000==0)
  12. {
  13. ps.executeBatch();
  14. }
  15. }
  16. ps.executeBatch();
  17. con.commit();
  18. ps.close();
  19. }

其中:

  • con.setAutoCommit(false)意为不自动提交,因为我们在批量处理的时候一般手动提交提高效率。
  • 主要通过PreparedStatement对象的addBatch()进行多组插入而未提交。
  • 如果为设置不自动提交当执行executeBatch()时就会提交,但为了减小提交次数已经设置不自动提交。当且仅当con.commit()执行才会真的提交到MySQL中。

接着在test单元测试中编写insertStudentsTest()函数进行测试批量插入:

  1. @Test
  2. public void insertStudentsTest() throws SQLException, ClassNotFoundException {
  3. sqlmanage sqlmanage=new sqlmanage();
  4. student students[]=new student[5];
  5. for(int i=0;i<students.length;i++)
  6. {
  7. students[i]=new student("路人"+i,12,156);
  8. }
  9. sqlmanage.insertStudents(students);
  10. }

执行完毕后你可以看到数据被成功插入MySQL中:

查询数据

查询的使用频率要远比其他的操作多,虽然有些复杂表的查询可能会让人比较头疼,但基础的sql查询还是比较简单,其语法格式为:

  1. select 字段1,字段2,…… from 表名 [where 条件] //方式1
  2. select * from 表名 [where 条件] //方式2

其中如果没有where条件那么就默认查询整张表的内容,我们在这里根据此条件查询所有记录:查询返回年龄小于21岁的所有学生

首先在sqlmanage中编写getallstudent()函数,用来查询student表中所有age小于21的记录,并把查询的数据最终以List<studnet>类型返回:

  1. public List<student> getallstudent() throws SQLException {
  2. List<student>list=new ArrayList<student>();//返回的结果
  3. String sql = "select * from student where age < 21";
  4. PreparedStatement ps = con.prepareStatement(sql);
  5. ResultSet resultSet=ps.executeQuery();//结果集
  6. while(resultSet.next())//遍历
  7. {
  8. int id=resultSet.getInt(1);
  9. String name=resultSet.getString(2);
  10. int age=resultSet.getInt(3);
  11. int high=resultSet.getInt(4);
  12. list.add(new student(id,name,age,high));
  13. }
  14. ps.close();
  15. return list;
  16. }

在前面讲的插入的过程返回值其实不需要特别处理,因为返回是插入成功与否的消息,而在查询的步骤就要严格的跟着JDBC的6个步骤来—因为需要对返回的数据进行处理。我们主要通过ResultSet处理返回的数据。

在对ResultSet进行迭代遍历取值的过程中,通过getXXX(int index)的方法取值并自动转换为java对应的数据类型。而index为MySQL数据库表格列的编号,也是数据在ResultSet中的对应序列号。

通过上面的函数在test单元测试中编写selectTest() 测试函数在控制台打印从数据库中查询所有age小于21的记录:

  1. @Test
  2. public void selectTest() throws SQLException, ClassNotFoundException {
  3. sqlmanage sqlmanage=new sqlmanage();
  4. List<student>list=sqlmanage.getallstudent();
  5. System.out.println(list.toString());
  6. }

可以看到数据被成功查询:

JDBC修改和删除

修改数据

对某个确定的记录修改,我们一般根据这条信息的主键作为条件进行修改。而修改一般都需要条件语句where,否则修改整个表的内容。修改的MySQL语句为:

  1. update 表名 set 字段 = [where条件]; -- 建议都有where: 不然的话会修改每一条数据

这里我们假设将上述student表中所有age为12的记录的name设置为xiaoming。在sqlmanage中编写update()函数用来进行修改:

  1. public void update() throws SQLException {
  2. String sql = "update student set name='xiaoming' where age=12";
  3. PreparedStatement ps = con.prepareStatement(sql);
  4. ps.executeUpdate();
  5. ps.close();
  6. }

在tes单元测试中编写updateTest()函数调用sqlmanage类的update()方法,将student表中所有age为12的记录的name设为xiaoming。

  1. @Test
  2. public void updateTest() throws SQLException, ClassNotFoundException {
  3. sqlmanage sqlmanage=new sqlmanage();
  4. sqlmanage.update();
  5. }

刷新Navicat 你会发现数据被成功更新了:

删除数据

JDBC删除也是常用的一种操作,但删除的操作一定要谨慎,谨防误删、多删等操作。删除的语句一般都有where条件,否则会删除所有记录。删除的sql语句为:

  1. delete from 表名 [where条件];

我们编写一个按照id删除记录的函数,在sqlmanage中编写deletebyid(int id),该函数意为根据id删除student表中对应id的一条记录:

  1. public void deletebyid(int id) throws SQLException {
  2. String sql = "delete from student where id = ?";
  3. PreparedStatement ps = con.prepareStatement(sql);
  4. ps.setInt(1,id);
  5. ps.executeUpdate();
  6. ps.close();
  7. }

这么一个根据id删除的函数就写好了,我们在test单元测试中编写deleteTest()测试函数删除student表中id为1的那条记录。:

  1. @Test
  2. public void deleteTest() throws SQLException, ClassNotFoundException {
  3. sqlmanage sqlmanage=new sqlmanage();
  4. sqlmanage.deletebyid(1);
  5. }

执行完成查看数据库发现id为1的记录(name为bigsai的记录)被成功删除:

总结与拓展

总结

好了,本次JDBC+MySQL的增删改查的案例就到这里了。回顾本课程你是不是觉得一切好像没那么难,只需要按部就班就可以完成整个案例。我们回顾一下整个流程:

  • 创建数据库和表
  • 创建项目添加JDBC和Junit单元测试依赖
  • 编写项目代码(JDBC 6个步骤)
  • 单元测试

每个流程代表一个知识点,其中最重要的就是要熟练掌握JDBC编程的流程了,掌握其方法,如果有所遗忘还得多多回顾。

拓展

MySQL本案例只使用了四种基本操作对应的sql语句:insert(插入),select(查询),update(修改),delete(删除)。如果需要深入学习MySQL的话很多方面需要深入挖掘,从sql语句上你还需要去学习MySQL复杂查询例如关联查询、分组、排序等。从性能上要关注MySQL索引类型以及了解其底层数据结构与优势。从安全性和数据一致性你要去了解学习MySQL脏读、幻读等以及各种锁的使用……

而JDBC算是在Java中一种很原生处理MySQL的方式了,而到后面随着学习的深入你会接触两个ORM框架—MybatisHibernate,当然在国内Mybatis要更流行一些。这两个框架是对JDBC的封装,让开发者能够更容易的在应用中使用MySQL等关系数据库,在Web项目有着广泛的应用,无论是以前的SSH(Spring,Strus2,Hibernate)和现在流行的SSM(Spring,SpringMVC,Mybatis),其作为持久层的框架都是基于对JDBC的封装处理。所以日后在学习新框架同时要记得回顾JDBC的内容,多掌握JDBC底层原理!

好啦,下课!咱们后会有期!

最后,本文收录在公众号:bigsai 中,更多精彩与资料与您分享,欢迎mark与您一起成长!同时也收录在博学谷以关卡的新形式展现,欢迎尝试!

JDBC+MySQL入门实战(实现CURD的例子)的更多相关文章

  1. Mysql入门实战中

    前面一章主要解说了mysql的入门学习.包括数据库,表的管理,以及对数据的增删改,本章主要介绍mysql最重要的语句select的使用方法.将select的大部分使用方法进行分别解说. 全部代码下载( ...

  2. mysql 入门 jdbc

    在java程序中连接mysql,先要到mysql的网站上面去下载驱动,并且安装,默认安装在c盘(我的都是默认安装,目录为C:\Program Files\MySQL\MySQL Connector J ...

  3. JDBC快速入门(附Java通过jar包连接MySQL数据库)

    •通过jar包连接mysql数据库 •下载jar包 Java 连接 MySQL 需要驱动包,官网下载地址为MySQL驱动包官网下载,选择适合的jar包版本进行安装 (记得安装的地址,下面导入包时会用到 ...

  4. Spark入门实战系列--3.Spark编程模型(上)--编程模型及SparkShell实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark编程模型 1.1 术语定义 l应用程序(Application): 基于Spar ...

  5. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  6. Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .SparkSQL的发展历程 1.1 Hive and Shark SparkSQL的前身是 ...

  7. JDBC快速入门教程

    JDBC是什么? JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API通常与数据库使用于: 连 ...

  8. Activity工作流(2)-入门安装运行第一个例子

    转: Activity工作流(2)-入门安装运行第一个例子 置顶 2017年05月24日 15:58:50 li_ch_ch 阅读数:24432   版权声明:本文为博主原创文章,未经博主允许不得转载 ...

  9. mysql入门与进阶

    MySQL入门与进阶 需求:对一张表中的数据进行增删改查操作(CURD) C:create 创建 U:update 修改 R:read 读|检索 查询 D:delete 删除涉及技术:数据库 1.数据 ...

随机推荐

  1. xilinx fpga中块ram的使用——简单双端口ram的使用

    在简单双端口ram中最简单有9个端口:分别是 clka  为输入端口的时钟 wea  读写控制端,高为写,低为读 addra 写地址 dina  待写入的数据 clkb 为输出端口的时钟的 addrb ...

  2. 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载

    目录 1. Streams简介 1.1 创建Stream 1.2 Streams多线程 1.3 Stream的基本操作 Matching Filtering Mapping FlatMap Reduc ...

  3. rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm出现error: open of vsftpd-3.0.2-22.el7.x86_64.rpm failed: No such file or directory的解决方法

    情况一: 出现如图问题, 我当时的问题是通过安装rpmbuild工具软件解决的 以前制作rpm时,没有遇到过这个问题,几经搜索也没有解决.后来发现当前的centos没有安装 rpmbuild 工具软件 ...

  4. acwing 173. 矩阵距离(bfs)

    给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...

  5. 爬虫管理平台以及wordpress本地搭建

    爬虫管理平台以及wordpress本地搭建 学习目标: 各爬虫管理平台了解 scrapydweb gerapy crawlab 各爬虫管理平台的本地搭建 Windows下的wordpress搭建 爬虫 ...

  6. PHP 表单和用户输入讲解

    PHP 表单和用户输入 PHP 中的 $_GET 和 $_POST 变量用于检索表单中的信息,比如用户输入. PHP 表单处理 有一点很重要的事情值得注意,当处理 HTML 表单时,PHP 能把来自 ...

  7. Python List remove()方法

    描述 remove() 函数用于移除列表中某个值的第一个匹配项.高佣联盟 www.cgewang.com 语法 remove()方法语法: list.remove(obj) 参数 obj -- 列表中 ...

  8. PHP isset() 函数

    isset() 函数用于检测变量是否已设置并且非 NULL.高佣联盟 www.cgewang.com 如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE. ...

  9. Skill 脚本演示 ycLayerExcel.il

    https://www.cnblogs.com/yeungchie/ ycLayerExcel.il 用于 Tape-out 流程,获取当前用到的所有 lpp 等信息,并按照自定格式输出为 Excel ...

  10. 一本通 1783 矩阵填数 状压dp 容斥 计数

    LINK:矩阵填数 刚看到题目的时候感觉是无从下手的. 可以看到有n<=2的点 两个矩形. 如果只有一个矩形 矩形外的方案数容易计算考虑 矩形内的 必须要存在x这个最大值 且所有值<=x. ...