1,JDBC概述

JDBC(Java Database Connectivity,Java数据库连接),提供了一种与平台无关的用于执行SQL语句的标准Java API,可以方便地实现多种关系型数据库的统一操作,它由一组用Java语言编写的类和接口组成。

在实际开发中可以直接使用JDBC进行各个数据库的连接与操作,而且可以方便地向数据库中发送各种SQL命令。

JDBC的核心是为用户提供Java API类库,让用户能够创建数据库连接、执行SQL语句、检索结果集、访问数据库元数据等。

JDBC的主要操作类及接口

类及接口 描述
java.sql.DriverManager 用于管理JDBC驱动程序
java.sql.Connection 用于建立于特定数据库的连接,一个连接就是一个会话,建立连接后便可以执行SQL语句和获得检索结果
java.sql.Statement 一个Statement对象用于执行静态SQL语句,并获得语句执行产生的结果
java.sql.PreparedStatement 创建一个可以编译的SQL语句对象,该对象可以被多次运行,以提高执行效率,该接口是Statement的子接口
java.sql.ResultSet 用于创建表示SQL语句检索结果的结果集,用户通过结果集完成对数据库的访问。
java.sql.Date 该类是标准java.util.Date的一个子集,用于表示与SQL DATE相同的日期类型,该日期不包括时间
java.sql.Timestamp 标准的java.util.Date类的扩展,用于表示SQL时间戳,并增加了一个能表示纳秒的时间域。
java.sql.CallableStatement

用于执行SQL存储

java.sql.DatabaseMetaData 与java.sql.ResultSetMetaData一同用于访问数据库的元信息
java.sql.Driver 定义一个数据库驱动程序的接口
java.sql.DataTruncation 在JDBC遇到数据截断的异常时,报告一个警告(读数据时)或产生一个异常(写数据时)
java.sql.Time 该类时标准的java.util.Data的一个子集,用于表示时、分、秒
java.sql.SQLException 对数据库访问时产生的错误的描述信息
java.sql.SQLWarning 对数据库访问时产生的警告的描述信息
java.sql.Types

定义了表示SQL类型的常量

JDBC操作步骤

1)加载数据库驱动程序:各个数据库都会提供JDBC的驱动驱动程序开发包,直接把JDBC操作所需要的开发包(一般为jar或zip格式)配置到classpath路径即可。

(2)连接数据库:根据各个数据库的不同,连接的地址也不同,此连接地址将由数据库厂商提供。一般在使用JDBC连接数据库时都要求用户输入数据库连接的用户名和密码。

(3)使用语句进行数据库操作:数据库操作分为更新和查询两种,除了可以使用标准的SQL语句外,对于各个数据库也可以使用其自己提供的各种命令。

(4)关闭数据库连接:数据库操作完毕之后需要关闭连接以释放资源。

2,配置数据库驱动程序

1,下载Mysql数据库的驱动程序

Mysql官方网站下载:https://dev.mysql.com/downloads/connector/j/

默认是8.0版本,可以选择较低版本的5.0。tar.gz格式是linux下的压缩包格式,windows下下载.zip即可。

在压缩包中得到mysql-connector-java-5.1.49mysql-connector-java-8.0.22.jar

2,给项目添加jar包

(1)方式一:直接将jar复制到项目的lib目录下。最LOW的方法,用着极其方便,但是之后会产生各种各样的问题。

(2)方式二:通过Modules的Dependencies添加。也就中等推荐把。

  1. 打开 File -> Project Structure (Ctrl + Shift + Alt + S)
  2. 单击 Modules -> Dependencies -> "+" -> "Jars or directories"

(3)方式三:通过Libraries添加。强烈推荐。

  1. 在磁盘某处(最好在IDEA工作目录或者按照目录)下新建文件夹(专门用于保存jar包的目录)
  2. 打开 File -> Project Structure (Ctrl + Shift + Alt + S)
  3. 单击 Libraries  -> "+" -> "Java" -> 选择我们导入的项目主目录,点击OK
  4. 回到Modules菜单,选中之前导入的项目,点击“Dependencies”,点击“+” -> “Library”,将刚才创建成功的Library目录加入
  5. 双击新创建的Libraries,将此时不需要的项目移除

3,加载驱动程序

public class SQL5 {public static void main(String[] args) {try {Class.forName("com.mysql.jdbc.Driver");} catch (Exception e) {e.printStackTrace();}}
}

如果上面程序可以正常运行就说明数据库驱动已经配置成功。如果Mysql版本是8.0则采用如下程序验证(jar的版本与mysql的版本无任何关系,注意!!!,Mysql5.0用那个版本的jar都可,Mysql8.0也是)。

public class SQL8 {public static void main(String[] args) {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (Exception e) {e.printStackTrace();}}
}

3,连接及关闭数据库

如果数据库驱动程序可以正常加载,下面就可以使用DriverManager类连接数据库。

DriverManager类中的常用方法

方法 描述
public static Connection getConnection(String url) throws SQLException 通过连接地址连接数据库
public static Connection getConnection(String url,String user,String password) 通过连接地址连接数据库,同时输入用户名和密码

数据库连接地址的形式

jdbc :mysql ://127.0.0.1 :3306 /daka
jdbc协议 子协议 IP地址 端口 数据库名称

Connection接口的常用方法

方法 描述
Statement createStatement() throws SQLException 创建一个Statement对象
Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException 创建一个Statement对象,该对象将生成具有给定类型和并发性的ResultSet对象。
PreparedStatement prepareStatement(String sql) throws SQLException 创建一个PreparedStatement类型的对象
PreparedStatement prepareStatement(String sql,int resultSetType, int resultSetConcurrency) throws SQLException 创建一个PreparedStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象。
CallableStatement papareCall(String sql) throws SQLException 创建一个CallableStatement对象,此对象专门用于调用数据库的存储过程
CallableStatement prepareCall(String sql,int resultSetType,int resultSetConcurrency) throws SQLException 创建一个CallableStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象
DatabaseMetaData getMetaData() throws SQLException 得到数据库的元数据
void setAutoCommit(boolean autoCommit) throws SQLException 设置数据的自动提交,与事务无关
boolean getAutoCommit() throws   SQLException 判断数据库是否可以自动提交,与事务无关
Savepoint setSavepoint() throws SQLException 设置数据的恢复点,与事务有关
Savepoint setSavepoint(String name) throws SQLException 为数据库的恢复点指定一个名字,与事务有关
void rollback() throws SQLException 数据库操作回滚,与事务有关
void rollback(Savepoint savepoint) throws SQLException  数据库操作回滚到指定的保存点,与事务有关
void commit() throws SQLException 提交操作,与事务有关
boolean isClosed() throws SQLException 判断连接是否已关闭
void close() throws SQLException 关闭数据库
DatabaseMetaData getMetaData() throws SQLException 得到数据库的元数据对象
public class SQL5 {public static void main(String[] args) {try {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/daka", "root", "123456");if(connection!=null){System.out.print("数据库连接成功");connection.close();}else{System.out.print("数据库连接失败");}} catch (Exception e) {e.printStackTrace();}}
}
public class SQL8 {public static void main(String[] args) {try {Class.forName("com.mysql.cj.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql:"+ "//127.0.0.1:3306/daka?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT", "root", "123456");if(connection!=null){System.out.print("数据库连接成功");}else{System.out.print("数据库连接失败");}} catch (Exception e) {e.printStackTrace();}}
}

4,执行数据库SQL语句

数据库连接后,即可进行数据库的具体操作,如果要对数据库进行更新操作,则可肯定要使用Statement接口完成,此接口可以使用Connection接口中提供的createStatement()方法实例化

方法 描述
int executeUpdate(String sql) throws SQLException 执行数据库更新操作的SQL语句,如INSERT、UPDATE、DELETE等语句,返回更新的记录数
ResultSet executeQuery(String sql) throws SQLException 执行数据库查询操作,返回一个结果集对象
void addBatch(String sql) throws SQLException 增加一个待执行的SQL语句
int[] executeBatch() throws SQLException 批量执行SQL语句
void close() throws SQLException 关闭Statement操作
boolean execute(String sql) throws SQLException 执行SQL语句

1,执行插入操作

public class SQL {public static final String DRIVER = "com.mysql.jdbc.Driver";public static final String URL = "jdbc:mysql://127.0.0.1:3306/test";public static final String USERNAME = "root";public static final String PASSWORD = "123456";public static void main(String[] args) {try {Class.forName(DRIVER);Connection connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);Statement statement = connection.createStatement();String sql = "insert into student(name,number) values('燕双嘤','ysy2020')";statement.executeUpdate(sql);statement.close();connection.close();}catch (Exception e){e.printStackTrace();}}
}

或者采用拼凑型,这样可以动态的执行SQL。

String name = "燕双嘤";String number = "ysy2020";
String sql = "insert into student(name,number) values('"+name+"','"+number+"')";

问题:最后是否可以不执行statement.close();只执行connection.close();?

答案:可以只关闭一次连接,Java中连接只要一关闭,则其他的所有操作都会关闭。但是在开发JDBC中一般习惯分别按照顺序进行关闭。

2,执行修改操作

String sql = "update student set name='"+name+"'where number='"+number+"'";

3,执行删除操作

String sql = "delete from student where number='"+number+"'";

5,ResultSet接口&PreparedStatement接口

ResultSet接口

使用SQL中的Select语句可以查询出数据库的全部结果,在JDBC的操作中数据库的所有查询记录将使用ResultSet封装。数据保存在内存中,所以如果查询出的数据总量过大,则系统将会出现问题。

执行数据库查询,需要使用Statement接口定义中的executeQuery()方法,此方法返回值类型就是一个ResultSet的对象,此对象中存放了所有的查询结果。

方法 描述
boolean next() throws SQLException 将指针移到下一行
int getInt(int columnIndex) throws SQLException 以整数形式按列的编号取得指定列的内容
int getInt(String columnName) throws SQLException 以整数形式取得指定列的内容
float getFloat(int columnIndex) throws SQLException 以浮点数的形式按列的编号取得指定列的内容
float getFloat(String columnName) throws SQLException 以浮点数的形式取得指定列的内容
String getString(int columnIndex) throws SQLException 以字符串的形式按列的编号取得指定列的内容
String getString(String columnName) throws SQLException 以字符串的形式取得指定列的内容
Date getDate(int columnIndex) throws SQLException 以Date的形式按列的编号取得指定列的内容
Date getDate(String columnName) throws SQLException 以Date的形式取得指定列的内容
String sql = "select number,name from student";
ResultSet rs = statement.executeQuery(sql);
while(rs.next()){String number2 = rs.getString("number");String name2 = rs.getString("name");System.out.println(number2+" "+name2);
}

PreparedStatement接口

PreparedStatement是Statement的子接口,属于预处理操作(类似于占座行为),与直接使用Statement不同的是,PreparedStatement在操作时,是先在数据表中准备好一条SQL语句,但是此SQL语句的具体内容暂时不设置,而是之后再进行设置。以插入数据为例,使用PreparedStatement插入数据时,数据表中的指针首先指向最后一条数据之后,但里面的内容是不知道的,而是等待用户分别设置。

由于PreparedStatement对象已预编译过,所以其速度要高于Statement对象。因此,对于需要多次执行的SQL语句经常使用PreparedStatement对象操作,以提高效率。

在PreparedStatement中执行的SQL语句之前并没有什么不同,但是对于具体的内容是采用?的占位符形式出现的,设置时按照?的顺序设置具体的内容。

方法 描述
int executeUpdate() throws SQLException 执行设置的预处理SQL语句
ResultSet executeQuery() throws SQLException 执行数据库查询操作,返回ResultSet
void setInt(int parameterIndex,int x) throws SQLException 指定要设置的索引编号,并设置整数内容
void setFloat(int parameterIndex,float x) throws SQLException 指定要设置的索引编号,并设置浮点数内容
void setString(int parameterIndex,String x) throws SQLException 指定要设置的索引编号,并设置字符串内容
void setDate(int parameterIndex,Date x) throws SQLException 指定要设置的索引编号,并设置java.sql.Date类型的日期内容
String sql = "select * from student where number = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,"ysy2021");
ResultSet rs = preparedStatement.executeQuery();

JAVA:JDBC数据库编程相关推荐

  1. [java] JDBC数据库编程

    JDBC(Java Database Connectivity) Java数据库连接技术 官方JDK中提供的与JDBC有关的API都在java.sql包里面 API(Application Progr ...

  2. Java的数据库编程之入门案例

    通过上一篇博客Java的数据库编程之背景概述,可以得出: 1.JDBC API与驱动器管理器是有SUN公司制定并退出的: 2.每个数据库的驱动器程序是由每个数据库开发商以及数据库工具开发商在遵循SUN ...

  3. 为什么使用JDBC数据库编程

    为什么使用JDBC数据库编程 本文节选自<21天学通JAVA>一书 在JDBC数据库编程中经常要使用ODBC.所以,在讲述JDBC的驱动程序分类之前,首先介绍什么是ODBC.ODBC是指O ...

  4. 【Java】数据库编程

    Java中数据库编程是通过JDBC实现的.使用JDBC技术涉及三种不同的角色:Java官方,开发人员和数据库厂商.如下图所示: Java官方提供JDBC接口,如:Connection,Statemen ...

  5. JDBC 数据库编程基础

    JDBC 数据库编程基础 安装MySQL 进入官网下载页面:https://www.mysql.com/cn/downloads/ 以下红色横线标记的为mysql社区版,是免费的mysql版本: 接下 ...

  6. JAVA实现数据库编程第三章_[数据库]使用Java实现数据库编程—03 第三章 高级查询(一)...

    [数据库]使用Java实现数据库编程-03 第三章 高级查询(一) 0 2018-07-21 03:01:10 1.修改表:(1)修改表名语法: ALTER TABLE RENAME [ TO ] : ...

  7. java语言数据库编程_JAVA语言数据库编程实例详解

    本文主要向大家介绍了JAVA语言数据库编程实例详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. DOS命令登录MySQL数据库:mysql -h 127.0.0.1 -u root ...

  8. MySQL~Java的数据库编程:JDBC(JDBC的环境配置以及使用)

      目录 JDBC的环境配置 JDBC的使用步骤(Java操作数据库) 建立数据库连接 方式一:DriverManager 方式二:DataSource(数据源/数据库连接池) DataSource与 ...

  9. MySQL数据库(Java的数据库编程:JDBC)

    作者:渴望力量的土狗 博客主页:渴望力量的土狗的博客主页 专栏:MySQL数据库 目录 什么是数据库编程: 什么是JDBC? JDBC工作原理: JDBC的使用及相关操作: JDBC开发案例: JDB ...

  10. java 核心技术Ⅱ--章五:JDBC数据库编程

    java数据库编程JDBC 简单的jdbc编程示例: public class DBTest {public static void runTest(){Connection conn = null; ...

最新文章

  1. Learn OpenGL (十一):光照贴图
  2. 前端性能毫秒必争方案(一)HTTP请求
  3. linux lvm 逻辑卷 创建 扩容 缩减 删除
  4. java 知乎面试题_面试题|Java基础17道常见面试题
  5. java开发常见异常_最常见的Java异常及其对Java开发人员的评价
  6. pv原语模拟实现_HART协议压力变送器硬件设计及实现
  7. 【less-11】基于SQLI的POST字符型SQL注入
  8. 【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题【含Matlab源码 500期】
  9. nginx工作原理:
  10. SCDM学习笔记(2)
  11. 如果你突然打了个喷嚏,那
  12. 华为sug 6000 系列防火墙端口范围映射
  13. 安防市场视频监控比重大 并有新商机
  14. 最新江苏水利水电安全员模拟真题及答案解析
  15. SQL中行转列、列转行
  16. 【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调
  17. 星辰天合联合星环科技完成互认证 共同打造更有生命力的大数据存算解决方案
  18. Neo4j 4.x版本与jdk11的下载
  19. Eclipse为什么要先安装Tomcat
  20. 逆战登录界面不显示服务器,win10系统逆战为什么进不去的原因和解决方法

热门文章

  1. OpenCV 调用手机摄像头
  2. 添加小度在家显示无法连接服务器,小度在家突然连不上网了
  3. Rust的错误处理机制
  4. 关于anaconda
  5. sublime text 3 javascript 语法检查
  6. 迟来的2015年终总结
  7. 关于PHP签名中的容易犯错问题记录
  8. “让我帮你百度一下”源码
  9. css入门1 css简介
  10. springboot springsecurity报错 **.LoginUser cannot be cast to **.LoginUser