作者小头像 Lv.2
82 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
0
42
25
15
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

发布时间 2021/10/26 10:23:19 最后回复 chen123123 2021/11/06 13:35:02 版块 社区活动
6605 40 0
发布时间 2021/09/06 09:50:21 最后回复 爱学习的多宝 2021/11/03 21:04:04 版块 社区活动
7073 134 0
发布时间 2021/09/06 09:50:21 最后回复 爱学习的多宝 2021/11/03 21:04:04 版块 社区活动
7073 134 0
发布时间 2021/09/06 09:50:21 最后回复 爱学习的多宝 2021/11/03 21:04:04 版块 社区活动
7073 134 0
他的回复:
## 华为云ID:hw73260125 ## 第三阶段:数据库 ### 1. JDBC简介 #### 1.1 JDBC简介 JDBC - Java DataBase Connection - JDBC有4个常用对象 - DriverManager - Connection - Statement - ResultSet JDBC 是java访问数据库的标准规范。 编写一套代码,可以访问不同的JDBC数据库。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202109/26/220435wztpngfwc8cl11mv.png) - java.sql: Java访问数据的相关类和接口 - javax.sql: Java数据库扩展 - 数据库驱动 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202109/26/220820ddyr6fhhwbyelzsd.png) #### 1.2 JDBC的DriverManager ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202109/26/221101olxlbiaaqekjil7i.png) - 注册驱动 - 获取Connection对象 - 创建连接 - 查找驱动 #### 1.3 JDBC的Connection #### 1.4 JDBC的Statement ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202109/26/2220127owf4d9b4qpfmezh.png) #### 1.5 JDBC的ResultSet - 是一个二维数组集 - 常用API方法 - boolean next() 下一个行,返回移动后行是否存在的true/false - XXX.getXXX(int col) 获取当前行上指定列的值,列从1开始 开始的时候,行光标位于第一个行之前,需要先next移动到第一行上才能开始读取。 ### 2 JDBC连接数据库 #### 2.1 JDBC连接数据库 连接步骤: 1)添加Oracle/MySQL驱动的Maven依赖 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/24/004348mrbpf95irxxy4tvl.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/121328ynpfubrgbsmntpne.png) 2)加载和注册Oracle/MySQL驱动 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/24/004520hutwjcexjt3gyeba.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/121354yl3iqysff8moramt.png) 3)通过DriverManager获取连接对象 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/24/004713osf69lc0sd3krjvs.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/121429dgmrrehhi0woxncr.png) 三个参数: - url:jdbc.oracle:thin:@127.0.0.1:1521:orcl 协议、主机IP、端口号、实例名称 - 用户名:scott - 口令:1234 #### 2.2 statement接口操作数据库 statement常用方法: - executeUpdate 发送DML语句,增删改查:insert/update/delete ```java int executeUpdate(String sqlstr) ``` - executeQuery 发送DQL语句,执行查询的操作:select ```java ResultSet executeUpdate(String sqlstr) ``` - close 释放statement对象占用的数据库和JDBC资源 ```java void close() ``` 关于ResultSet结果集: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/122529fk13bm9uyfymwmpy.png) ```java // 读数据库表数据 // rs为执行SQL语句命令之后返回的结果集ResultSet while(rs.next()) { System.out.println(rs.getInt(1), rs.getString('fname')); } ``` #### 2.3 PreparedStatment接口操作 PreparedStatement接口是Statement接口的子接口,继承父接口的所有方法,是预编译的SQL语句,传入的只是作为预留字段的取值,而不能改变原有SQL语句的结构,避免SQL注入的问题。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/225902kn1qrasonzejr3uw.png) SQL注入问题: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/225935pa4vby4akcwveckx.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/230057dkxjskac2qeidd3d.png) PreparedStatement工作原理: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/230829tcitnph0tt9vg8pd.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/231009hrbrihepasonh1r9.png) SQL语句中使用占位符“?“代替需要后续传入的值。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/29/231129lerrpqivyailwnpr.png)
发布时间 2021/09/06 09:50:21 最后回复 爱学习的多宝 2021/11/03 21:04:04 版块 社区活动
7073 134 0
他的回复:
## 华为云ID:hw73260125 ## 第三阶段:Java数组 ### 1.1 数组定义 #### 1.1.1 数组是声明一个连续的空间,每个空间容纳相同数据类型的数据。 - 动态定义,指定数组大小,不赋值。 ```java int[] a = new int[3]; ``` - 静态定义,通过赋值,同时指定数组大小。 ```java int[] a = new int[3]{3, 4, 5}; int[] a = {3, 4, 5}; ``` 没有初试赋值的元素会自动赋默认值: - 整数:0 - 浮点数:0.0 - 布尔:false - 字符:空 - 引用:null #### 1.1.2 访问数组元素 格式:数组名[索引] - 索引从0开始 - 索引是连续的 - 索引递增为1 不带索引打印的时候,只有数组名,输出的是地址。 ```java System.out.println(a); ``` #### 1.1.3 内存分配 - 栈内存:在方法中定义的局部变量 - 堆内存:存储new出来的内容(实体、对象) 不同的内存区域有特定的数据处理方式和内存管理方式 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202109/24/161853g53ldpx1utddcdqe.png) 从图中可以知道,声明时数组名是在栈中存放的一个地址,指向堆中的数组数据。根据索引,选择数组元素。 ### 1.2 数组遍历 使用for循环遍历数组所有元素。 数组长度:数组名.length ### 1.3 数组中的数组 二维数组:数组的元素又是数组。 二维数组的遍历:双重嵌套循环,注意循环使用的长度。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202109/24/172309xtaqfw62hm3ua1ph.png) 数组名.length是外层数组的长度,二维数组外层数组长度可以理解为行数。 数组名[1].length是内层数组的长度。二维数组内层数组长度就是列数。 ### 1.4 数组的排序 按照大小排序。按照排序算法的交换次数衡量算法优劣。 常用算法:冒泡排序、快速排序、插入排序等。 ### 1.5 数组最大值、最小值、过滤重复值 找出最大值、最小值。 过滤重复值就是只保留不重复的值。 ### 1.6 常用类Arrays - Arrays.toString(a) 按照一定格式输出数组元素 ```java System.out.println(Arrays.toString(a)); ``` - Arrays.sort(a) 把数组进行排序,数组会发生改变 - Arrays.copyOf(a, len) 复制数组,可以扩容
发布时间 2021/09/06 09:50:21 最后回复 爱学习的多宝 2021/11/03 21:04:04 版块 社区活动
7073 134 0
他的回复:
## 华为云ID:hw7326012 ## 第1章 Java异常处理实战 ### 1.1 错误和异常 - Error: 严重错误问题,无法处理的错误,只能事先避免,比如内存溢出 - Exception:称为异常类,它表示程序本身可以处理的问题,比如数组下标越界 ### 1.2异常分类 - 编译时异常(检查异常),必须显示处理,否则程序就会发生错误,无法通过编译; - 运行时异常(非检查异常),无需显示处理,也可以和编译时异常一样处理。 RuntimeException所有的类及其子类被称为运行时异常,其他的异常都是编译时异常。 ### 1.3 异常处理机制 当程序中抛出一个异常后,JVM检测寻找`try...catch`块。将控制权交到`try...catch`块,然后继续往下执行程序, try块中发生异常的代码不会被重新执行,如果没有找到处理该异常的catch块,最终运行时报错。 try块可以带有多个catch块,注意次序,从子类到父类,匹配一次后就不再继续匹配。 ### 1.4 finally 块 finally块是最后处理的代码,无论是否抛出异常,都会执行。 finally块是异常处理的统一出口,一般可以进行资源的释放工作,如关闭打开的文件,关闭数据库连接等。 ### 1.5 `throws`和`throw`关键字 throws: 可以集中统一处理一种类型的异常,不用每个方法单独处理。 - 抛出编译异常 - 抛出运行异常 throw: 自行抛出异常,此时需要用到"throw"”关键字,并生成指定的异常对象后抛出。 throws与throw对比。 ### 1.6 子类和父类构造函数中使用throws 关键字 子类构造方法中throws抛出编译异常,必须大于等于父类throws抛出的异常,并且只能抛出不能捕获。 当父类构造函数中throws抛出运行时异常,子类构造方法中可以声明异常也可以不声明异常,如果声明,子类构造函数中抛出的异常要大于或者等于父类中抛出的异常。 ### 1.7 方法重写中使用`throws`关键字 父类方法声明了异常,子类重写方法时: - 不处理异常(重新定义时不设定throws); - 可仅throws父类方法中声明的部分异常; - 子类throws抛出的异常小于等于父类异常; 子类重写父类方法,如果抛出运行时异常,父类被重写的方法上可以不抛出异常 如果父类方法没有抛出异常,子类重写该方法时抛出编译异常,子类重写的方法会报编译错误,两种解决办法: - 父类被重写的方法上抛出的异常要大于或者等于子类方法上抛出的异常 - 子类方法中直接捕获异常,不抛出 ### 1.8 RuntimeException和自定义异常类 - RuntimeException类 RuntimeException类属于非检查异常,因为普通ⅣVM操作引起得运行时异常随时可能发生,此类异常一般是由特定操作引发。但这些操作在java应用程序中会频繁出现。因此它们不受编译期检查与处理或者声明规则的限制。 - 常见 RuntimeException NullPointerException:当应用程序试图在需要对象的地方使用null时,抛出该异常 ArrayIndexOutOfBoundsException:当使用的数组下标超出数组允许范围时,抛出该异常 ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常 NumberFormatException:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当的格式时,抛出该异常 - Exception常用API - printStackTrace - getMessage - 自定义异常类 异常机制可以保证程序更安全和更健壮。虽然类库已经提供很多可以直接处理异常的类,但是有时候为了更加精准地捕获和处理异常以呈现更好的用户体验,需要开发者自定义异常。 ### 1.9 垃圾回收机制 简称GC,是JVM自带的一个线程, 会自动进行回收管理 可以调用System.gc()方法马上调度GC线程回收资源,具体的实现由的JVM决定。 finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用。 不再使用的内存没有被及时回收,导致内存泄漏。