什么是JDBC
-
JDBC(Java Data Base Connectivity),是 Java连接数据库的技术。
-
是一种执行SQL的API, 可以为多种关系型数据库提供统一的访问。
-
它是由一组用java语言编写的类和接口组成, 是Java访问数据库的标准规范。
JDBC 原理
什么是数据库驱动程序
-
数据库驱动就是直接操作数据库的一个程序
-
不同数据产品的数据库驱动名字有差异
-
在程序中需要依赖数据库驱动来完成对数据库的操作
好处 1. 面向接口编程 2.代码不属于任何的数据库 3. 只需要稍作修改,就可以切换到其他数据库
总结: JDBC就是由sun公司定义的一套操作所有关系型数据库的规则(接口), 而数据库厂商需要实现这套接口, 厂商的实现类在引入的数据库驱动jar包中。
JDBC实现查询
1.数据的准备 创建数据库表 插入数据
引入数据库驱动包
-
MySQL驱动包提供的实现类: com.mysql.cj.jdbc.Driver
public class Text01{
public static void main(String [] args) throws ClassNotFoundException{
//注册驱动(使用反射)
Class.forName("com.mysql.cj.jdbc.Driver");
}
}
MySQL的Driver类是MySQL提供的数据库驱动类,实现了JDBC的Driver接口
2.获取连接 JDBC提供了Connection接口, 代表一个数据库连接接口
Connection getConnection (String url , String user ,String password)
//通过数据库url ,用户名,密码 来获取数据库。
3.获得SQL执行对象
Statement statement = connection.createStatement();
4.执行SQL获取返回结果
String sql = "想要在数据库里执行的语句" ;
ResultSet resultSet = statement.executeQuery(sql);
5 处理结果集
遍历ResultSet结果集对象
while(resultSet.next()){
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String password1 = resultSet.getString("password");
int age = resultSet.getInt("age");
System.out.println("id:" + id + ", username:" + username + ", password:" + password1 + ", age:" + age);
}
6 资源的释放
- 需要释放的对象:ResultSet结果集,Statement语句,Connection连接
- ResultSet结果集: 当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该ResultSet将被自动关闭
- 释放原则: 先开的后关, 后开的先关 Statement ==> Connection
例如
//6. 释放资源
statement.close();
connection.close();
JDBC实现增删改
插入记录
Statement statement = connection.createStatement();
String sql = "insert into jdbc_user values(default,'tom','123',20)";
执行SQL并得到结果
int i = statement.executeUpdate(sql);
System.out.println("受影响的行数是:" + i);
修改记录
Statement statement = connection.createStatement();
String sql = "update jdbc_user set username='jack' where id=4";
执行SQL并得到结果
int i = statement.executeUpdate(sql);
System.out.println("受影响的行数是:" + i);
删除记录
Statement statement = connection.createStatement();
String sql = "delete from jdbc_user where id=4";
4. 执行SQL并得到结果
int i = statement.executeUpdate(sql);
System.out.println("受影响的行数是:" + i);
ORM编程思想
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象语言与关系数据库存在的互不匹配的现象。
表的一列和类的一个属性对应,表的一行数据和类的一个对象对应。
实体类
实体类就是一个定义了属性,拥有getter、setter、无参构造方法(基本必备)的一个类。实体类可以在数据传输过程中对数据进行封装,相当于一个“工具”、“容器”、“载体”,能存储、传输数据,能管理数据。
用户登
-
存在的问题?
我们让用户输入的密码和 SQL 语句进行字符串拼接。用户输入的内容作为了 SQL 语句语法的一部分,但是改变了原有 SQL真正的意义,以上问题称为SQL注入。
SQL注入: 输入的内容作为sql执行一部分, 改变了原有sql的真正含义。
-
如何解决SQL注入的风险?
要解决SQL注入就不能让用户输入的密码和SQL 语句进行简单的手动字符串拼接。