java大数据_Java jdbc

java大数据_Java jdbc通过一次疫情 距离上一次学习大数据已经快过去半年了

通过一次疫情,距离上一次学习大数据已经快过去半年了。。不能半途而废!!!!在前面已经学习了Mysql的基础了,接下来正好可以来学习用Java如何来操纵数据库,也就是JDBC技术,其实这块之前也用过,不过都忘得差不多了,为了打好地基从0开始学习。

快速入门:

什么是JDBC?

它的全称为“Java DataBase Connectivity”,既Java 数据库连接, Java语言操作数据库。嗯,这个是从字面意思来理解的,但是它本质其实是这样的:

JDBC 规范定义接口,具体的实现由各大数据库厂商来实现。JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个 数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即 可,数据库驱动由数据库厂商提供。

用通俗的话来描述其本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
下面来看一下示意图:

也可以看到使用JDBC的好处如下:

  • 程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。
  • 使用同一套 Java 代码,进行少量的修改就可以访问其他 JDBC 支持的数据库。

JDBC快速入门:

有了基本概念之后,接下来则尝试来用java操作一下mysql数据库,快速感受一下JDBC的魅力。

1、在MAC上安装Mysql:

安装Myql:

在之前的mysql学习是在windows平台上进行的,而对于一个习惯mac的程序员来说也有必要来搭建一下环境,所以这里重新装一下mac的mysql的环境,为之后的学习做好铺垫,这里借签一下之前https://www.cnblogs.com/webor2006/p/11770756.htmlwindows安装mysql的过程,首先到官网https://dev.mysql.com/downloads/mysql/先下载安装包:

然后安装方法就不多说了,可以参考:https://www.sigusoft.com/p/2906abd8fd47,安装完之后,接下来则需要mysql配置到环境变量中,这样就可以在终端上来输入命令操纵Mysql了:

验证一下是否配置好:

命令是生效了,只是目前mysql服务器还没启,此时则需要进“系统偏好设置”启动一下它:

 

好,再来试一下mysql命令:

xiongweideMacBook-Pro:ZhiyiCloudScreenS1 xiongwei$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.20 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.01 sec) mysql>  
GUI工具:

对于平常使用肯定需要基于GUI,所以也提前把它给配置好,那在MAC上用哪款可视化的工具呢?这里用它--https://www.jetbrains.com/datagrip/,说到jetbrains就不用多说了,肯定不是太差,当然它不是免费的,只有30天的试用版,由于我买了正版的授权码所以肯定选它了,先来了解一下这个工具:

嗯,数据库一家统,具体是不是好用得之后再慢慢感受,接下来把它给下载下来,并打开,然后先激活一下:

接下来则创建数据库连接:

可以看到市面上的流行数据库都支持,还真是如官网所说:“Many databases, one tool”,咱们当然是创建Mysql的:

由于我的渣网,经过漫长的等待后,则就可以看到咱们配置的连接是否正确了,如果正确的话则会是如下所示:

然后ok之后,则就可以操作数据库了,比如:

呃,一定得要写sql才能展现么? 貌似没找到通过可视化的操作来不写SQL也能实现数据库的操作方法,不过,我觉得是好事,学习角度就得对SQL语句多敲,这样才能更加熟练的掌握SQL。关于MAC上的mysql安装就先到这,接下来则开始进入JDBC的学习之中。

2、 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar

到Intellij IDEA中新建一个工程,先创建一个空的项目,里面用于JavaWeb的集中学习:

3、复制mysql-connector-java-bin.jar驱动jar包到项目的libs目录下

我们知道要想能操纵数据库,则需要下载数据库相印的驱动jar包,上官网:https://dev.mysql.com/downloads/connector/j/5.1.html

拷到工程中:

4、右键-->Add As Library

5、 注册驱动

接下来则可以撸码来操练Mysql数据库了,由于是快速入门,里面的细节先不用管,先按步骤能达到操作mysql的目的既可,之后再对其进行详细学习。

package com.jdbc.test; public class JdbcTest1 { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); } } 

这个代码在当时学习JVM时提到过,它是属于类的主动使用的一种情况,回忆一下:https://www.cnblogs.com/webor2006/p/8835953.html

很显然就会导致类被初始化,不多解释了,学习知识得要相互串联,这样学习起来也会在大脑中形成比较好的印象。

6、 获取数据库连接对象 Connection

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; public class JdbcTest1 { public static void main(String[] args) throws Exception { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库的连接对象 Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", ""); } } 

其中“jdbc:mysql://localhost:3306/db3”是不是在我们的DataGrip连接Mysql配置时有看到过:

7、 定义sql

接下来则可以定义要执行的SQL语句了,这里咱们用一个更新语句,在库中有一个这个表:

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; public class JdbcTest1 { public static void main(String[] args) throws Exception { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库的连接对象 Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", ""); //定义要执行的sql String sql = "UPDATE salarygrade SET losalary = 6000 WHERE grade = 1"; } } 

8、 获取执行sql语句的对象 Statement

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class JdbcTest1 { public static void main(String[] args) throws Exception { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库的连接对象 Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", ""); //定义要执行的sql String sql = "UPDATE salarygrade SET losalary = 6000 WHERE grade = 1"; //获得执行sql的对象 Statement statement = root.createStatement(); } } 

9、 执行sql,接受返回结果

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class JdbcTest1 { public static void main(String[] args) throws Exception { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库的连接对象 Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", ""); //定义要执行的sql String sql = "UPDATE salarygrade SET losalary = 6000 WHERE grade = 1"; //获得执行sql的对象 Statement statement = root.createStatement(); //执行sql,由于这个sql属于更新操作,所以调用更新相关的API int count = statement.executeUpdate(sql); } } 

10、 处理结果

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class JdbcTest1 { public static void main(String[] args) throws Exception { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库的连接对象 Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", ""); //定义要执行的sql String sql = "UPDATE salarygrade SET losalary = 6000 WHERE grade = 1"; //获得执行sql的对象 Statement statement = root.createStatement(); //执行sql,由于这个sql属于更新操作,所以调用更新相关的API int count = statement.executeUpdate(sql); //处理结果 System.out.println("更新sql执行完成:" + count); } } 

11、 释放资源

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class JdbcTest1 { public static void main(String[] args) throws Exception { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库的连接对象 Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", ""); //定义要执行的sql String sql = "UPDATE salarygrade SET losalary = 6000 WHERE grade = 1"; //获得执行sql的对象 Statement statement = root.createStatement(); //执行sql,由于这个sql属于更新操作,所以调用更新相关的API int count = statement.executeUpdate(sql); //处理结果 System.out.println("更新sql执行完成:" + count); //释放资源 statement.close(); root.close(); } } 

好!!!接下来运行看一下,第一个JDBC操作mysql的程序能否成功:

貌似成功了,查一下数据看有没有被更新:

第一个JDBC的例子就完美运行,但是!!对于它里面的细节还一点都不懂,为啥要这样写代码呢?所以接下来有必要对用到的相关类进行一个了解。

各个类详解:

在快速入门的代码中涉及到这几个关键类:

public static void main(String[] args) throws Exception { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库的连接对象 Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", ""); //定义要执行的sql String sql = "UPDATE salarygrade SET losalary = 6000 WHERE grade = 1"; //获得执行sql的对象 Statement statement = root.createStatement(); //执行sql,由于这个sql属于更新操作,所以调用更新相关的API int count = statement.executeUpdate(sql); //处理结果 System.out.println("更新sql执行完成:" + count); //释放资源 statement.close(); root.close(); } 

下面则来全面了解一下它们。

DriverManager:驱动管理对象

它其实主要是有下两个功能:

1、注册驱动:告诉程序该使用哪一个数据库驱动jar;

我们可以看一下这个类中有一个注册的方法:

而它的调用其实是具体的数据库产品中进行的,也就是我们第一句所写的:

如之前所提示,它由于主动使用了类,则会对类进行初始化,则会执行它的静态代码块,所以瞅一下这个类的静态代码:

其实有个细节,这句话可以省略:

关于这块其实在当时学习JVM的SPI场景分析类加载机制时详细分析过,具体可以参考https://www.cnblogs.com/webor2006/p/9275901.html。

2、获取数据库连接;

其实也就是对应这句代码:

下面对这个API稍加解释一下:

 * 方法:static Connection getConnection(String url, String user, String password) * 参数: * url:指定连接的路径 * 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称 * 例子:jdbc:mysql://localhost:3306/db3 * 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称 * user:用户名 * password:密码  

下面咱们来试一下如上所说简写的写法:

执行:

确实是!!! 

Connection:数据库连接对象

它主要有以下两个作用:

1、获取执行sql 的对象;

  • Statement createStatement()
  • PreparedStatement prepareStatement(String sql)
    这个暂时还木有用到,这个在最后再来解释。

2、管理事务; 

事务这块暂时还木有使用到,不过未来肯定少不了用它的,先提前了解一下:

  • 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
  • 提交事务:commit()
  • 回滚事务:rollback()
     

Statement:执行sql的对象

它主要是用来执行sql的,主要有如下几种执行方法:

  • boolean execute(String sql) :可以执行任意的sql,不是很常用,了解既可。
  • int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
    返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。
  • ResultSet executeQuery(String sql) :执行DQL(select)语句

接下来咱们则做个小练习,用来对其实践一下:

1. salarygrade表 添加一条记录

在上面的入门示例中其实代码是不健全的,异常直接向外抛出了,而且资源的释放没放到finally中:

所以这次的练习正规化一下,代码比较简单,过一下既可:

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; / * salarygrade添加一条记录 */ public class JdbcTest2 { public static void main(String[] args) { Statement stmt = null; Connection conn = null; try { //1. 注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2. 定义sql String sql = "insert into salarygrade values(6,,)"; //3.获取Connection对象 conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", ""); //4.获取执行sql的对象 Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql);//影响的行数 //6.处理结果 System.out.println(count); if (count > 0) { System.out.println("添加成功!"); } else { System.out.println("添加失败!"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { //7. 释放资源 //避免空指针异常 if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } 

运行一下:

此时看一下数据库数据:

 

2. salarygrade表 修改记录

这个比较简单,不多说:

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; / * salarygrade修改一条记录 */ public class JdbcTest3 { public static void main(String[] args) { Statement stmt = null; Connection conn = null; try { //1. 注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2. 定义sql String sql = "UPDATE salarygrade SET hisalary =  WHERE grade = 6"; //3.获取Connection对象 conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", ""); //4.获取执行sql的对象 Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql);//影响的行数 //6.处理结果 System.out.println(count); if (count > 0) { System.out.println("修改成功!"); } else { System.out.println("修改失败!"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { //7. 释放资源 //避免空指针异常 if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } 

运行:

 

看数据:

3. salarygrade表 删除一条记录

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; / * salarygrade删除一条记录 */ public class JdbcTest4 { public static void main(String[] args) { Statement stmt = null; Connection conn = null; try { //1. 注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2. 定义sql String sql = "DELETE FROM salarygrade WHERE grade = 6"; //3.获取Connection对象 conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", ""); //4.获取执行sql的对象 Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql);//影响的行数 //6.处理结果 System.out.println(count); if (count > 0) { System.out.println("删除成功!"); } else { System.out.println("删除失败!"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { //7. 释放资源 //避免空指针异常 if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } 

运行:

4、创建一张student表:

package com.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; / * 创建一张student表 */ public class JdbcTest5 { public static void main(String[] args) { Statement stmt = null; Connection conn = null; try { //1. 注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2. 定义sql String sql = "CREATE TABLE student(id int , name varchar(20))"; //3.获取Connection对象 conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", ""); //4.获取执行sql的对象 Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql);//影响的行数 //6.注意表的创建其count是为0的 System.out.println(count); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { //7. 释放资源 //避免空指针异常 if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } 

运行:

查看一下表:

编程小号
上一篇 2024-12-10 09:42
下一篇 2024-12-10 09:36

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://sigusoft.com/datagrip/3199.html