Java第三十五天,用JDBC操作MySQL数据库(一),基础入门
一、JDBC的概念
Java DataBase Connectivity
从字面意思我们也不难理解,就是用Java语言连接数据库的意思
JDBC定义了Java语言操作所有关系型数据库的规则(接口)。即用同样的语句操作不同类型的关系型数据库。在这里需要注意的是,Sun公司给出了操作数据库的接口,而接口的实现类(数据库驱动jar包)由各大数据库产商自行设计完成!
二、简要概述步骤
- 导人驱动jar包
- 注册驱动
- 获取数据库连接对象 Connection
- 定义sql语句
- 获取执行sq1语句的对象 Statement
- 执行sq1语句,接受ql语句的执行的返回结果
- 处理sql语句的执行结果
友情小提示:
在导入jar驱动包的时候,可以通过两种方式:
① 在工程下新建一个目录(推荐libs,这样显得规范),将驱动jar包放到libs目录下,然后鼠标右键libs选中add as library
② 将jar驱动包放在指定的位置(推荐本项目的libs目录下),然后依次选中 File==>Project Structure==>Modules===>Dependencies===>+===>jars or directories
三、简单入门程序
import java.sql.*;
public class demo1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据库,并返回连接对象 参数分别为数据库url 数据库用户 数据库用户密码
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306","root","123456");
//定义sql执行语句,注意语句末尾不需要加封号
String sql = "show databases";
//获取执行sql语句的对象
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
System.out.println("指定目标存在以下数据库:");
while (resultSet.next()){
System.out.println(resultSet.getString(1));
}
statement.close();
conn.close();
}
}
可以看出成功的执行了
四、知识点详解
1.DriverManager
驱动管理类
功能:
(1)注册驱动
在API文档中,DriverManager类有这样一个方法:
static void registerDriver(Driver driver)
//注册与给定的驱动程序 DriverManager
但是我们注册驱动时,明明写的是下面这行代码啊:
Class.forName("com.mysql.jdbc.Driver");
这两行代码是如何关联起来的呢?我们知道:
在java里面任何class都要装载在虚拟机上才能运行。而 Class.forName(xxx.xxx.xxx) 这段代码就是装载类用的(和new 不一样),它返回的是一个类。静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。Class.forName(xxx.xxx.xxx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
那么Class.forName(xxx.xxx.xxx)使用的环境是什么呢?
假如有这样一个字符串变量,它代表一个类的路径(包名.类名),那么我们如何实例化它呢?那就是用这个方法了。注意:
Class object = (Class)Class.forName("pacage.Class").newInstance();
等效于
Class object = new Class();
通过上面的分析,我们大概可以猜测
static void registerDriver(Driver driver)
这行代码应该就是
com.mysql.jdbc.Driver
类中的静态代码段,我们可以验证一下:
在这里,还有一个需要注意的细节,那就是JDBC 5 版本之后,我们不需要自己注册数据库驱动了,为什么呢?因为 jar 驱动包已经帮我们注册了,请看下面的截图:
(2)获取数据库连接对象
注意:
在进行数据库连接时,如果数据库是本机的,且数据库占用的端口是3306,那么连接的代码可以简写成如下格式:
Connection conn = DriverManager.getConnection("jdbc:mysql://","user","passwd");
Connection conn = DriverManager.getConnection("jdbc:mysql:///数据库名","user","passwd");
2.Connection
数据库连接接口
(1)获取执行sql语句的对象
Statement createStatement()
PreparedStatement prepareStatement(String sql)
(2)管理事务
事务:业务操作,一个业务通常有许多步骤,这些步骤只允许同时成功或者同时失败
开启事务:
void setAutoCommit(boolean autoCommit)
参数为 false 时开启事务
提交事务:
void commit()
回滚事务:
void rollback()
3.Statement
执行sql语句类
用于执行静态SQL语句并返回其生成的结果的对象
boolean execute(String sql)
int executeUpdate(String sql) ===> 执行给定的SQL语句,这可能是 INSERT、 UPDATE、 DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句,该返回值是影响的行数
DML语句包括 INSERT、 UPDATE、 DELETE语句
ResultSet executeQuery(String sql) ===> 执行DQL(查询)语句,返回ResultSet对象
4.ResultSet
结果集类
5.PreparedStatement
执行sql语句类
用于执行动态SQL语句并返回其生成的结果的对象
Java第三十五天,用JDBC操作MySQL数据库(一),基础入门的更多相关文章
- Java学习笔记(十一)——通过JDBC操作mysql数据库
[前面的话] 时间总是好快,每次都感觉还没有怎么好好去过,对于好多事情,希望自己可以做的更多一点.心情能够好一点,平淡一点就行了. 学习过程中的知识点总结,基础知识,选择阅读. [JDBC定义] 定义 ...
- java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据
package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- Java进阶(三十五)java int与integer的区别
Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...
- “全栈2019”Java第三十五章:面向对象
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...
- JDBC操作MySQL数据库案例
JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- 使用JDBC操作MySQL数据库
一.JDBC简介 JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问,它由一组用Java语言编写的类和接口组 ...
- python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...
随机推荐
- C++ 动态链接库 dll的加载
//首先生成一个my.dll项目,在cpp中添加如下代码 //导出函数 _declspec(dllexport) int test(int a, int b) { return a + b; } // ...
- Excel 电子表格中,快速修改表格中的数值
打开设置单元格设置选项后,当前界面,分类下面的选项中,选择“自定义”,并在右侧展示的“类型(T)”下方的对话框中,输入以下代码: [=1]√;[=2]×; 并按确认, [=1] 意思为: 将单元格中, ...
- 使用Python批量获取学生期末考试成绩
以下是我们学校对于期末考试成绩临时查询的一个网站 我突发奇想,可不可以通过爬虫的方式批量获取成绩信息 于是说干就干 首先观察网页的请求 通过查看,我们可以很明显看到网站查询是通过对https://wx ...
- 基于《仙剑奇侠传柔情版》利用Java的简单实现(一)
基于<仙剑奇侠传柔情版>利用Java的简单实现(一) 2018-12-01 23:55:36 by Louis 一,新建一个类GameFrame.class,具体代码如下: pack ...
- MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)
网络上有很多MySQL表碎片整理的问题,大多数是通过demo一个表然后参考data free来进行碎片整理,这种方式对myisam引擎或者其他引擎可能有效(本人没有做详细的测试).对Innodb引擎是 ...
- SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级
源码地址:GitHub·点这里||GitEE·点这里 一.基本简介 1.概念描述 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性.包括核心的独立类库,监 ...
- 第十周Java实验作业
实验十 泛型程序设计技术 实验时间 2018-11-1 1.实验目的与要求 (1) 理解泛型概念: 泛型:也称参数化类型,就是在定义类,接口和方法时,通过类型参数只是将要处理的类型对象.(如Arra ...
- 使用docker构建双主mysql
我们有的时候需要双主mysql, 这样无论哪个数据库出现了问题的话都可以继续使用数据库.把两个数据库挂到一个代理上面,这样哪个服务出问题了,另外一个就可以继续服务了.当然本文不是主要谈代理的,所以这个 ...
- H3C路由器地址池租期时间H3CMSR830-6BHI-WiNet
H3C路由器地址池租期时间H3CMSR830-6BHI-WiNet 设备H3CMSR830-6BHI-WiNet 先输入dis dhcp server tree pool 查看地址池名称,然后 < ...
- [BFS]Codeforces Igor In the Museum
Igor In the Museum time limit per test 1 second memory limit per test 256 megabytes input standard ...