首页 > 数据库 >JDBC之Mysql

JDBC之Mysql

时间:2023-11-14 22:01:11浏览次数:47  
标签:JDBC java 数据库 Mysql 6.4 版本 mysql

一、JDBC是什么?

Java DataBase Connectivity(Java语言连接数据库)

二、JDBC的本质是什么?

JDBC是SUN公司制定的一套接口(interface)。

接口都有调用者和实现者。

面向接口调用、面向接口写实现类,这都属于面向接口编程。

三、为什么要面向接口编程?

解耦合:降低程序的耦合度,提高程序的扩展力。

多态机制就是非常典型的:面向抽象编程。(不要面向具体编程)

(这里需要画图带大家理解。。。)

四、为什么SUN制定一套JDBC接口呢?

因为每一个数据库产品都有自己独特的实现原理

五、JDBC编程六步(需要背会)

1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)

2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。

3.获取数据库操作对象(专门执行sql语句的对象)

4.执行SQL语句(DQL,DML…)

5.处理查询结果集 (只有当第四步执行的是select语句的时候,才有本步)

6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)

六、IDEA编写JDBC连接MySQL

6.1 mysql-connector-java的不同版本对比

MySQL Connector / J 5.1 5.1版本支持java5及其以上的版本,支持5.6、5.7、8.0版本的mysql数据库,支持3.0、4.0、4.1、4.2版本的jdbc。在5.1中,Driver的实现类的全路径名是com.mysql.jdbc.Driver。

MySQL Connector / J 8.0 8.0版本支持java8及其以上的版本,支持5.6、5.7、8.0版本的mysql数据库,支持4.2版本的jdbc。在8.0中,Driver的实现类的全路径名是com.mysql.cj.jdbc.Driver。

下图是官网上mysql-connector-java的版本对应的mysql版本和jdk的版本。

 

 

6.2 下载驱动jar包 mysql-connector-java.

要使用mysql连接器,就要先下载它。如果是一般的项目,那我们需要下载jar包,然后放到项目的lib目录下。如果使用maven构建的项目,我们可以通过maven直接安装。不同的下载方式有不同的操作,常见的有直接官网下载和maven下载(下周讲解maven)。 下载jar包最直接的方式是从官网下载,官网地址是:https://dev.mysql.com/downloads/connector/j/。直接点链接进入mysql官网,选择所需的版本和操作系统(要下载jar包就要选:Platform Independent),然后点击download按钮就可以下载了。为java提供的连接器是Connector / J,也就是mysql-connector-java,它分为5.1版本和8.0版本。Connector / J实现了JDBC,为使用java开发的程序提供连接,方便java程序操作数据库。

6.3、从maven安装 使用maven安装mysql-connector-java就简单很多,直接打开maven的中央仓库地址,输入mysql-connector-java就可以找到不同版本的依赖。地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java

6.4 JDBC连接mysql 程序编写

6.4.1 第一种注册驱动方式
DriverManager.registerDriver(Driver driver)

 

6.4.2第二种注册驱动方式

Class.forName("xxx.xx.xx.Driver")
       6.4.3 将连接数据库的所有信息配置到配置文件中
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.209.100:3306/bigdata27?useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=123456

 

     6.4.4 处理查询结果集  
     6.4.5  解决sql注入问题

  将原本的先拼接再编译,使用预编译数据库操作对象后变成了先编译再拼接赋值

 6.4.6 工具类封装

package com.shujia.utils;

import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.Properties;


public class MysqlTool {

    private static Connection conn;
    private MysqlTool(){}

    public static Connection getConnection(){
        try {
            //读取配置文件,获取driver,url,username,password
            //创建配置文件对象
            Properties prop = new Properties();
            //加载配置文件
            prop.load(new BufferedReader(new FileReader("mysql-jdbc/src/main/resources/mysqlinfo.properties")));
            //根据key获取value值
            String driver = prop.getProperty("driver");
            String url = prop.getProperty("url");
            String username = prop.getProperty("username");
            String password = prop.getProperty("password");

            //1、加载驱动
            Class.forName(driver);

            //2、创建与数据库之间的连接
            conn = DriverManager.getConnection(url, username, password);
        }catch (Exception e){
            e.printStackTrace();
        }

        return conn;
    }

    public static void printResultSet(ResultSet resultSet){
        try {
            while (resultSet.next()) {
                int columnCount = resultSet.getMetaData().getColumnCount();
                StringBuilder sb = new StringBuilder();
                for(int i=1;i<=columnCount;i++){
                    sb.append(resultSet.getString(i)).append("\t");
                }
                System.out.println(sb);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
 
6.4.7 JDBC实现模糊查询
 select * from 表名(tablename) where 字段名(xxx) like '%关键词(xxx)%'

 

 

 

JDBC事务机制: 1.JDBC中的事务自动提交的,什么是自动提交? 只要执行任意一条 DML语句,则自动提交一次。这是JDBC默认的事务行为。

但是在实际的业务中,通常都是N条DML语句共同联合才能完成,必须 保证这些DML语句在同一个事务中同时成功或者同时失败

解决方案:三行重要的代码 conn.setAutoCommit(false);//手动提交事务

conn.commit();//提交事务

conn.rooback;当发生异常时或者程序错误时,进行回滚。

 

6.5 悲观锁和乐观锁的概念

事务1–>读取到版本号1.1 事务2—>读取到版本号1.1

其中事务1先修改了,修改之后看了版本号是1.1 ,于是提交修改的数据,将版本号修改为1.2 其中事务2后修改的,修改之后准备提交的时候,发现版本号是1.2 ,和它最初读的版本号不一致。回滚。

悲观锁:事务必须排队执行。数据锁住了,不允许并发。 (行级锁: select后面添加for update ) 乐观锁:支持并发,事务也不需要排队,只不过需要一个版本号。

 

标签:JDBC,java,数据库,Mysql,6.4,版本,mysql
From: https://www.cnblogs.com/SIKE231310/p/17832689.html

相关文章

  • MySQL 导出表结构(含列名、数据类型、字段备注注释)导出成Excel
    SELECTCOLUMN_NAME列名,COLUMN_COMMENT名称,column_key主键,--COLUMN_TYPE数据类型,DATA_TYPE字段类型,CHARACTER_MAXIMUM_LENGTH长度,IS_NULLABLE是否必填,--COLUMN_DEFAULT描述FROMINFORMATION_SCHEMA.COLUMNSwhere--developer......
  • Mysql中如何解决You can't specify target table '表名' for update in FROM clause报
    Mysql中如何解决Youcan'tspecifytargettable'表名'forupdateinFROMclause报错为什么会出现这个错误呢?这是因为在MySQL使用时,在同一条SQL语句中,不允许先SELECT出同一个表的某些值,再对该表进行UPDATE操作。解决方式#WriteyourMySQLquerystatementbelowdeletef......
  • MYSQL 事务的底层原理
    事务的底层原理在事务的实现机制上,MySQL采用的是WAL:Write-aheadlogging,预写式日志,机制来实现的。在使用WAL的系统中,所有的修改都先被写入到日志中,然后再被应用到系统中。通常包含redo和undo两部分信息。为什么需要使用WAL,然后包含redo和undo信息呢?举个例子,如果一......
  • jdbc批量插入
    1.开启JDBCrewriteBatchedStatements=true2.准备数据PreparedStatementpreparedStatement=connection.prepareStatement(InsertSql);3.插入数据并添加到批次preparedStatement.setObject(columnIndex,resultSet.getObject(columnIndex));preparedStatement.addBatc......
  • Windows下如何快速移动MySQL/MariaDB数据库文件
    近期遇到一个要迁移数据库的问题,用户说不希望数据库文件存在于C盘。查了一下资料,这里做个总结。这个方法适用于MySQL和MariaDB。 步骤如下:1、停止数据库服务2、将数据库移动到需要迁移的路径3、修改安装路径data目录下的my.ini文件4、将 datadir=xxx改成需要迁移的路径5......
  • mysql5.7安装插件udp(lib_mysqludf_sys)
    项目应用中需要用mysql执行一下命令行.几经搜索可以安装lib_mysqludf_sys插件可以实现本地window环境安装(mysql8.0,64位,使用lib_mysqludf_sys.dll文件)--查看环境中插件目录showvariableslike'%plugin%';--plugin_dir C:/mysql/lib/plugin/--将lib_mysqludf_sys......
  • mysql创建表
    1.项目数据库管理方案:①.手写SQL②.PowerDesigner、Mysqlworkbench=>设计工具③.navicat建表2.元数据/元信息表:①.点击量、收藏数设计:a.固定的值放到主表.b.一个字段表示多个不固定的元素值.②表设计:a.元素名称(meta_name):可能......
  • MySQL基本数据类型简记
    1、在MySQL整型数值范围TypeStorage(Bytes)MinimumValueSignedMinimumValueUnsignedMaximumValueSignedMaximumValueUnsignedTINYINT1-1280127255SMALLINT2-3276803276765535MEDIUMINT3-83886080838860716777215INT4-2147483648021474836......
  • MySQL - 一条SQL查询语句是如何执行的
    MySQL的逻辑架构图 详细解答https://www.processon.com/mindmap/655307fe6a2ff722ead8d9e4 ......
  • MySQL - MySQL 占用内存涨得特别快?可能原因?解决方案
    https://www.processon.com/mindmap/655307fe6a2ff722ead8d9e4 ......