JDBC
来源:互联网 发布:raft算法 编辑:程序博客网 时间:2024/05/17 22:51
JDBC
一。 JDBC 的介绍
JDBC : JAVA DATABASE CONNECTIVITY sun公司提供的一套操作数据库的标准!
JDBC 一套接口!没有具体的实现!
各个数据库厂商的jar包!
JDBC 和 jar 包之间的关系!就是接口和实现的关系!!
二。 JDBC 的四个核心对象
java:
DriverManager 用于注册各个厂商的驱动!
Connection 连接(会话) java和数据库的一个会话!
Statement 可以具体的操作sql语句!
ResultSet 结果集! 对应statement 查询操作
三。 JDBC 的操作步骤
1.注册驱动
2.获取连接
3.创建Statement
4.执行sql语句
5.处理结果集
6.关闭资源
//1.注册驱动
//注意:驱动对象应该是各个数据库厂商的
DriverManager.registerDriver(new Driver());
//2。获取连接
//url jdbc:数据库厂商://ip地址:3306/具体操作的库 day2
//jdbc:mysql://localhost:3306/day2
//简写:jdbc:mysql:///day2
//connection是java.sql
Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/day2", "root", "111");
//3.创建statemant 创建操作sql语句的对象
Statement statement = connection.createStatement();
String sql = "select * from student";
//4.执行sql语句
ResultSet resultSet = statement.executeQuery(sql);
//5.解析结果集
while(resultSet.next()){
//注意:列下标是从1开始!
//具体的列的数据 2列
String sid = resultSet.getString(1);
String sname = resultSet.getString(2);
System.out.println(sid+sname);
LogUtils.LogOut(sid+sname);
}
//6.关闭资源
resultSet.close();
if (statement != null) {
statement.close();
}
if(connection != null)
{
connection.close();
}
四。 查询单个对象API详细讲解对应的方法
DriverManager 注册驱动 获取连接
管理一组 JDBC 驱动程序的基本服务。
1.public static void registerDriver(Driver driver)
throws SQLException注册与给定的驱动程序DriverManager 。 新加载的驱动程序类应该调用方法registerDriver使其自己已知的DriverManager 。 如果司机目前已注册,则不采取任何行动。
注意:参数应该是对应数据库厂商的实现驱动!
问题: DriverManager.registerDriver()会注册两次驱动!
解决方案:
Class.froName("com.mysql.jdbc.Driver");
2.获取连接方法
Connection getConnection(String url,
String user,
String password)
throws SQLException尝试建立与给定数据库URL的连接。 DriverManager尝试从一组已注册的JDBC驱动程序中选择适当的驱动程序。
参数介绍:
url 连接数据库的路径 jdbc:数据库厂商://ip地址:端口号/数据库名
user 连接数据库的用户名 root
password 连接数据库的名字 111
Connection getConnection(String url,
Properties info)
throws SQLException尝试建立与给定数据库URL的连接。 DriverManager尝试从一组已注册的JDBC驱动程序中选择适当的驱动程序
参数介绍:
url 连接数据库的路径 jdbc:数据库厂商://ip地址:端口号/数据库名
Properties 继承与HashTable key value存在的
利用setProperty(String key, String value) 设置值!
Properties info = new Properties();
info.setProperty("","root");
用户名 key --> user
密码 key --> password
Connection getConnection(String url
url 连接数据库的路径 jdbc:数据库厂商://ip地址:端口号/数据库名?user=root&password=111
Connection 创建连接 并获取操作数据库sql语言的Statement对象
1.创建Statement对象
Statement createStatement()
throws SQLException创建一个Statement对象,用于将SQL语句发送到数据库。 没有参数的SQL语句通常使用Statement对象执行。 如果相同的SQL语句执行了很多次,那么使用PreparedStatement对象可能会更有效。
2. 创建PreparedStatement对象
PreparedStatement prepareStatement(String sql)
throws SQLException创建一个PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
具有或不具有IN参数的SQL语句可以预编译并存储在PreparedStatement对象中。 然后可以使用该对象多次有效地执行此语句。
注意:此方法针对从预编译中受益的参数化SQL语句进行了优化。 如果驱动程序支持预编译,则方法prepareStatement将将该语句发送到数据库进行预编译。 有些驱动程序可能不支持预编译。 在这种情况下,在执行PreparedStatement对象之前,该语句可能不会发送到数据库。 这对用户没有直接影响; 然而,它确实影响了哪些方法抛出某些SQLException对象。
Statement 执行sql语句
sql语句的分类:
DDL CREATE ALTER DROP
DML INSERT UPDATE DELETE
DQL SELECT
1.boolean execute(String sql)
对应sql语句的范围: DDL DML DQL DCL
返回值: boolean true DQL
false DDL DML DCL
2.int executeUpdate(String sql)
对应sql语句的范围:DML DDL DCL
返回值: 1.返回0 DDL DCL
2.返回的计数值 DML
insert 插入了几条数据!
delete 删除了几条数据
update 更新了几条数据!
3.ResultSet executeQuery(String sql)
对应sql语句范围:DQL
返回值: ResultSet: 对象从不为null
ResultSet rt = new ResultSet();
ResultSet 结果的封装类
ResultSet一张虚拟的表!
通过ResultSet只能获取表中的数据!不能说去表的表头信息!(有多少列 列名!)
解决方案:
ResultSetMetaData = getMetaData() 可以获取当前ResultSet对象的表头信息!!
ResultSetMetaData : API
getColumnCount()
返回此 ResultSet对象中的列数。
String getColumnName(int column)
throws SQLException获取指定列的名称。
参数
column - 第一列是1,第二列是2,...
1.操作光标
了解:
void afterLast() 没有数据
将光标移动到这个 ResultSet对象的末尾,就在最后一行之后。
void beforeFirst() 没有数据
将光标移动到这个 ResultSet对象的正面,就在第一行之前
first() 有数据
将光标移动到此 ResultSet对象中的第一行
absolute(int row) 定位到第几行
boolean previous()
将光标移动到此 ResultSet对象中的上一行。
boolean next()
将光标从当前位置向前移动一行。
返回值: 返回值 boolean
true如果新的当前行有效; false如果没有更多的行
2.获取数据
getObject(String columnLabel)
获取此的当前行中指定列的值 ResultSet作为对象 Object在Java编程语言
getString(int columnIndex);
getInt()
getShort();
获取对应列类型的数据!
参数:String columnLabel/int columnIndex
columnLabel:列的名字获取!或者是别名
columnIndex:列的下标获取 起始 1开始
3.关闭资源
result.close();
五。 测试CRUD方法
六。工具类的封装以及高级封装结果 ******
1.封装工具类的目的!
我们的目标:
1.只进行一次驱动注册
-单例模式 懒汉 饿汉
-静态代码块
2.方便获取连接!
-创建一个获取连接的方法!
static -- > 静态代码块
3.方便关闭资源!
close()
---------------
4.方便处理结果集
-List<Map>
-List<Bean>
七。注入攻击是什么!以及怎么样解决注入攻击! *****
回忆:
1.什么是JDBC??
java database connectivity
sun提供的一套操作数据库的标准规范!(一套接口!)
2.谁真正操作了数据库??
对应数据库的厂商! Jar 实现类!
各个Jar都实现了JDBC的接口!
Connection (java.sql) conn = Connecion mysql
3.四个核心对象
DriverManager
注册驱动
registerDriver(new Driver()(mysql));
注册两次
Class.forName("com.mysql.jdbc.Driver");
获取连接
getConnection(1,2,3);
url:jdbc:mysql://localhost:3306/数据库名
Connection
与数据库的一次会话!
创建数据库sql操作对象 Statement
1.createStatement
2.preparedStatement
Statement
1.execute(sql);
返回值: boolean
TRUE: DQL resultSet
FALSE: DDL DMLDCL
使用sql类型:DDL DML DQL DCL
2.executeUpdate(sql)
返回值: int : 0:DDL DCL
计数值: DML 操作影响的行数
使用sql类型: DML DDL DCL
3.executeQuery(sql)
返回:resultSet 永远不为null
使用sql类型:DQL
ResultSet
1.操作光标
.next()
返回值: boolean true 下面还有行 移动到下一行
false 没有更多行了
2.获取列的数据
get类型(index,label)
index int: 列的下标: 1开始
label String:列名 或者 别名
3.关闭资源
close();
4.执行步骤
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取连接
java.sql
Connection connection = DriverManager.getConnection(1,2,3);
3.获取Statament
java.sql
Statement statement = connection.createStatement();
4.执行sql语句
statement.execute();
statement.executeUpdate();
ResultSet result = statement.executeQuery();
5.处理结果集
6.关闭资源
5.处理结果集
目标保存查询到的结果数据!
ResultSet ---》 虚拟的表
表头(列的信息) 表的数据!
表头:ResultSetMetaData metadata = resultSet.getMateData();
表的数据: ResultSet中
ResultSetMetaData:
1.获取有多少列
getColumnCount();
2.获取列的名字
getColumnName(index);
List<Map<String,String>>
手动
每一行 装到一个map中! 最后map装到list中!
while(resultSet.next())
{
//一行的数据 map对象
HashMap<String,String> map = new HashMap<>();
map.put(metaData.getColumnName(1),resultSet.getString(1));
map.put(metaData.getColumnName(2),resultSet.getString(2));
map.put(metaData.getColumnName(3),resultSet.getString(3));
list.add(map)
}
全自动
while(resultSet.next())
{
//一行的数据 map对象
HashMap<String,String> map = new HashMap<>();
for(int i= 1 ; i<= columnCount ; i++)
{
map.put(metaData.getColumnName(i),resultSet.getString(i));
}
list.add(map)
}
List<Bean>
手动
while(resultSet.next())
{
//一行的数据 map对象
Student stu = new Student();
//注意: Student --》 student
//Student类中变量的数量:大于或者等于 student列名
//Student中变量的名字 跟列名一样!
stu.setStuid(resultSet.getString(1));
stu.setStuName(resultSet.getString(2);
list.add(map)
}
半自动
while(resultSet.next())
{
//一行的数据 map对象
Student stu = new Student();
for(int i= 1 ; i<= columnCount ; i++)
{
//1.获取列名
String columnName=metaData.getColumnName(i);
String value = resultSet.getString(columnName);
//参数1: 属性名
//参数2: 哪个类
PropertyDescriptor dp = new PropertyDescriptor(columnName,Student.class);
//获取set方法
Method set = db.getWriteMethod();
set.invoke(stu,value);
}
list.add(stu)
}
复习:
作业:
1.6步骤弄清!
2.List<Map>
3.List<Student>
一。 JDBC 的介绍
JDBC : JAVA DATABASE CONNECTIVITY sun公司提供的一套操作数据库的标准!
JDBC 一套接口!没有具体的实现!
各个数据库厂商的jar包!
JDBC 和 jar 包之间的关系!就是接口和实现的关系!!
二。 JDBC 的四个核心对象
java:
DriverManager 用于注册各个厂商的驱动!
Connection 连接(会话) java和数据库的一个会话!
Statement 可以具体的操作sql语句!
ResultSet 结果集! 对应statement 查询操作
三。 JDBC 的操作步骤
1.注册驱动
2.获取连接
3.创建Statement
4.执行sql语句
5.处理结果集
6.关闭资源
//1.注册驱动
//注意:驱动对象应该是各个数据库厂商的
DriverManager.registerDriver(new Driver());
//2。获取连接
//url jdbc:数据库厂商://ip地址:3306/具体操作的库 day2
//jdbc:mysql://localhost:3306/day2
//简写:jdbc:mysql:///day2
//connection是java.sql
Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/day2", "root", "111");
//3.创建statemant 创建操作sql语句的对象
Statement statement = connection.createStatement();
String sql = "select * from student";
//4.执行sql语句
ResultSet resultSet = statement.executeQuery(sql);
//5.解析结果集
while(resultSet.next()){
//注意:列下标是从1开始!
//具体的列的数据 2列
String sid = resultSet.getString(1);
String sname = resultSet.getString(2);
System.out.println(sid+sname);
LogUtils.LogOut(sid+sname);
}
//6.关闭资源
resultSet.close();
if (statement != null) {
statement.close();
}
if(connection != null)
{
connection.close();
}
四。 查询单个对象API详细讲解对应的方法
DriverManager 注册驱动 获取连接
管理一组 JDBC 驱动程序的基本服务。
1.public static void registerDriver(Driver driver)
throws SQLException注册与给定的驱动程序DriverManager 。 新加载的驱动程序类应该调用方法registerDriver使其自己已知的DriverManager 。 如果司机目前已注册,则不采取任何行动。
注意:参数应该是对应数据库厂商的实现驱动!
问题: DriverManager.registerDriver()会注册两次驱动!
解决方案:
Class.froName("com.mysql.jdbc.Driver");
2.获取连接方法
Connection getConnection(String url,
String user,
String password)
throws SQLException尝试建立与给定数据库URL的连接。 DriverManager尝试从一组已注册的JDBC驱动程序中选择适当的驱动程序。
参数介绍:
url 连接数据库的路径 jdbc:数据库厂商://ip地址:端口号/数据库名
user 连接数据库的用户名 root
password 连接数据库的名字 111
Connection getConnection(String url,
Properties info)
throws SQLException尝试建立与给定数据库URL的连接。 DriverManager尝试从一组已注册的JDBC驱动程序中选择适当的驱动程序
参数介绍:
url 连接数据库的路径 jdbc:数据库厂商://ip地址:端口号/数据库名
Properties 继承与HashTable key value存在的
利用setProperty(String key, String value) 设置值!
Properties info = new Properties();
info.setProperty("","root");
用户名 key --> user
密码 key --> password
Connection getConnection(String url
url 连接数据库的路径 jdbc:数据库厂商://ip地址:端口号/数据库名?user=root&password=111
Connection 创建连接 并获取操作数据库sql语言的Statement对象
1.创建Statement对象
Statement createStatement()
throws SQLException创建一个Statement对象,用于将SQL语句发送到数据库。 没有参数的SQL语句通常使用Statement对象执行。 如果相同的SQL语句执行了很多次,那么使用PreparedStatement对象可能会更有效。
2. 创建PreparedStatement对象
PreparedStatement prepareStatement(String sql)
throws SQLException创建一个PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
具有或不具有IN参数的SQL语句可以预编译并存储在PreparedStatement对象中。 然后可以使用该对象多次有效地执行此语句。
注意:此方法针对从预编译中受益的参数化SQL语句进行了优化。 如果驱动程序支持预编译,则方法prepareStatement将将该语句发送到数据库进行预编译。 有些驱动程序可能不支持预编译。 在这种情况下,在执行PreparedStatement对象之前,该语句可能不会发送到数据库。 这对用户没有直接影响; 然而,它确实影响了哪些方法抛出某些SQLException对象。
Statement 执行sql语句
sql语句的分类:
DDL CREATE ALTER DROP
DML INSERT UPDATE DELETE
DQL SELECT
1.boolean execute(String sql)
对应sql语句的范围: DDL DML DQL DCL
返回值: boolean true DQL
false DDL DML DCL
2.int executeUpdate(String sql)
对应sql语句的范围:DML DDL DCL
返回值: 1.返回0 DDL DCL
2.返回的计数值 DML
insert 插入了几条数据!
delete 删除了几条数据
update 更新了几条数据!
3.ResultSet executeQuery(String sql)
对应sql语句范围:DQL
返回值: ResultSet: 对象从不为null
ResultSet rt = new ResultSet();
ResultSet 结果的封装类
ResultSet一张虚拟的表!
通过ResultSet只能获取表中的数据!不能说去表的表头信息!(有多少列 列名!)
解决方案:
ResultSetMetaData = getMetaData() 可以获取当前ResultSet对象的表头信息!!
ResultSetMetaData : API
getColumnCount()
返回此 ResultSet对象中的列数。
String getColumnName(int column)
throws SQLException获取指定列的名称。
参数
column - 第一列是1,第二列是2,...
1.操作光标
了解:
void afterLast() 没有数据
将光标移动到这个 ResultSet对象的末尾,就在最后一行之后。
void beforeFirst() 没有数据
将光标移动到这个 ResultSet对象的正面,就在第一行之前
first() 有数据
将光标移动到此 ResultSet对象中的第一行
absolute(int row) 定位到第几行
boolean previous()
将光标移动到此 ResultSet对象中的上一行。
boolean next()
将光标从当前位置向前移动一行。
返回值: 返回值 boolean
true如果新的当前行有效; false如果没有更多的行
2.获取数据
getObject(String columnLabel)
获取此的当前行中指定列的值 ResultSet作为对象 Object在Java编程语言
getString(int columnIndex);
getInt()
getShort();
获取对应列类型的数据!
参数:String columnLabel/int columnIndex
columnLabel:列的名字获取!或者是别名
columnIndex:列的下标获取 起始 1开始
3.关闭资源
result.close();
五。 测试CRUD方法
六。工具类的封装以及高级封装结果 ******
1.封装工具类的目的!
我们的目标:
1.只进行一次驱动注册
-单例模式 懒汉 饿汉
-静态代码块
2.方便获取连接!
-创建一个获取连接的方法!
static -- > 静态代码块
3.方便关闭资源!
close()
---------------
4.方便处理结果集
-List<Map>
-List<Bean>
七。注入攻击是什么!以及怎么样解决注入攻击! *****
回忆:
1.什么是JDBC??
java database connectivity
sun提供的一套操作数据库的标准规范!(一套接口!)
2.谁真正操作了数据库??
对应数据库的厂商! Jar 实现类!
各个Jar都实现了JDBC的接口!
Connection (java.sql) conn = Connecion mysql
3.四个核心对象
DriverManager
注册驱动
registerDriver(new Driver()(mysql));
注册两次
Class.forName("com.mysql.jdbc.Driver");
获取连接
getConnection(1,2,3);
url:jdbc:mysql://localhost:3306/数据库名
Connection
与数据库的一次会话!
创建数据库sql操作对象 Statement
1.createStatement
2.preparedStatement
Statement
1.execute(sql);
返回值: boolean
TRUE: DQL resultSet
FALSE: DDL DMLDCL
使用sql类型:DDL DML DQL DCL
2.executeUpdate(sql)
返回值: int : 0:DDL DCL
计数值: DML 操作影响的行数
使用sql类型: DML DDL DCL
3.executeQuery(sql)
返回:resultSet 永远不为null
使用sql类型:DQL
ResultSet
1.操作光标
.next()
返回值: boolean true 下面还有行 移动到下一行
false 没有更多行了
2.获取列的数据
get类型(index,label)
index int: 列的下标: 1开始
label String:列名 或者 别名
3.关闭资源
close();
4.执行步骤
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取连接
java.sql
Connection connection = DriverManager.getConnection(1,2,3);
3.获取Statament
java.sql
Statement statement = connection.createStatement();
4.执行sql语句
statement.execute();
statement.executeUpdate();
ResultSet result = statement.executeQuery();
5.处理结果集
6.关闭资源
5.处理结果集
目标保存查询到的结果数据!
ResultSet ---》 虚拟的表
表头(列的信息) 表的数据!
表头:ResultSetMetaData metadata = resultSet.getMateData();
表的数据: ResultSet中
ResultSetMetaData:
1.获取有多少列
getColumnCount();
2.获取列的名字
getColumnName(index);
List<Map<String,String>>
手动
每一行 装到一个map中! 最后map装到list中!
while(resultSet.next())
{
//一行的数据 map对象
HashMap<String,String> map = new HashMap<>();
map.put(metaData.getColumnName(1),resultSet.getString(1));
map.put(metaData.getColumnName(2),resultSet.getString(2));
map.put(metaData.getColumnName(3),resultSet.getString(3));
list.add(map)
}
全自动
while(resultSet.next())
{
//一行的数据 map对象
HashMap<String,String> map = new HashMap<>();
for(int i= 1 ; i<= columnCount ; i++)
{
map.put(metaData.getColumnName(i),resultSet.getString(i));
}
list.add(map)
}
List<Bean>
手动
while(resultSet.next())
{
//一行的数据 map对象
Student stu = new Student();
//注意: Student --》 student
//Student类中变量的数量:大于或者等于 student列名
//Student中变量的名字 跟列名一样!
stu.setStuid(resultSet.getString(1));
stu.setStuName(resultSet.getString(2);
list.add(map)
}
半自动
while(resultSet.next())
{
//一行的数据 map对象
Student stu = new Student();
for(int i= 1 ; i<= columnCount ; i++)
{
//1.获取列名
String columnName=metaData.getColumnName(i);
String value = resultSet.getString(columnName);
//参数1: 属性名
//参数2: 哪个类
PropertyDescriptor dp = new PropertyDescriptor(columnName,Student.class);
//获取set方法
Method set = db.getWriteMethod();
set.invoke(stu,value);
}
list.add(stu)
}
复习:
作业:
1.6步骤弄清!
2.List<Map>
3.List<Student>
阅读全文
0 0
- jdbc
- JDBC
- jdbc
- JDBC
- jdbc
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- jdbc
- JDBC
- JDBC
- jdbc
- MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join
- mysql sqlyog(下)
- Linux ACL访问控制权限
- SYN-cookie 和地址状态监控
- 总觉得该写点什么----关于一个不成熟的博客开发历程
- JDBC
- 菜鸟入门之路——Unity导航相关笔记
- BAT经典面试题:操作系统题目
- 张英泽 struts2+spring+hibernate整合步骤
- iOS视频编解码常用库比较
- DVD管理器
- 垃圾回收算法与 JVM 垃圾回收器综述
- Convert a List to a Comma-Separated String in Java 8
- Spring工作原理及其作用