Java期末复习JDBC|网课笔记+校课总结
目录
1、概念
2、JDBC步骤
JDBC的基本步骤:
1、加载数据库驱动:通常使用Class类的forName()静态方法来加载驱动。
2、通过DriverManager获取数据库连接:需要传入3个参数:数据库URL、登陆数据库的用户名和密码。
3、通过Connection对象创建Statement对象:Connection创建Statement的方法有createStatement()、prepareStatement(Stringsql)和prepareCall(Stringsql)。
4、使用Statement执行SQL语句:所有的Statement都有execute()、executeUpdate()和executeQuery()这三个方法来执行SQL语句。
Statement对象的功能:提供了多种方法来执行SQL语句,包括但不限于:(1)executeQuery(String sql):执行SQL查询语句,返回一个ResultSet对象。(2)executeUpdate(String sql):执行SQL插入、更新或删除语句,返回受影响的行数。(3)execute(String sql):执行SQL语句,如果该语句是一个查询则返回一个ResultSet对象,否则返回true表示执行成功。
5、操作结果集:
JDBC代码步骤:
3、代码框架
4、API
1、 DriverManager(驱动管理类):
2、connection 作用:
3、Statement作用:执行SQL语句
4、ResultSet(结果集对象)作用
5、PreparedStatement作用:预编译Sql的对象,预防SQL注入问题
5、校课总结
1、概念
JDBC:Java DataBase Connectivity.
使用java语言操作所有关系型数据库的一套API。同一套Java代码,操作不同的关系型数据库。JDBC相当于一个接口,不同的数据库都写一套自己的对应接口的实现(MySQL驱动、Oracle驱动、DB2驱动)
2、JDBC步骤
JDBC的基本步骤:
1、加载数据库驱动:
通常使用Class类的forName()静态方法来加载驱动。
- 加载JDBC驱动的主要作用是将操作系统中正在运行的数据库进程(实例)转化成Java对象供Java程序使用,从而实现对数据库的操作。
- 为什么需要加载驱动
抽象数据库操作:JDBC将整个数据库驱动器在底层抽象成一个对象(即驱动器对象),所有对数据库的操作都可以通过该对象进行。- 实现多数据库支持:JavaSQL框架允许多个数据库驱动程序,每个驱动程序都应该提供一个实现Driver接口的类。
2、通过DriverManager获取数据库连接:
需要传入3个参数:数据库URL、登陆数据库的用户名和密码。
- DriverManager类是Java JDBC API中的一个核心类,主要用于管理和维护数据库驱动程序。它充当用户和数据库驱动程序之间的桥梁,确保应用程序能够成功连接到数据库并执行SQL语句。
- 主要功能:
- 管理数据库驱动程序:DriverManager负责加载和管理所有已注册的数据库驱动程序。建立数据库连接:提供静态方法getConnection(),用于建立与数据库的新连接。
- 获取数据库连接的方法
- 使用DriverManager.getConnection() 方法:通过DriverManager类的getConnection()方法,可以方便地获取数据库连接。该方法有两种形式:
- 直接传递JDBC URL、用户名和密码。
- 通过配置文件读取数据库连接参数,然后使用这些参数调用getConnection()方法
3、通过Connection对象创建Statement对象:
Connection创建Statement的方法有createStatement()、prepareStatement(Stringsql)和prepareCall(Stringsql)。
- Statement对象是一个非常重要的组件,它主要用于执行SQL语句。通过Connection对象创建Statement对象的主要目的是为了与数据库进行交互,执行查询、更新和其他数据库操作。
Connection conn = ...; // 获取数据库连接 Statement stmt = conn.createStatement();
4、使用Statement执行SQL语句:所有的Statement都有execute()、executeUpdate()和executeQuery()这三个方法来执行SQL语句。
Statement对象的功能:提供了多种方法来执行SQL语句,包括但不限于:(1)executeQuery(String sql):执行SQL查询语句,返回一个ResultSet对象。(2)executeUpdate(String sql):执行SQL插入、更新或删除语句,返回受影响的行数。(3)execute(String sql):执行SQL语句,如果该语句是一个查询则返回一个ResultSet对象,否则返回true表示执行成功。
5、操作结果集:如果执行的SQL语句是查询语句,则执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。
6、回收数据库资源:包括关闭ResultSet、Statement和Connection等资源。
需要注意的是,不同的数据库可能会有不同的驱动和URL格式,所以在实际使用时需要根据具体的数据库来进行相应的配置。
JDBC代码步骤:
0)创建工程,导入驱动jar包
1)注册驱动
Class.forName("com.mysql.Driver");
2)获取链接
Connection conn=DriverManager.getConnection(url,usename,password);
3)定义SQL语句
String sql="SQL语句"
4)获取执行SQL语句
Statement stmt=conn.createStatement();
5)执行SQL
stmt.executeUpdate(sql);
6)处理返回结果
7)资源释放
3、JDBC代码框架
package com.ittheima.jdbc;
import java.sql.*;
public class JDBCDemo {
public static void main(String[] args)throws Exception{
//1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获取连接
String url="jadc:mysql://127.0.0.1:3306/db1"; //ip地址:端口号/数据库名称
String username="";
String password="";
Connection conn=DriverManager.getConnection(url,username,password);//链接路径,用户名,密码
//3、定义SQL
String sql="update account set money=2000 where id=1";
//4、获取执行sql的对象Statement
Statement stmt=conn.createStatement();
//5、执行sql
int count=stmt.executeUpdate(sql);//受影响的行数
//6、处理结果
System.out.println(count);
//7、释放资源
stmt.close();
conn.close();
}
}
4、API
1、 DriverManager(驱动管理类):
注册驱动、获取连接。url:连接本机mysql且端口默认3306,可简化书写
2、connection 作用:
- 获取执行SQL的对象
- Statement createStatement();普通执行sql对象
- PreparedStatement prepareStatement(sql);预编译SQL的执行AQL对象:防止SQL注入
- CallableStatement prepareCall(sql);执行存储过程的对象
- 事务管理
- MySQL事务管理
- 开启事务:BEGIN;/START TRANSACTION;
- 提交事务:COMMIT
- 回滚事务:ROLLBACK
- JDBC事务管理:
- setAutoCommit(Boolean autoCommit):true自动提交事务;false手动提交事务;
- 提交事务:commit();
- 回滚事务:rollback();
try{
//开启事务
conn.setAutoCommit(false);
//5.执行sql
//6.处理结果
//5.执行sql
//6.处理结果
//提交事务
conn.commit();
}catch(Exception throwables){
//回滚事务
conn.rollback();
throwables.printStackTrace();
}
3、Statement作用:执行SQL语句
int executeUpdate(sql);执行DML、DDL语句(返回值:DML语句影响的行数,DDL执行成功也可能返回0)
ResultSet executeQuery(sql):执行DQL语句(返回值:ResultSet结果集对象)
4、ResultSet(结果集对象)作用
封装了DQL查询语句的结果。获取查询结果,有一个光标指向当前结果行。
boolean next()
xxx getxxx 参数;【int getInt(参数)】
通常使用
while(r.next()){
//获取数据
r.getxxx(参数);
}
5、PreparedStatement作用:预编译Sql的对象,预防SQL注入问题
SQL注入:通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
可以理解为在输入账号密码之类的东西的时候,输入了一个脚本破解了密码,进而可以修改数据库,使数据库遭到损坏,更改,泄露。
1、获取PreparedStatement对象 使用'?'占位符代替
2、设置参数值:setXxx(参数,参数)给?赋值
3、执行SQL:executeUpdate();executeQuery();不需要再传递sql
5、校课总结
代码
import java.sql.*; public class jdbc { public static void main(String[] args) { // 1. 注册驱动 // 使用Class.forName 方法加载数据库驱动类。这里的"sun.jdbc.odbc.JdbcOdbc.Driver" 是ODBC - JDBC桥接驱动类的名称。 // 这种方式在较新版本的JDBC中已经不推荐使用这种硬编码的方式来注册驱动,因为驱动会自动加载。 // 但在某些旧环境或特定需求下可能还会用到。 try { Class.forName("sun.jdbc.odbc.JdbcOdbc.Driver"); } catch (ClassNotFoundException e) { } // 2. 获取连接 try { // 定义数据库连接的URL,这里的"jdbc:odbc:数据源名"表示使用ODBC数据源的JDBC连接。 // "数据源名"需要替换为实际在ODBC中配置的数据源名称。 String url = "jdbc:odbc:数据源名"; // 使用DriverManager的getConnection方法获取数据库连接对象。 // 这个方法会根据提供的URL、用户名和密码(这里未显示密码部分,可能使用默认配置或无密码情况)建立连接。 Connection conn = DriverManager.getConnection(url); // 通过连接对象创建Statement对象,Statement对象用于执行SQL语句。 Statement s = conn.createStatement(); // 使用Statement的executeUpdate方法执行一条更新SQL语句。 // 这里的语句是将表sc中id为1的记录的sno字段更新为100120。 s.executeUpdate("update sc set sno=100120 where id=1"); // 使用Statement的executeQuery方法执行一条查询SQL语句。 // 这里是查询sc表中的所有记录。 ResultSet r = s.executeQuery("select*from sc"); // 遍历查询结果集。 // 如果结果集中还有下一条记录,则执行循环体中的代码。 while (r.next()) { // 输出结果集中第一列的值,这里假设结果集的列是字符串类型。 System.out.print(r.getString(1) + ""); // 输出结果集中第二列的值。 System.out.print(r.getString(2) + ""); // 输出结果集中第三列的值。 System.out.print(r.getString(3) + ""); // 输出结果集中第四列的值。 System.out.print(r.getString(4) + ""); } // 关闭Statement对象,释放相关资源。 s.close(); // 关闭Connection对象,释放数据库连接资源。 conn.close(); } catch (SQLException e) { } } }