数据库元数据

String sql = "insert into product values(null,?,?) ";
1.根据sql语句相关的元数据: ParameterMetaData
	可以获取sql语句中 ? 的个数
	还可以获取 ? 所对应值的类型(mysql不支持)
2.跟返回值相关的元数据:  ResultSetMetaData
	String sql = "select * from product where id = 1 ";
	返回值有几列
	字段的名称分别是什么
	字段类型分别是什么

元数据:数据库、表、列的定义信息

ParameterMetaData

作用:

获取PreparedStatement所编译的sql语句中 ? 的个数和类型

String sql = "select * from user where username = ? and password = ? ";

PreparedStatement pst = conn.PrepareStatement(sql);

API

PrepareStatement. getParameterMetaData();

int getParameterCount()
获取PreparedStatement的SQL语句参数?的个数

int getParameterType(int param)

获取指定参数的SQL类型。

不是所有的数据库都支持,mysql不支持

使用:

获取 ParameterMetaData 对象

使用对象调用方法

注意实现

不是所有的数据库驱动都能后取到参数类型(MySQL会出异常)

ResultSetMetaData

作用:

可用于获取有关 ResultSet 对象中列的类型和属性的信息。

ResultSetMetaData

  • 如何获取 ResultSetMetaData
  • ResultSet.getMetaData()
  • int getColumnCount()
    返回此 ResultSet 对象中的列数
  • String getColumnName(int column)
    获取指定列的名称
  • String getColumnTypeName(int column)
    获取指定列的数据库特定类型名称
  • 使用步骤
  1. 获取 ResultSetMetaData 对象
  2. 使用对象调用方法

自定义一个方法完成增删改操作:

三层架构

是什么?

将代码分层处理

作用

高内聚,低耦合

高内聚: 一个方法只专注于做一件事情

低耦合: 类与类 或 方法与方法之间的关系比较弱

suanShu(int i,int j,String fuhao){
    if("+".equals(fuhao)){
        i+j;
    }...
}
A:类
    aa(){
		B b = new B();
		
    }
B:类
    bb(){
		new Driver(); // 和Driver类存在耦合
		Class.forName("com.mysql.....");
		Class.forName(读取配置文件);
    }
  1. 解耦:降低层与层之间的耦合性。
  2. 可维护性:提高软件的可维护性,对现有的功能进行修改和更新时不会影响原有的功能。
  3. 可扩展性:提升软件的可扩展性,添加新的功能的时候不会影响到现有的功能。
  4. 可重用性:不同层之间进行功能调用时,相同的功能可以重复使用。

分层结构

表示层(view|web|controller)

业务处理层(service)

数据访问层(dao- Data Access Object)

工具类 (utils)

JavaBean (domain | entity)

User | Student | Product …

java使用不同的包来区分不同的层.

使用三层架构思想完成用户注册功能:

需求分析:
	程序启动后,在view层提示用户输入用户名和密码,当用户输入完用户名时,获取用户输入的用户名,调用service处理业务逻辑,service调用dao查询当前用户名是否被占用.
    查询结果:
		当前用户名已存在: 提示当前用户名已被占用,请重新输入(程序重新开始)
		当前用户名不存在: 提醒用户输入密码,程序继续
	当用户输入完密码后,调用service完成用户注册的业务逻辑,调用dao完成用户注册(添加)

环境搭建:
	1.创建数据库表
	2.创建java项目和包结构(view,service,dao...)
    3.导入jar包(jdbcTemplate,druid,mysql )
	4.导入工具类
	5.导入配置文件(修改)