【Java Web】jdbc —— 程序在DriverManager.getConnection(url,user,password)处卡住不走

程序在DriverManager.getConnection(url,user,password)处卡住不走


文章目录

      • 1.问题引入
      • 2.问题解决


1.问题引入

最近写了一个简单的Java项目,其中只有一个测试主类 test.java,用来测试能不能连接上数据库,代码如下:

package com.zed.test;

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

public class test {
    public static void main(String[] args) {
        try{
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //定义链接(注意设置编码)
            String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
            //定义用户
            String user = "root";
            //定义密码
            String password = "123456";
            //获取连接
            System.out.println("开始连接");
            Connection connection = DriverManager.getConnection(url,user,password);
            System.out.println("连接成功:"+connection);

            //执行操作
            String sql = "insert into student(name,score,birthday) values('张三',89,'1999-3-5')";
            Statement statement = connection.createStatement();
            int result = statement.executeUpdate(sql);
            System.out.println(result);

        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.getErrorCode();
        }
    }
}

所需要操作的表是 student,如下:
【Java Web】jdbc —— 程序在DriverManager.getConnection(url,user,password)处卡住不走_第1张图片

代码的逻辑很简单:

  1. 加载驱动。
  2. 获取连接。
  3. sql语句测试。

就是用来测试能不能连接上数据库,然后输出执行sql语句后的结果。
按照正常的逻辑,程序应该输出以下结果(红框部分因人而异):
【Java Web】jdbc —— 程序在DriverManager.getConnection(url,user,password)处卡住不走_第2张图片
而实际得到的结果如下:
【Java Web】jdbc —— 程序在DriverManager.getConnection(url,user,password)处卡住不走_第3张图片
程序并没有报错,但是却卡在了Connection connection = DriverManager.getConnection(url,user,password);这个地方。后面的日志没有输出,后台也没有报错信息,程序界面也直接卡在那里了。
当然,我写的 url 格式没有任何问题(查找了多篇博客对照),user以及password也并没有错。




2.问题解决

我在网上找了半天都没看到一个和我存在同样问题的人,后来好不容易在思否上找到了相关贴子,但那下面也仍然没有给出解决办法。后来我请教一个同学,才发现了问题所在。特此记录踩坑历程。
首先我们看 url 的格式:

 String url = "jdbc:mysql://localhost:3306/test";
  1. 上面的 jdbc 和 mysql 表示连接协议,组合起来(jdbc:mysql)可理解为“用 jdbc 连接 mysql 类型数据库”;
  2. localhost 表示数据库所在的 ip 地址,由于我们的数据库就在本机电脑上(即127.0.0.1),因此可以用 loccalhost来表示;
  3. 3306 表示本地数据库的端口号,这个可以在你装的 mysql 中查看(初始情况下都是3306);
  4. test 表示你建立的数据库。

上面4点中的前3点都是“写死的”,如果在连接数据库的过程中出错了,基本上都是错在第4点。当然,我也确实是错在第4点了。
由于我在使用 HeidiSQL 操作MySQL数据库时,打开的界面是这样的:
【Java Web】jdbc —— 程序在DriverManager.getConnection(url,user,password)处卡住不走_第4张图片
因此我下意识地认为,我建立的数据库名称就是 test 。但实际上,你建立的数据库名称应该是 demodb,如下所示:
【Java Web】jdbc —— 程序在DriverManager.getConnection(url,user,password)处卡住不走_第5张图片
所以,这才导致了上面在连接数据库时出现的一系列情况。
当把连接数据库的 url 改为:

String url = "jdbc:mysql://localhost:3306/demodb?useUnicode=true&characterEncoding=UTF-8";

后,程序就能正常的连接数据库啦。


说实话这是一个很低级的错,踩坑一次,绝不再犯,特此记录~~~




你可能感兴趣的:(Java,Web,学习之路)