javase-day08-构造方法继承、JDBC、异常

super与this

super关键字:
我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:
指向自己的引用。

案例

重写同名方法后
void eatTest() {
	this.eat();   // this 调用自己的方法
	super.eat();  // super 调用父类方法
}

final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:

声明类:

final class 类名 {//类体}

声明方法:

修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}

构造方法的继承

  • 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
    如果父类构造器有参数,子类调用时必须在构造器中显式的通过 super 调用父类构造器并添加适当的参数
  • 若父类构造器没有参数,则自雷不需要使用 super 调用,系统会自动调用父类的无参构造器。

案例

class SuperClass {  // 父类
 	 private int n;
  	 SuperClass(){   // 无参构造器
 	 System.out.println("SuperClass()");
 	 }
SuperClass(int n) { // 带参构造器
	 System.out.println("SuperClass(int n)");
	 this.n = n;
	 }
}

子类继承

class SubClass extends SuperClass{
	  private int n;

 	 SubClass(){ // 自动调用父类的无参数构造器
	 System.out.println("SubClass");
 	 }  

// 结果输出:SuperClass()、SubClass

 public SubClass(int n){ 
  	super(300);  // 调用父类中带有参数的构造器
 	System.out.println("SubClass(int n):"+n);
    this.n = n;
 	}
}

// 输出结果:SuperClass(int n)、SubClass(int n):100[具体的值]

JDBC

JDBC API主要功能:
与数据库建立连接、执行SQL 语句、处理结果。

1. DriverManager :依据数据库的不同,管理JDBC驱动。
2. Connection :负责连接数据库并担任传送数据的任务。
3. Statement :由 Connection 产生、负责执行SQL语句。(现在用PreparedStatement类,也就是Statement 的子类)
4. ResultSet:负责保存Statement执行后所产生的查询结果。

过程:

1. 准备MySQL的驱动类

  • 将驱动类导入eclipse中新建的lib文件,并 Build Path,这样就能够使用
  • 保证电脑的MySQL服务运行

2. 代码部分:

向数据库中插入数据:

CREATE TABLE `k_user` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `USERNO` varchar(30) DEFAULT NULL,
  `USERNAME` varchar(255) DEFAULT NULL,
  `PWD` varchar(20) DEFAULT NULL,
  `DEPTNO` varchar(30) DEFAULT NULL,
  `SEX` varchar(2) DEFAULT NULL,
  `AGE` int(11) DEFAULT NULL,
  `POSITION` varchar(50) DEFAULT NULL,
  `HOMETOWN` varchar(255) DEFAULT NULL,
  `TELPHONE` varchar(20) DEFAULT NULL,
  `EMAIL` varchar(50) DEFAULT NULL,
  `ROLENO` varchar(1) DEFAULT NULL,
  `REMARK` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) 
插入数据:
INSERT INTO `k_user` VALUES ('1', 'admin', '系统管理员', '123456', 'dept_0001', '0', '99', '管理员', '山东', '18998881234', '10000000@163.com', '0', null);
INSERT INTO `k_user` VALUES ('2', 'user_0002', '王武', '123456', 'dept_0001', '0', '23', '员工', '山东', '10000000001', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('3', 'user_0003', '刘成', '123456', 'dept_0001', '0', '20', '员工', '北京', '10000000002', '10000000@163.com', '1', '总部外派');
INSERT INTO `k_user` VALUES ('4', 'user_0004', '杨胜', '123456', 'dept_0001', '0', '33', '员工', '山东', '10000000003', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('5', 'user_0005', '孙小斌', '123456', 'dept_0002', '0', '28', '员工', '上海', '10000000004', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('6', 'user_0006', '赵刚', '123456', 'dept_0002', '0', '24', '员工', '山东', '10000000005', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('7', 'user_0007', '李争', '123456', 'dept_0002', '0', '35', '经理', '江苏', '10000000006', '10000000@163.com', '1', '实习');
INSERT INTO `k_user` VALUES ('8', 'user_0008', '崔建', '123456', 'dept_0002', '0', '46', '员工', '山东', '10000000007', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('9', 'user_0009', '何娟', '123456', 'dept_0002', '1', '19', '员工', '上海', '10000000008', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('10', 'user_0010', '方晓花', '123456', 'dept_0003', '1', '26', '员工', '山东', '10000000009', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('11', 'user_0011', '田小草', '123456', 'dept_0003', '1', '27', '员工', '北京', '10000000010', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('12', 'user_0012', '候丽', '123456', 'dept_0003', '1', '32', '员工', '山东', '10000000011', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('13', 'user_0013', '黄小仙', '123456', 'dept_0003', '1', '30', '员工', '浙江', '10000000012', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('14', 'user_0014', '王文欣', '123456', 'dept_0003', '1', '37', '员工', '山东', '10000000013', '10000000@163.com', '1', '');
INSERT INTO `k_user` VALUES ('15', 'user_0015', '李莉', '123456', 'dept_0003', '1', '55', '部门经理', '山东', '10000000014', '10000000@163.com', '1', '');

 try {
//1.加载JDBC驱动
      Class.forName(JDBC驱动类);
} 
… …
try {
//2.与数据库建立连接
      Connection con=DriverManager.getConnection(URL,数据库用户名,密码);
  //3.发送SQL语句并得到结果
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
 //4.处理返回结果
      while (rs.next()) {
             int x = rs.getInt("a");
             String s = rs.getString("b");
             float f = rs.getFloat("c");
      }
//5.释放资源
      rs.close();
      stmt.close();   
      con.close();
}

数据库访问基类(BaseDao)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 数据库访问基类
 */
public class BaseDao {
	//数据库驱动
	private String driver="com.mysql.jdbc.Driver";
	//数据库连接地址
	private String url="jdbc:mysql://localhost:3306/orcl";
	//数据库用户名
	private String name="root";
	//数据库密码
	private String password="";
	
	public Connection conn;//数据库连接对象
	public PreparedStatement ps;//数据库操作对象
	public ResultSet rs;//存放结果数据
	
	/**
	 * 获取数据库连接
	 */
	public Connection getConn(){
		try {
			Class.forName(driver);
			this.conn=DriverManager.getConnection(url,name,password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

测试:

public static void main(String[] args) throws Exception {
		//1. 获取连接
		Connection conn=new BaseDao().getConn();
		//2. 执行查询
		String sql="select * from k_user";
		PreparedStatement ps=conn.prepareStatement(sql);
		ResultSet rs=ps.executeQuery();
		//3. 循环输出数据
		while(rs.next()){
			System.out.println("用户名是:"+rs.getString("username"));
		}
	}

分层开发的特点及好处

三层:Dao持久层、Service业务层、View视图层
分层的特点:

  • 每一层都有自己的职责。
  • 上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用其功能。
  • 上一层调用下一层的功能,下一层不能调用上一层功能。

分层开发的好处:

  • 各层专注于自己功能的实现,便于提高质量。
  • 便于分工协作,提高开发效率。
  • 便于代码复用。
  • 便于程序扩展。

异常

异常分类

在这里插入图片描述

1.捕获异常
try:执行可能产生异常的代码。
catch:捕获异常。
finally:无论是否发生异常,代码总能执行。

多重异常的执行规则:

  • 排列catch 语句的顺序:先子类后父类
  • 发生异常时按顺序逐个匹配
  • 只执行第一个与异常类型匹配的catch语句
2.声明异常

throws:声明方法可能要抛出的各种异常。
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。
throws 关键字放在方法签名的尾部。

3.抛出异常

throw:手动抛出异常。

常见异常

异常类型说明
Exception异常层次结构的父类
ArithmeticException算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问 null 对象成员
ClassNotFoundException不能加载所需的类
IllegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常,如把"abc"转换成数字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值