数据库元数据:
jdbcTemplate:
1.概述:
1.1元数据的基本概述
元数据:数据库,表,列的定义信息.
图表解释:
1.2ParameterMetaData
ParameterMetaData 可用于获取有关 PreparedStatement 对象中每个参数标记的类型和属性。
select * from user where name=? and password=?
// ParameterMetaData可以用来获取?的个数和类型
1.3如何获取
代码演示:
package com.luliang.DruidDataSource;
import com.luliang.JDBCbao.JdbcUtils2;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
public class Demo01 {
public static void main(String[] args) throws Exception{
//1.获取连接
Connection connection = JdbcUtils2.getConnection();
//2.创建SQL执行平台
//添加
String sql="INSERT INTO liang(id,name,residese,salary) VALUES (NULL,?,?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//执行SQL语句
ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
//处理运行结果
System.out.println("参数个数:"+parameterMetaData.getParameterCount());
}
}
//运行结果参数3个
ResuitSetMetaData获取结果集合中的列名和列类型
如何获取ResultSetMetaData:
API介绍:
1.int getColumnCount() 返回 ResultSet对象的列数.
2..String getColumnName(int column) 获取指定列的名称
3.String getColumnTypeName(int column) 获取指定列的数据库特定类型名称
代码介绍:
package com.luliang.DruidDataSource;
import com.luliang.JDBCbao.JdbcUtils2;
import java.sql.*;
public class Demo01 {
public static void main(String[] args) throws Exception{
//1.获取连接
Connection connection = JdbcUtils2.getConnection();
//2.创建SQL执行平台
//添加
//String sql="INSERT INTO liang(id,name,residese,salary) VALUES (NULL,?,?,?)";
String sql="SELECT *FROM liang WHERE id=1";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//执行SQL语句
// ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
ResultSet resultSet = preparedStatement.executeQuery();
//处理运行结果
//获取结果集元数据
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
System.out.println("列数:"+columnCount);
//System.out.println("参数个数:"+parameterMetaData.getParameterCount());
//遍历输出
for(int i=0;i<columnCount;i++){
System.out.println("列名:"+metaData.getColumnName(i+1));
System.out.println("列类型:"+metaData.getColumnTypeName(i+1));
System.out.println("===========");
}
}
}
//运行结果参数3个
JdbcTemplate:
概念:
JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取 PreparedStatement,设置SQL语句参数,关闭连接等步骤。JdbcTemplate就是Spring对JDBC的封装,目的是使 JDBC更加易于使用。JdbcTemplate是Spring的一部分。 JdbcTemplate处理了资源的建立和释放。他帮助我们避 免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需 要提供SQL语句和提取结果。 Spring源码地址:https://github.com/spring-projects/spring-framework 在 JdbcTemplate中执行SQL语句的方法大致分为3类:1. execute :可以执行所有SQL语句,一般用于执行DDL语句。
2. update :用于执行 INSERT 、 UPDATE 、 DELETE 等DML语句。
3. queryXxx :用于DQL数据查询语句
数据库语句:
DDL:数据定义语言:定义datebase,table等等.
1.创建datadase:create database 库名称; 列:CREATE DATABASE lu;
2.删除database: drop database库名称;例如:DROP DATABASE lu;
DML: 数据操作语言:增,删,改数据的。
添加数据:INSERT INTO lu VALUES(1,'大朗',40,'男','1111-11-11');
删除数据:DELETE FROM lu WHERE id=3;
修改数据:UPDATE lu SET sex='男' WHERE id=4;
DQL: 数据查询语言:查询语句的。
单表查询语句:SELECT*FROM lu;
查询lu表里所有的姓名和年龄:SELECT NAME,age FROM lu;
DCL: 数据控制语言,DBA使用的,管理MySql的权限,创建用户,授权管理。
TCL: 事务管理语言,管理事务的.
2.JdbcTemplate使用过程:
2.1Druid基于配置文件实现连接池
APL介绍:
execute方法的使用:
代码演示:
//创建表
public class Demo01 {
public static void main(String[] args) throws Exception{
String sql="CREATE TABLE lu(" +
"id INT PRIMARY KEY AUTO_INCREMENT," +
"name VARCHAR (20)," +
"price DOUBLE " +
");";
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
jdbcTemplate.execute(sql);
}
JdbcTemplate实现增删改:
public int update(final String sql)
用于执行'INSERT','UPDATE','DELETE'等DML语句
增:
@Test
public void test1(){
//1.添加数据
//创建
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
String sql="INSERT INTO lu(id,name,price)VALUES (NULL ,?,?)";
int i = jdbcTemplate.update(sql, "张无忌", 10000);
int i1 = jdbcTemplate.update(sql, "张三丰", 1000000);
}
删:
@Test
public void test2(){
//2.删除数据
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
String sql="DELETE FROM lu WHERE id=?";
int update = jdbcTemplate.update(sql,3);
System.out.println("影响的行数:"+update);
}
改:
@Test
public void test3(){
//修改数据
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
String sql="UPDATE lu set price=? WHERE id=?";
int update = jdbcTemplate.update(sql,500,2);
System.out.println("影响的行数:"+update);
}
2.JdbcTemplate实现查询
2.1queryForint返回一个整数
public int queryForint(String sql)
执行查询语句,返回一个int类型的值.
使用步骤:
1. 创建JdbcTemplate对象
2. 编写查询的SQL语句
3. 使用JdbcTemplate对象的queryForMap方法
4. 输出结果
代码演示:
@Test
public void test5(){
//1.创建JdbcTemplate对象,传入数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
//2.编写SQL语句
String sql="SELECT*FROM emp WHERE name=?";
Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql,"孙悟空");
//返回一个Map对象
System.out.println(stringObjectMap);
}
2.3使用步骤
DQL查询![](https://img-blog.csdnimg.cn/20190415202102759.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTc2NzYx,size_16,color_FFFFFF,t_70)
查询一条语句可以封装成Map
代码演示:
@Test
public void test6(){
//1.创建JdbcTemplate对象,传入数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
//2.编写SQL语句
String sql="SELECT*FROM lu WHERE id=?";
Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql,1);
System.out.println(stringObjectMap);
}
查询一条记录封装成bean对象
需求:
查询id为1的一条记录封装成自定义的类:
代码演示:
@Test
public void test7(){
//1. 创建JdbcTemplate对象,传入数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
//2. 编写SQL语句
String sql = "SELECT *FROM user WHERE id = ?";
//3. 使用JdbcTemplate对象的queryForObject ()方法查询结果,方法中传入一个接口的匿名内部类
User user = jdbcTemplate.queryForObject(sql, new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user= new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setGender(resultSet.getString("gender"));
user.setBirthday(resultSet.getDate("birthday"));
return user;
}
}, 1);
// 4. 返回是一个User对象
System.out.println(user);
}