12-jdbc入门

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 一、jdbc基本概念 jdbc : Java Database Connectivity sun公司为了统一对数据库的操作,定义了一套api,称之为jdbc 这套api完全有接口组成,我们在编写程序的时候针对接口进行调用 这些接口交给数据库厂家去实现, 不同的数据库厂商会提供不同的实现类,这些实现类被我们称作数据库的驱动   二、实现jdbc程序 步骤: 1. 实验环境

一、jdbc基本概念

jdbc : Java Database Connectivity

sun公司为了统一对数据库的操作,定义了一套api,称之为jdbc

这套api完全有接口组成,我们在编写程序的时候针对接口进行调用

这些接口交给数据库厂家去实现, 不同的数据库厂商会提供不同的实现类,这些实现类被我们称作数据库的驱动

 

二、实现jdbc程序

步骤:

1. 实验环境

建 user 表  user.sql

create database day12 character set utf8 collate utf8_general_ci;

 

use day12;

 

create table users(

    id int primary key auto_increment,

    name varchar(40),

    password varchar(40),

    email varchar(60),

    birthday date

)character set utf8 collate utf8_general_ci;

 

insert into users(name,password,email,birthday)

values('zs','123456','zs@sina.com','1980-12-04');

insert into users(name,password,email,birthday)

values('lisi','123456','lisi@sina.com','1981-12-04');

insert into users(name,password,email,birthday)

values('wangwu','123456','wangwu@sina.com','1979-12-04');

 

2. 导入数据库的驱动

mysql-connector-java-5.0.8-bin.jar

 

3. 编程java程序

// 1. 注册数据库的驱动

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

// 2. 建立与mysql数据库的连接  用到 jdbc api

String url = "jdbc:mysql://localhost:3306/day11";

String user = "root";

String password = "root";

Connection conn = DriverManager.getConnection(url, user, password);

// 3. 创建用于发送sql语句的 Statement 对象

Statement stmt = conn.createStatement();

// 4. 编写一句 sql

String sql = "select * from users";

// 5. 发送sql, 获得结果集

ResultSet rs = stmt.executeQuery(sql);

// 6. 处理结果集

System.out.println("id | name   | password | email  | birthday");

while(rs.next()) {

    // 有第一行

    int id = rs.getInt("id");   // 通过列名取值比较直观

    String name = rs.getString("name");

    String psw = rs.getString("password");

    String email = rs.getString("email");

    Date birthday = rs.getDate("birthday");

    System.out.println(id + " | " + name + " | " + psw + " | " + email + " | " + birthday);

}

// 7. 关闭连接 释放资源

rs.close();

stmt.close();

conn.close();

 

三、jdbc程序详解

1. 注册驱动

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

上面的语句会导致注册两次驱动

原因在于,查看Driver类的源码会发现在静态代码块中完成了注册驱动的工作,

也就是说注册驱动其实很简单,只需要加载驱动类即可

Class.forName(“com.mysql.jdbc.Driver”);

 

2. 创建数据库的连接

Connection conn = DriverManager.getConnection(url, user, password);

其中:

url, 相当于数据库的访问地址,程序员通过url指定需要访问的数据库

jdbc:mysql:[]//localhost:3306/test?参数名:参数值

其中jdbc为主协议,mysql为子协议,localhost为主机名,3306为端口号,test为数据库名

url的后面可以跟参数,常用的参数有:user=root&password=root&characterEncoding=UTF-8

 

如果url地址后面跟了user和password,创建Connection对象时将不必再次传入值

Connection conn = DriverManager.getConnection(url);

 

补充: 如果访问的localhost:3306,url 可省写为jdbc:mysql:///test

 

3. Connection 对象

Connection对象用于表示与某个数据库之间的连接,在程序中对数据库的所有操作都需要通过此对象来完成

常用方法有:

createStatement():创建向数据库发送sql的statement对象。

prepareStatement(sql) :创建向数据库发送预编译sql的PreparedStatement对象。

prepareCall(sql):创建执行存储过程的callableStatement对象。

setAutoCommit(boolean autoCommit):设置事务是否自动提交。

commit() :在链接上提交事务。

rollback() :在此链接上回滚事务。

 

4. Statement 对象

用于向数据库发送sql语句

execute(String sql):用于向数据库发送任意sql语句,但是返回值为boolean,不能满足我们的需求

executeQuery(String sql) :只能向数据发送查询语句,返回值是ResultSet 结果

executeUpdate(String sql):只能向数据库发送insert、update或delete语句

addBatch(String sql) :把多条sql语句放到一个批处理中。

executeBatch():向数据库发送一批sql语句执行。

 

5. ResultSet 对象

对于查询操作,该对象特别重要,因为它专门用于封装结果集

存储的形式就是一种表格的形式,同样是列+行,说白了就和我们在 dos 命令行窗口查询的结果一样

 

遍历方式:

一开始游标指向结果集第一行, 也就是表头

通过 next 将游标移向下一行, 如果没有下一行,该方法会返回false

获得当前行的数据需要调用get方法:

get(int index)获得第几列  列数从1开始

get(String columnName) 根据列名获得值  常用

 

数据库的数据类型与java中数据类型的对应关系

 

ResultSet对象的常用方法

next():移动到下一行

previous():移动到前一行

absolute(int row):移动到指定行

beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面。

 

6. 释放数据库资源

由于数据库的资源非常宝贵,所以用完了一定要记得释放资源

特别是Connection对象,因为数据允许的并发访问连接数量往往都比较有限

 

在java程序中,我们应该将最终必须要执行的代码放到finally当中

 

释放资源的代码

if(rs!=null) {

    try {

       rs.close();

    } catch (SQLException e) {

       e.printStackTrace();

    }

    rs = null;

}

 

if(stmt!=null) {

    try {

       stmt.close();

    } catch (SQLException e) {

       e.printStackTrace();

    }

    stmt = null;

}

 

if(conn!=null) {

    try {

       conn.close();

    } catch (SQLException e) {

       e.printStackTrace();

    }

    conn = null;

}

 

 

四、jdbc实现crud

1. 编写程序对User表进行增删改查操作

 

2. 防止 sql 注入

在 service 层进行逻辑判断

使用PreparedStatement对象

 

3. 编写工具类对 jdbc 程序进行优化

将获得连接和释放资源的代码写到通用的工具类中

 

 

 

五、 jdbc案例

实现一个简单的员工信息管理系统,练习对员工表的crud

 

字段名

说明

类型

id

编号

varchar(40)

name

员工姓名

varchar(20)

gender

性别

varchar(4)

birthday

出生日期

date

idcard

身份证号

varchar(20)

degree

学历

varchar(20)

entrydate

入职日期

date

position

部门

varchar(40)

department

职位

varchar(20)

 

 

web开发的两种模式

 

model1: jsp+javabean   只适合小型应用

model2: servlet+jsp+javabean    mvc

       jsp 的作用只是显示的模板,所以在mvc中jsp应该禁止外界直接方法,藏在 web-inf下面

 

web应用的分层框架

 

案例实现步骤:

1. 搭建开发环境

1) 建工程 建包

2) 导入需要jar包

    BeanUtils 相关jar包

    jstl  标签

    mysql 的驱动

3) 创建数据库和表

    create database day12_employee;

    use day12_employee;

    create table employee

    (

       id varchar(40) primary key,

       name varchar(20),

       gender varchar(6),

       birthday date,

       idcard varchar(20),

       degree varchar(20),

       entrydate date,

       department varchar(20),

       position varchar(40)

    );

 

 

2. 设计bean

Employee.java

 

3. 实现dao

 

4. 实现service

简单service 原封不动调用dao的方法

 

5. 实现web层

首页

 

 

 

 

 

 

 

 

 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Oracle 安全 Java
2022 最新版 JDK 17 下载与安装 步骤演示 (图示版)
2022 最新版 JDK 17 下载与安装 步骤演示 (图示版)
1292 0
2022 最新版 JDK 17 下载与安装 步骤演示 (图示版)
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
282 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
406 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
132 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1655 158