MySQL -- JDBC

news/2024/7/24 8:12:04 标签: mysql, java, 数据库
1、JDBC是什么:

是SUN公司制定的一套接口(interface)。接口都有调用者和实现者。面向接口调用、面向接口写实现类,这都属于面向接口编程。

2、在使用JDBC的六个步骤:
1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)

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

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

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

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

6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
3、JDBC的模糊查询:
java">import com.shujia.wyh.utils.MySqlTool;

import java.sql.PreparedStatement;
import java.sql.ResultSet;

/*
    模糊查询
 */
public class JDBCDemo7 {
    public static void main(String[] args) throws Exception {
        String sql = "select ename from emp where ename like ?";
        PreparedStatement statement = MySqlTool.getStatement(sql);
        statement.setString(1, "%A%");
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()){
            String name = resultSet.getString(1);
            System.out.println(name);
        }
    }
}

在使用maven连接mysql的时候,需要在poml文件中添加依赖:

java"><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
 4、JDBC连接MySQL
java">

/*
    1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)
    2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
    3.获取数据库操作对象(专门执行sql语句的对象)
    4.执行SQL语句(DQL,DML…)
    5.处理查询结果集 (只有当第四步执行的是select语句的时候,才有本步)
    6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
 */

import com.mysql.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JDBCDemo1 {
    public static void main(String[] args) throws Exception{
        //第一种连接方式

        // 1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)
        // jdk帮助文档中提供了一个类让我们去注册驱动 DriverManager
        //但是通过观察后发现,DriverManager类中并没有构造方法,就意味着无法创建对象
        //但是没关系,我们又观察发现,该类中的方法都是静态的,就意味着可以通过DriverManager类直接调用
        //静态方法注册驱动:static void registerDriver(Driver driver) 注册与给定的驱动程序 DriverManager 。
        //通过观察后又发现,registerDriver方法中需要传入一个实现了java.sql.Driver接口的实现类
        //而恰好我们引入的mysql驱动包中就有一个类实现了java.sql.Driver接口
        //mysql驱动包中正好有一个类Driver实现了java.sql.Driver的接口
        DriverManager.registerDriver(new Driver());


        //2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
        //static Connection getConnection(String url, String user, String password)
        //尝试建立与给定数据库URL的连接。
        /**
         * url: 统一资源定位符
         *      http/https: 都是从网络中请求资源
         *      jdbc:mysql: 是java连接mysql数据库的url前缀
         *      请求连接mysql数据库的ip地址:192.168.254.100
         *      端口号:3306 告诉连接驱动我们连接的是mysql服务
         *      告诉你要操作的数据库名:bigdata25
         *      useUnicode=True&characterEncoding=utf8
         *
         * user: 登录mysql数据库的用户名 root
         *
         * password: 登录mysql数据库的密码 123456
         */
        //mysql5.7之后,不建议用户直接与mysql服务连接,中间会有一个SSL令牌校验
        String url = "jdbc:mysql://192.168.254.100:3306/bigdata25?useUnicode=True&characterEncoding=utf8&useSSL=false";
        String user = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, user, password);


        System.out.println("=============数据库连接成功:"+conn);



        //3.获取数据库操作对象(专门执行sql语句的对象)
        Statement statement = conn.createStatement();

        //4.执行SQL语句(DQL,DML…)
        /**
         *  在JDBC中 它将查询单独封装了一个方法,而其他的增删改单独一个方法
         *
         *  用于查询的方法
         *  ResultSet executeQuery(String sql) 执行给定的SQL语句,该语句返回单个 ResultSet对象。
         *
         *  用户增删改的方法
         * int executeUpdate(String sql) 执行给定的SQL语句,这可能是 INSERT , UPDATE ,或 DELETE语句,
         * 或者不返回任何内容,如SQL DDL语句的SQL语句。
         */
        //增加
//        String sql = "insert into student values('110','洪文霁','男',18,'95033')";
//        int i = statement.executeUpdate(sql);
//        if(i==1){
//            System.out.println("数据添加成功!。。。");
//        }else {
//            System.out.println("数据添加失败!!");
//        }

        //删除
//        String sql2 = "delete from student where sno='110'";
//        int i1 = statement.executeUpdate(sql2);
//        if(i1==1){
//            System.out.println("数据删除成功!。。。");
//        }else {
//            System.out.println("数据删除失败!!");
//        }

        //修改
        String sql3 = "update student set sage=19 where sno='110'";
        int i = statement.executeUpdate(sql3);
        if(i==1){
            System.out.println("数据修改成功!。。。");
        }else {
            System.out.println("数据修改失败!!");
        }

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

第二种连接的方式:

java">

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

/*
    回顾一下,使用java操作数据库的6步
    1、注册驱动 我们上午学习的注册驱动是第一种方式借助于DriverManager类
    2、建立连接
    3、获取操作数据库的对象
    4、执行sql
    5、如果第四步是查询操作,分析查询的结果集
    6、释放资源,关闭连接
 */
public class JDBCDemo2 {
    public static void main(String[] args) throws Exception {
        /**
         *  上午呢,我们说到驱动包的时候,原本是java自己提供的一系列接口,然后不同的数据库厂商去实现这些接口
         *  最终提供了一个驱动包给到开发者,然后开发者拿到这个驱动包使用里面的类连接或操作数据库
         *
         *  上午的注册驱动方式,是直接实例化mysql驱动包中的Driver类,但是我们今后使用java不一定只是连接mysql,还有可能操作redis等其他的数据库
         *  实际上我们最终是根据驱动包中的实现类路径来找到这个实现类的
         *  能否使用传路径的方式,注册驱动呢?
         *
         *  第二种注册驱动的方式:驱动包中的类都是class文件,我们如果能够直接定位到实现类也可以
         *  使用反射的方式,定位到实现类,将实现类加载到内存
         *  Class.forName("com.mysql.jdbc.Driver")
         */
        Class.forName("com.mysql.jdbc.Driver");


        //2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
        //mysql5.7之后,不建议用户直接与mysql服务连接,中间会有一个SSL令牌校验
        String url = "jdbc:mysql://192.168.254.100:3306/bigdata25?useUnicode=True&characterEncoding=utf8&useSSL=false";
        String user = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, user, password);


        System.out.println("=============数据库连接成功:"+conn);



        //3.获取数据库操作对象(专门执行sql语句的对象)
        Statement statement = conn.createStatement();

        //4.执行SQL语句(DQL,DML…)
        //修改
        String sql3 = "update student set sage=20 where sno='110'";
        int i = statement.executeUpdate(sql3);
        if(i==1){
            System.out.println("数据修改成功!。。。");
        }else {
            System.out.println("数据修改失败!!");
        }

        //6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
        conn.close();
    }
}
java">import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCDemo08 {
    public static void main(String[] args) throws Exception{
        //建立连接:需要指定用户的url地址和用户名和密码
        Connection conn = DriverManager.getConnection("jdbc:mysql://master/trip","root","123456");
        //获取mysql的操作对象
        Statement statement = conn.createStatement();
        String sql = "select * from activity  ";
        //执行sql语句:
        ResultSet resultSet = statement.executeQuery(sql);
        //获取里面的数据,并打印在控制台中,下表是从1开始的。
        while(resultSet.next()){
            int id = resultSet.getInt(1);
            String cid = resultSet.getString(2);
            String name = resultSet.getString(3);
            System.out.println(id+  "\t" + cid + name);
        }
conn.close();

    }
}
5、悲观锁和乐观锁的概念

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

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

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

悲观锁:事务必须排队执行。数据锁住了,不允许并发。 (行级锁: select后面添加for update )

乐观锁:支持并发,事务也不需要排队,只不过需要一个版本号。


http://www.niftyadmin.cn/n/5201536.html

相关文章

本机idea连接虚拟机中的Hbase

相关环境&#xff1a; 虚拟机&#xff1a;Centos7 hadoop版本:3.1.3 hbase版本:2.4.11 zookeeper版本:3.5.7 Java IDE:IDEA JDK&#xff1a;8 步骤 步骤一&#xff1a;在idea创建一个maven项目 步骤二&#xff1a;在虚拟机里找到core-site.x…

开发基于 ChatGPT 分析热点事件并生成文章的网站应用【热点问天】把百度等热点用chatGPT来对热点事件分析海量发文章 开发步骤 多种方式获取利润

这样做的优点&#xff1a; 1.不用每个人都问chatGPT同样的问题。 2.已经生成的&#xff0c;反应快速。 3.内容分析的客观&#xff0c;真实&#xff0c;基于数据&#xff0c;无法造假。 4.无其它目的这种基于 ChatGPT 分析热点事件并生成文章的网站&#xff0c;可以通过多种方式…

redis五大常见数据结构的操作命令(string, hash, list, set和zset)

string redis的string&#xff0c;直接按照二进制&#xff08;不做任何的转换&#xff0c;存的是什么取出来的依旧是什么&#xff09;的方式存储。所以string不仅仅可以存储文本数据&#xff0c;还可以存储整数&#xff0c;JSON&#xff0c;xml甚至音视频。但是string的大小最…

「ResNet-18」70 个犬种的图片分类

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

基于单片机预费电表控制系统(proteus仿真+源程序)

一、系统方案 1、本设计采用这51单片机作为主控器。 2、采集电量值送到液晶1602显示。 3、按键设置预设值&#xff0c;实际使用电量超过设置&#xff0c;蜂鸣器报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void LCD_init(void) { …

el-popover和el-tooltip样式修改(普通的组件样式修改方法,对popover是不生效的)

第一步:‘popper-class’=‘popperClass’ //添加类名 <el-table-column label="审核状态" align="center"><template slot-scope="scope"><el-popoverpopper-class="addformPanel"placement="top"width=&…

mysql基于GTID主从搭建

#************************master 添加配置(XXX.XXX.XXX.204) ************************ #开启二进制日志 bin-logmaster-bin #开启gtid模块 gtid-modeon #开启强制gtid一致性&#xff0c; enforce-gtid-consistencyon #指定日志的记录模式为row(行记录)&#xff0c;确保数据的…

OpenGL_Learn14(光照贴图)

1. 漫反射贴图 在光照场景中&#xff0c;它通常叫做一个漫反射贴图(Diffuse Map)&#xff08;3D艺术家通常都这么叫它&#xff09;&#xff0c;它是一个表现了物体所有的漫反射颜色的纹理图像。 我们会将纹理储存为Material结构体中的一个sampler2D 。我们将之前定义的vec3漫反…