目录

  • JDBC介绍
  • JDBC访问数据库编码步骤
    • 1. 准备好相应的jar包
    • 2. 创建lib目录
    • 3. 导入下载好的jar包
    • 4. 简单的CURD
    • 5. PreparedStatment完成CURD
      • 5.1 PreparedStatment和Statement的区别
      • 5.2PrepareStatement的优点
      • 5.3具体代码实现
    • 6.DAO模式


JDBC介绍

JDBC(Java DataBase Connectivity, Java数据库连接),是一种用于执行SQL语句的JavaAPI,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。

#mermaid-svg-GGZJJczXe5bgK5HW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GGZJJczXe5bgK5HW .error-icon{fill:#552222;}#mermaid-svg-GGZJJczXe5bgK5HW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GGZJJczXe5bgK5HW .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GGZJJczXe5bgK5HW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GGZJJczXe5bgK5HW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GGZJJczXe5bgK5HW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GGZJJczXe5bgK5HW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GGZJJczXe5bgK5HW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GGZJJczXe5bgK5HW .marker.cross{stroke:#333333;}#mermaid-svg-GGZJJczXe5bgK5HW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GGZJJczXe5bgK5HW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GGZJJczXe5bgK5HW .cluster-label text{fill:#333;}#mermaid-svg-GGZJJczXe5bgK5HW .cluster-label span{color:#333;}#mermaid-svg-GGZJJczXe5bgK5HW .label text,#mermaid-svg-GGZJJczXe5bgK5HW span{fill:#333;color:#333;}#mermaid-svg-GGZJJczXe5bgK5HW .node rect,#mermaid-svg-GGZJJczXe5bgK5HW .node circle,#mermaid-svg-GGZJJczXe5bgK5HW .node ellipse,#mermaid-svg-GGZJJczXe5bgK5HW .node polygon,#mermaid-svg-GGZJJczXe5bgK5HW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GGZJJczXe5bgK5HW .node .label{text-align:center;}#mermaid-svg-GGZJJczXe5bgK5HW .node.clickable{cursor:pointer;}#mermaid-svg-GGZJJczXe5bgK5HW .arrowheadPath{fill:#333333;}#mermaid-svg-GGZJJczXe5bgK5HW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GGZJJczXe5bgK5HW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GGZJJczXe5bgK5HW .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GGZJJczXe5bgK5HW .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GGZJJczXe5bgK5HW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GGZJJczXe5bgK5HW .cluster text{fill:#333;}#mermaid-svg-GGZJJczXe5bgK5HW .cluster span{color:#333;}#mermaid-svg-GGZJJczXe5bgK5HW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GGZJJczXe5bgK5HW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

JDBC
java应用程序
mysql

JDBC访问数据库编码步骤

1:加载一个Driver驱动

2:创建数据库连接(Connection)

3:创建SQL命令发送器Statement

4:通过Statement发送SQL命令并得到结果

5:处理结果(select语句)

6:关闭数据库资源ResultSet Statement Connection

1. 准备好相应的jar包

1.进入如下网址
https://mvnrepository.com/artifact/mysql/mysql-connector-java
进入如下页面
2.选择相应的jar包
点击相应的版本(我的mysql版本是8,所以这里我用的是8.0.11)

3.点击图中标识的部分进行下载

2. 创建lib目录

3. 导入下载好的jar包

1.将jar包放入到创建好的lib目录中

2.给当前项目添加依赖(告诉当前项目/模块可以依赖jar文件中的代码)

3.如下图所示jar前面出现>表示添加依赖成功

4. 简单的CURD

1.加载驱动

// An highlighted block
Driver driver =new com.mysql.cj.jdbc.Driver();

2.注册驱动

// An highlighted block
DriverManager.registerDriver(driver);

3.获得链接 Connection
url为统一资源定位符 定位我们要连接的数据库的
1协议 jdbc:mysql
2IP 127.0.0.1/localhost
3端口号 3306
4数据库名字 mydb
5参数
协议://ip:端口/资源路径?参数名=参数值&参数名=参数值&…
jdbc:mysql://127.0.0.1:3306/mydb
user为我们数据库的账户
password为我们数据库的密码

// An highlighted block
String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
String user="root";
String password="123456";
Connection connection =DriverManager.getConnection(url, user,password );

4.获得语句对象 Statment

// An highlighted block
Statement statement = connection.createStatement();

5.执行SQL语句,返回结果
statement.executeUpdate处理插入删除更新语句

sql为我们要执行的sql语句,statement.executeUpdate处理插入删除更新语句,查询语句需要用statement.executeQuery

// An highlighted block
String sql="insert into dept values('王五',1);";
int rows = statement.executeUpdate(sql);
System.out.println("影响数据行数为:"+rows);

statement.executeQuery处理查询语句

String sql="select * from emp";
ResultSet resultSet = statement.executeQuery(sql);

执行查询语句时,得到的resultSet是数据库结果集的数据表,通常通过执行查询数据库的语句生成。我们还需对resultSet进行遍历才能得到相应的数据

String sql="select * from emp";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){int age = resultSet.getInt("age");String name = resultSet.getString("name");System.out.println("年龄为"+age+"名字为"+name);}

6.释放资源
操作完后我们要释放资源,另外释放资源要有先后顺序,后获得的先关闭,先获得的后关闭.

statement.close();
connection.close();

7.插入删除更新完整代码

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.Statement;public class TestJDBC {public static void main(String[] args) throws Exception {Driver driver =new com.mysql.cj.jdbc.Driver();DriverManager.registerDriver(driver);String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";String user="root";String password="root";Connection connection =DriverManager.getConnection(url, user,password );Statement statement = connection.createStatement();String sql="insert into dept values('王五',1);";int rows = statement.executeUpdate(sql);System.out.println("影响数据行数为:"+rows);statement.close();connection.close();}
}

8.查询语句完整代码

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.Statement;public class TestJDBC {public static void main(String[] args) throws Exception {Driver driver =new com.mysql.cj.jdbc.Driver();DriverManager.registerDriver(driver);String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";String user="root";String password="root";Connection connection =DriverManager.getConnection(url, user,password );Statement statement = connection.createStatement();String sql="select * from people";ResultSet resultSet = statement.executeQuery(sql);while(resultSet.next()){int age = resultSet.getInt("age");String name = resultSet.getString("name");System.out.println("年龄为"+age+"名字为"+name);}statement.close();connection.close();}
}

5. PreparedStatment完成CURD

5.1 PreparedStatment和Statement的区别

前面我们注意到我们获取语句对象是用statement获取的(也就是获取sql语句和获取mysql的账户密码URL等属性),但是在使用Statment获取sql语句的使用会出现sql注入攻击的问题,sql注入攻击是指是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。简单来说我们可以在不知用户密码的情况下登录账户

通过上面的语句我们可以看到无论密码正确与否都会成功登录,那么给用户带来的风险是非常大的

那么PreparedStatment和Statement的区别什么呢?

从上面的图片中我们可以看出PreparedStatement继承了Statement,其中prepareStatment对象在set***方法上,会对单引号进行转译处理,也就是说,?中的数据的单引号 ‘ 会被转义成 \’,这样就单引号就不会破坏sql语句的结构,这样就不会出现输入错误密码也能登录账户的问题

5.2PrepareStatement的优点

PreparedStatment安全性高,可以避免SQL注入
PreparedStatment简单不繁琐,不用进行字符串拼接
PreparedStatment性能高,用在执行多个相同数据库DML操作时,可以减少sql语句的编译次数

5.3具体代码实现

5.3.1向表中加入数据
在这里我们新引入了一点知识,用 Class.forName(driver);代码可以实现创建驱动和注册驱动节省代码。,其中的driver就是"com.mysql.cj.jdbc.Driver"。


public static void testAdd(){Connection connection = null;PreparedStatement preparedStatement=null;try{Class.forName(driver);connection = DriverManager.getConnection(url, user,password);String sql="insert into people values(?,?)";preparedStatement = connection.prepareStatement(sql)//设置参数preparedStatement.setString(1,"王五");preparedStatement.setString(2,"1" );//执行CURDint rows =preparedStatement.executeUpdate();// 这里不需要再传入SQL语句System.out.println(rows);}catch (Exception e){e.printStackTrace();}finally {if(null != preparedStatement){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(null != connection){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}

PreparedStatement不是直接使用一条sql完成操作,而是用?来代替要传入的值,然后在通过set###方法进行设置,这里要注意我们可以根据我们要传入的参数类型进行设置set###方法,比如传入Int值用setInt,String用setString,其它的一样,当然你也可以使用setObject设置,可以通用
5.3.2修改表中的数据

 public static void testUpdate(){Connection connection = null;PreparedStatement preparedStatement=null;try{Class.forName(driver);connection = DriverManager.getConnection(url, user,password);String sql="update people set age =?  where name =?";preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句//设置参数preparedStatement.setString(1,"2");preparedStatement.setString(2,"王五" );//执行CURDint rows =preparedStatement.executeUpdate();// 这里不需要再传入SQL语句System.out.println(rows);}catch (Exception e){e.printStackTrace();}finally {if(null != preparedStatement){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(null != connection){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}

5.3.3删除表中的数据

 Connection connection = null;PreparedStatement preparedStatement=null;try{Class.forName(driver);connection = DriverManager.getConnection(url, user,password);String sql="delete from people where name =?";preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句//设置参数preparedStatement.setString(1,"王五");//执行CURDint rows =preparedStatement.executeUpdate();// 这里不需要再传入SQL语句System.out.println(rows);}catch (Exception e){e.printStackTrace();}finally {if(null != preparedStatement){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(null != connection){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}

5.3.4查询表中的数据

public static void testQuery(){Connection connection = null;PreparedStatement preparedStatement=null;ResultSet resultSet=null;try{Class.forName(driver);connection = DriverManager.getConnection(url, user,password);String sql="select * from people where name =?";preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句//设置参数preparedStatement.setString(1,"张三");//执行CURDresultSet = preparedStatement.executeQuery();// 这里不需要再传入SQL语句while(resultSet.next()){int age = resultSet.getInt("age");String name = resultSet.getString("name");System.out.println("姓名为"+name+""+"年龄为"+age);}}catch (Exception e){e.printStackTrace();}finally {if(null != resultSet){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(null != preparedStatement){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(null != connection){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}// 遍历集合}

5.3.5全部完整代码

import java.sql.*;public class abc{private static String driver ="com.mysql.cj.jdbc.Driver";private static String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";private static String user="root";private static String password="123456";public static void main(String[] args) {//testAdd();//testUpdate();//testDelete();testQuery();}public static void testAdd(){Connection connection = null;PreparedStatement preparedStatement=null;try{Class.forName(driver);connection = DriverManager.getConnection(url, user,password);String sql="insert into people values(?,?)";preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句//设置参数preparedStatement.setString(1,"王五");preparedStatement.setString(2,"1" );//执行CURDint rows =preparedStatement.executeUpdate();// 这里不需要再传入SQL语句System.out.println(rows);}catch (Exception e){e.printStackTrace();}finally {if(null != preparedStatement){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(null != connection){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}public static void testUpdate(){Connection connection = null;PreparedStatement preparedStatement=null;try{Class.forName(driver);connection = DriverManager.getConnection(url, user,password);String sql="update people set age =?  where name =?";preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句//设置参数preparedStatement.setString(1,"2");preparedStatement.setString(2,"王五" );//执行CURDint rows =preparedStatement.executeUpdate();// 这里不需要再传入SQL语句System.out.println(rows);}catch (Exception e){e.printStackTrace();}finally {if(null != preparedStatement){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(null != connection){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}public static void testDelete(){Connection connection = null;PreparedStatement preparedStatement=null;try{Class.forName(driver);connection = DriverManager.getConnection(url, user,password);String sql="delete from people where name =?";preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句//设置参数preparedStatement.setString(1,"王五");//执行CURDint rows =preparedStatement.executeUpdate();// 这里不需要再传入SQL语句System.out.println(rows);}catch (Exception e){e.printStackTrace();}finally {if(null != preparedStatement){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(null != connection){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}public static void testQuery(){Connection connection = null;PreparedStatement preparedStatement=null;ResultSet resultSet=null;try{Class.forName(driver);connection = DriverManager.getConnection(url, user,password);String sql="select * from people where name =?";preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句//设置参数preparedStatement.setString(1,"张三");//执行CURDresultSet = preparedStatement.executeQuery();// 这里不需要再传入SQL语句while(resultSet.next()){int age = resultSet.getInt("age");String name = resultSet.getString("name");System.out.println("姓名为"+name+""+"年龄为"+age);}}catch (Exception e){e.printStackTrace();}finally {if(null != resultSet){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(null != preparedStatement){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(null != connection){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}}

6.DAO模式

DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。简单来说就是创建一个接口里边有实现方法,在创建一个表的实现类,类中有表中的具体属性
从以上 DAO 模式使用可以看出,DAO 模式的优势就在于它实现了两次隔离。

1、隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
2、隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由 MySQL 变成 Oracle 只要增加 DAO 接口的新实现类即可,原有 MySQ 实现不用修改。这符合 “开-闭” 原则。该原则降低了代码的藕合性,提高了代码扩展性和系统的可移植性。

DAO 模式需要由以下几部分组成。

1、DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。
2、DAO 实现类: 针对不同数据库给出DAO接口定义方法的具体实现。
3、实体类:用于存放与传输对象数据,类中的属性和表中的属性相同。
4、数据库连接和关闭工具类: 避免了数据库连接和关闭代码的重复使用,方便修改。
实体类:

import java.io.Serializable;public class People implements Serializable {private String name;private Integer age;public People(String name, Integer age) {this.name = name;this.age = age;}public People() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "People{" +"name='" + name + '\'' +", age=" + age +'}';}
}

DAO接口:

public interface PeopleDao {int addpeople(People people);
}

DAO实现类:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class PeopleDaoImpl implements PeopleDao {private static String driver = "com.mysql.cj.jdbc.Driver";private static String url = "jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";private static String user = "root";private static String password = "123456";public int addpeople (People people){Connection connection = null;PreparedStatement preparedStatement = null;int rows = 0;try {Class.forName(driver);connection = DriverManager.getConnection(url, user, password);String sql = "insert into emp values(?,?)";preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句//设置参数preparedStatement.setObject(1, people.getName());preparedStatement.setObject(2, people.getAge());//执行CURDrows = preparedStatement.executeUpdate();// 这里不需要再传入SQL语句} catch (Exception e) {e.printStackTrace();} finally {if (null != preparedStatement) {try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if (null != connection) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}return rows;}
}

创建主方法调用即可

 People people = new People("王五", 1);PeopleDaoImpl peopleDao= new PeopleDaoImpl();peopleDao.addpeople(people);

以上就是文章的全部内容,本文所有的代码均是在作者电脑是哪个运行之后才放上去的可直接复制使用,随着作者以后技术的精进会继续完善文章,改文章可能也会有错误的地方,希望大家能给我留言我会及时做出修改,欢迎大家的批评指正。

转载文章请注明出处。

JDBC连接数据库详细讲解及代码演示相关推荐

  1. 【OS系列-2】- 进程详细讲解(代码示例)

    进程 进程详细讲解(代码示例) 进程 示例代码 创建进程的具体过程? 执行 fork()的时候系统做了什么? 进程间通信 管道 消息队列 共享内存 信号量 套接字 进程间同步 信号量 文件锁 无锁 C ...

  2. lamport面包店算法详细讲解及代码实现

    lamport面包店算法详细讲解及代码实现 1 算法详解 1.1 一个较为直观的解释 1.2 Lamport算法的时间戳原理 1.3 Lamport算法的5个原则 1.4 一个小栗子 2 算法实现 3 ...

  3. linux下的fgetc()与fputc()函数详细介绍及代码演示

    linux下的标准I/O的fgetc()与fputc()函数详细介绍及代码演示 文章目录 前言 一.fgetc()用法介绍 二.fputc()用法介绍 代码演示 总结 前言 在C语言中,读写文件比较灵 ...

  4. 深度学习:NiN(Network In Network)详细讲解与代码实现

    深度学习:NiN(Network In Network)详细讲解与代码实现 网络核心思想 1*1卷积 NiN块的作用 全局池化(Global Average Pooling) 基于NiN的服装分类(P ...

  5. Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)

    Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) Java对象 转 JSON字符串 JAVA对象转MAP Map转java对象 List转map List和Map ...

  6. JDBC连接数据库详细步骤

    一.先创建一个项目 二.打开数据库并启动连接 (我是在IDEA中写的,提前导包) 三.不会导包就在Maven中导,在pom.xml中的dependencise放,版本号看自己要高版本还是低版本.放进去 ...

  7. HMM详细讲解与代码的实现

    #写在前面 老习惯,正文之前瞎扯一通.HMM学了很久,最初是在<统计学自然语言处理>里面就学到了相关内容,并且知道HMM CRF一直都是NLP比较底层比较基础且较为有效的算法模型(虽然感觉 ...

  8. Python的简单代码:两天肝出画函数图像(散点图)的程序(不用matplotlib)(含白菜也能看懂的超超超详细讲解和源代码哦)

    [ 原创作者:小康2021 ](12.08已更新) 该程序(玩具)基本上支持任何普通函数和 math 模块中的函数,具体操作说明见下面的效果图.博主能力有限(所以初学者百分之百也能看懂我的代码),爆肝 ...

  9. 数学建模学习(29):matlab求解微分方程组详细讲解,代码+案例讲解,学不会找我!

    文章目录 前言 求解微分方程组 求解矩阵微分方程组 总结 前言 上一篇我已经详细讲过求微分方程,这一篇是对上一篇的补充,也就是变得稍微复杂一点,就是要求方程组了,如果你学会了上一篇,那么求解方程组其实 ...

最新文章

  1. mysql \g和\G的作用
  2. 阿里云云原生网关,开启下一代网关新进程
  3. access开发精要(3)-子数据表
  4. JavaScript高级day01-AM【WebStrom安装、数据类型分类及判断、数据-内存-变量、引用变量赋值、对象的组成】
  5. 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...
  6. linux 打zip gz tar,linux把文件压缩成.tar.gz的命令 | PT Ubuntu Blog
  7. stdio.h与conio.h
  8. [原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等...
  9. Python之基本数据类型set常用基本方法简述
  10. linux下安装卸载永中office步骤,永中集成Office For Linux安装图文指南及简介
  11. python 包之 Pygame 游戏开发教程
  12. python删除数组元素_如何删除numpy数组中的特定元素
  13. 【日常】CCB网上银行“云宠物”喂食自动化脚本
  14. 三相差分编码器转成脉冲信号或集电极开路转换模块
  15. 普元中间件Primeton AppServer6.5安装(Windows)
  16. 计算机教学在教学方面的作用,浅谈信息技术在教学中的重要作用
  17. 17_微信小程序之抖音微视无限滑动视频列表自定义组件编写
  18. Python爬虫(2.网络爬虫的实现原理及技术)
  19. 【存储】GPFS简介及搭建
  20. 麦子:我奋斗了18年才和你坐在一起喝咖啡

热门文章

  1. [建立服务器系列]关于网友捐款(by cuishui)
  2. 汉字转化为拼音(php版)
  3. HTML中的table表格布局
  4. python计算某个数的阶乘
  5. 巨杉数据库与广电运通完成产品兼容认证
  6. PowerMILL四轴五轴编程加工视频教程
  7. 面试中项目经历该怎么叙述
  8. 华为鲁勇:自己做的降落伞自己先跳 华为云这样赢得客户信赖
  9. 利用STM32的定时器中断功能编写线阵CCD(ILX554B)的驱动时序
  10. 学校计算机维修结算报告,计算机二级考试真题-Word-经费联审结算单