数据库元数据
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)
获取指定列的数据库特定类型名称 - 使用步骤
- 获取 ResultSetMetaData 对象
- 使用对象调用方法
自定义一个方法完成增删改操作:
三层架构
是什么?
将代码分层处理
作用
高内聚,低耦合
高内聚: 一个方法只专注于做一件事情
低耦合: 类与类 或 方法与方法之间的关系比较弱
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(读取配置文件);
}
- 解耦:降低层与层之间的耦合性。
- 可维护性:提高软件的可维护性,对现有的功能进行修改和更新时不会影响原有的功能。
- 可扩展性:提升软件的可扩展性,添加新的功能的时候不会影响到现有的功能。
- 可重用性:不同层之间进行功能调用时,相同的功能可以重复使用。
分层结构
表示层(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.导入配置文件(修改)