JDBC技术
JDBC
JDBC是java和数据库之间连接的桥梁,并且它能够把数据库里面的数据获取出来
所以JDBC技术即为java连接数据库的技术
java不生产数据,他只是数据的搬运工,从数据库中搬运出来
JDBC原理是多态
java面向对象语言的特性:封装 继承 多态 (层层递进)
封装就是把代码方法跟属性放进一个一个类的形式呈现
继承就是子类继承父类,实现代码的重用
多态就是一个方法在不同的子类中可以呈现出多种不同的形态
发生多态是有前提条件的
- 继承关系的两个类,子类重写父类的方法 (Ctrl+o快捷键重写方法)
- 父类的引用指向子类对象
JDBC即JDBCsun公司制定的Java用于连接数据库的标准接口API(规范了访问数据库的标准,因为有很多不同的数据库,所以不可能编写一套API可以连接到天下所有的数据库,而jdbc的出现就是sun公司提供的一套访问数据库的规范(一组接口),其他公司会遵循这个规范提供一套可以访问自己公司数据库服务器的API,sun公司提供的规范命名叫jdbc,其他公司访问自己数据库的API叫驱动)
数据库连接驱动,
都是继承,较之类,接口interface用来制定标准,凡是继承这个接口都需要实现里面的抽象方法,规定了实现这个接口的方法的编写内容
JDBC核心类(接口)介绍
- DriverManager:用于注册驱动 (加载驱动)
- Connection:表示与数据库创建的连接 (连接java对象与数据库)
- Statement操作数据库sql语句的对象
- ResultSet:结果集或一张虚拟表
idea中out文件夹是用存放java源文件被编译成class的文件的
JDBC连接访问数据库(核心步骤)
- 加载数据库连接驱动
- 获取数据库连接对象
- 得到一个可以执行SQL语句的对象
- 传入需要执行的SQL语句
- 处理响应回来的数据
- 关闭数据库连接
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.wuyi.practice;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCDemo {
//连接数据库前需要数据库的信息
//数据库驱动名称
static String DRIVER_NAME = "com.mysql.jdbc.Driver";
//数据库URL地址
static String url = "jdbc:mysql://localhost:3306/test";
static String username = "root";
//自己数据库的密码
static String password = "root";
public static void main(String[] args) throws Exception {
//加载数据库连接驱动
Class.forName(DRIVER_NAME);
//获取数据库连接对象
Connection connection = DriverManager.getConnection(url, username, password);
//获取执行SQL语句的对象
Statement statement = connection.createStatement();
//传入需要执行的SQL语句
String sql = "select * from student";
//查询结果集 存放查询结果数据
ResultSet resultSet = statement.executeQuery(sql);
//处理响应回来的数据 一行一行去访问处理数据
while (resultSet.next()) {
//获取每一行的数据
System.out.println(resultSet.getInt("id") + "\t\t\t\t" + resultSet.getString("name"));
}
//关闭数据库连接(谁先创建谁后关闭)
resultSet.close();
statement.close();
connection.close();
}
}
数据库操作分为查询(select)和修改(insert添加、update修改、delete删除)
package com.gec.demo;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
* 编写数据库修改语句
*/
public class JDBCUpdate {
//连接数据库前需要数据库的信息
//数据库驱动名称
static String DRIVER_NAME = "com.mysql.jdbc.Driver";
//数据库的URL地址
static String url="jdbc:mysql://localhost:3306/test";
static String username = "root";
//数据库密码 大家写自己的密码
static String password ="1234";
static Connection connection = null;
static Statement statement = null;
static Statement getStatement() {
try {
//加载数据库驱动
Class.forName(DRIVER_NAME);
//得到一个驱动管理器 创建连接
connection = DriverManager.getConnection(url, username, password);
//得到一个可以执行sql的对象
statement = connection.createStatement();
}catch (Exception e){
e.printStackTrace();
}
return statement;
}
//使用单元测试类注解来运行方法 第一次需要导入junit的jar包 写完@Test红色的
// 在他的单词后面 按alt+enter(万能修复快捷键) 确定确定
//添加数据
@Test
public void insert() throws Exception {
//获取statement方法被封装好了
Statement statement = getStatement();
//执行sql语句
String sql = "insert into student values(5,'谢工')";
//这些数据库修改语句 是统一返回 数据库sql语句修改的行数
//处理sql语句的执行结果
int count = statement.executeUpdate(sql);
System.out.println("修改了"+count+"条数据");
//关闭数据库连接
close();
}
@Test
public void udpate() throws Exception {
//加载数据库驱动
Class.forName(DRIVER_NAME);
//得到一个驱动管理器 创建连接
Connection connection = DriverManager.getConnection(url, username, password);
//得到一个可以执行sql的对象
Statement statement = connection.createStatement();
//执行sql语句
String sql = "update student set name='谢工666' where id=5";
//这些数据库修改insert update delete语句 是统一返回 数据库sql语句修改的行数
//处理sql语句的执行结果
int count = statement.executeUpdate(sql);
System.out.println("修改了"+count+"条数据");
//关闭数据库连接
close();
}
@Test
public void delete() throws Exception{
//加载数据库驱动
Class.forName(DRIVER_NAME);
//得到一个驱动管理器 创建连接
Connection connection = DriverManager.getConnection(url, username, password);
//得到一个可以执行sql的对象
Statement statement = connection.createStatement();
//执行sql语句
String sql = "delete from student where id =5";
//这些数据库修改insert update delete语句 是统一返回 数据库sql语句修改的行数
//处理sql语句的执行结果
int count = statement.executeUpdate(sql);
System.out.println("修改了"+count+"条数据");
//关闭数据库连接
close();
}
static void close(){
try {
statement.close();
connection.close();
}catch (Exception e){
//捕获异常然后在这里可以进行对应的处理
e.printStackTrace();
}
}
}
2022更新新增预编译
JDBC 固定步骤:
statement:
- 加载驱动
- 连接数据库,代表数据库
- 向数据库发送SQL的对象Statement : CRUD
- 编写SQL (根据业务,不同的SQL)
- 执行SQL
- 关闭连接(先开的后关)
public class TestJdbc {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//配置信息
//useUnicode=true&characterEncoding=utf-8 解决中文乱码
String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "123456";
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.连接数据库,代表数据库
Connection connection = DriverManager.getConnection(url, username, password);
//3.向数据库发送SQL的对象Statement,PreparedStatement : CRUD
Statement statement = connection.createStatement();
//4.编写SQL
String sql = "select * from users";
//5.执行查询SQL,返回一个 ResultSet : 结果集
ResultSet rs = statement.executeQuery(sql);
while (rs.next()){
System.out.println("id="+rs.getObject("id"));
System.out.println("name="+rs.getObject("name"));
System.out.println("password="+rs.getObject("password"));
System.out.println("email="+rs.getObject("email"));
System.out.println("birthday="+rs.getObject("birthday"));
}
//6.关闭连接,释放资源(一定要做) 先开后关
rs.close();
statement.close();
connection.close();
}
}
预编译SQL prestatement
public class TestJDBC2 {
public static void main(String[] args) throws Exception {
//配置信息
//useUnicode=true&characterEncoding=utf-8 解决中文乱码
String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "123456";
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.连接数据库,代表数据库
Connection connection = DriverManager.getConnection(url, username, password);
//3.编写SQL
String sql = "insert into users(id, name, password, email, birthday) values (?,?,?,?,?);";
//4.预编译
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,2);//给第一个占位符? 的值赋值为1;
preparedStatement.setString(2,"狂神说Java");//给第二个占位符? 的值赋值为狂神说Java;
preparedStatement.setString(3,"123456");//给第三个占位符? 的值赋值为123456;
preparedStatement.setString(4,"24736743@qq.com");//给第四个占位符? 的值赋值为1;
preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));//给第五个占位符? 的值赋值为new Date(new java.util.Date().getTime());
//5.执行SQL
int i = preparedStatement.executeUpdate();
if (i>0){
System.out.println("插入成功@");
}
//6.关闭连接,释放资源(一定要做) 先开后关
preparedStatement.close();
connection.close();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!