> 文章列表 > JDBC-2.JDBC介绍

JDBC-2.JDBC介绍

JDBC-2.JDBC介绍

一.与数据库连接代码

//测试数据库是否成功连接的类
package code.util;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
public class JDBCUtil {public static void main(String[] args)throws Exception {//1.注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.获取连接,获取与数据库的连接String url= "jdbc:mysql://localhost:3306/gaha_studentadministrationsystem?useUnicode=true&characterEncoding=utf8";String username="root";String password="123456";Connection conn= DriverManager.getConnection(url,username,password);//3.定义sqlString sql="update studenttable set studentPassword=123451 where studentId=1";//4.获取执行sql的对象StatementStatement stmt=conn.createStatement();//5.执行sqlint count=stmt.executeUpdate(sql);//6.处理结果System.out.println(count);//7.释放资源stmt.close();conn.close();}}

二.DriverManager(驱动管理类)

1.作用介绍

 (1)注册驱动

使用DriverManager注册给定的驱动程序

//程序中使用代码
Class.forName("com.mysql.cj.jdbc.Driver");
//点进去的类中有如下代码
registerDriver​(Driver driver)

(2)获取数据库连接

尝试建立与给定数据库URL的连接

getConnection​(String url, String user, String password)

①url:连接路径

jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...

示例:jdbc:mysql://127.0.0.1:3306/db1

细节:如果连接的是本机MySQL服务器,并且对MySQL的服务端口默认是3306,则url可以简写为

jdbc:mysql:///数据库名称?参数键值对1&参数键值对2...

②user:用户名

③password:密码

2.官方文档 

  注意:DriverManage本质是一个类

三.Connection(数据库连接对象)

 1.作用

(1) 获取执行SQL对象

①普通执行SQL对象

Statement createStatement()

②预编译SQL执行SQL对象:防止SQL注入

PreparedStatement prepareStatement(sql)

③执行存储过程

CallableStatement prepareCall(sql)

(2)事物管理

①MySQL事物管理

开启事务:BEGIN;/START TRANSACTION

提交事务:COMMIT

回滚事务:ROLLBACK

MySQL默认自动提交事务

②JDBC事务管理:Connection接口定义了3个应对方法

开启事务:setAutoCommit(boolean autoCommit);true为自动提交事务;false为手动提交事务

提交事务:commit()

回滚事务:rollback()

3.官方文档

四.Statement

1.作用:执行SQL语句

(1)执行DML,DDL语句

返回值:①DML语句影响的行数②DDL语句执行后,执行成功也可能返回0

int executeUpdate(sql)

(2)执行DQL语句

返回值:ResultSet结果集对象

ResultSet executeQuery(sql)

五.ResultSet(结果集对象)

1.作用

(1)封装了DQL查询语句的结果

(2)ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象

2.获取查询结果

(1)boolean next();

①将光标从当前位置向前移动一行

②判断当前行是否为有效行

③返回值:true:有效行,当前行有数据

false:无效行,当前行没有数据

(2)xxx getXxx(参数):获取数据

①信息:数据类型 如:int getInt(参数);String getString(参数)

②参数:int:列的编号,从1开始

String:列的名称1注意:

3.使用步骤

(1)游标向下移动一行,并判断该行是否有数据:next()

(2)获取数据:getXxx(参数)

/处理结果,遍历rs中所有的数据,光标向下移动一行,并判断当前行是否有数据*/
ResultSet rs=stmt.executeQuery(sql);
//循环判断游标是否为最后一行末尾
while(rs.next()){
//获取数据
rs.getXxx(参数);
}

六.PreparedStatement

1.作用:

(1)预编译SQL语句并执行

①获取PreparedStatement对象

//SQL语句中的参数值,使用?占位符代替
String sql="select * from user where usermane=? and password=?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt=conn.preparedStatement(sql);

②设置参数值

PreparedStatement对象:setXxx(参数1,参数2):给?赋值

Xxx:数据类型;如setInt(参数1,参数2)

参数1:?的位置编号,从1开始

参数2:?的值

③执行SQL

executeUpdate();/executeQuery();:不需要再传递SQL

(2)预防SQL注入问题

2.SQL注入:

SQL注入是通过操作输入来操作事先先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

3.PreparedStatement原理:

(1)PreparedStatement好处:

①预编译SQL,性能更高

②防止SQL注入:将敏感字符进行转义

(2)PreparedStatement原理:

①在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)

②执行时就不用在进行这些步骤,速度更快

③如果sql模板一样,则只需要进行一次检查,编译

一.查询功能(查询所有数据)

1.获取Connection

2.定义SQL:select * from tb_table1

3.获取PreparedStatement对象

4.设置参数:不需要

5.执行SQL

6.处理结果:List<Table1>

7.释放资源