当前位置:   article > 正文

IDEA中JDBC连接MYSQL数据库步骤超详细总结_mysql db连接取不到result

mysql db连接取不到result


概述

JDBC是Java连接数据库的一种接口,它由各个数据库厂商为开发者提供的接口,要使用它需要到相应厂商下载对应的jar包,maven导包的操作,这篇文章为大家总结了jdbc的mysql数据库的连接方式,有任何问题可私信作者或在评论区评论,有时间会更新。


数据库的安装与配置可点击链接进行配置
MYSQL数据库的安装与配置

一、Jar包的下载与引入

(一)下载包

1.jar包下载的注意事项

这一步是最开始的一步,也是最基础的一部,jar包的下载需要对应相应的mysql版本,就是说,你的mysql是哪个版本,就下载哪个版本的jar包,不然会报错!!

2.jar包的下载地址

JDBC 下载地址

3.下载步骤

若mysql是最新版本,在General Availability (GA)Releases,在下拉菜单选择Platform Independent,即“独立于平台”
请添加图片描述
点击No thanks,just start my download.不登录下载
请添加图片描述
选择如下选项,点击Download开始下载
点击Download
若mysql不是最新版本的,选择Archives
jdbc安装
选择对应版本号,并选择Platform Independent
请添加图片描述
点击No thanks,just start my download.
在这里插入图片描述

(二)一般导包

解压压缩包,在压缩包中找到该jar包,ctrl+c复制这个jar包
请添加图片描述
右键src,在src中创建一个包,取名lib,一般需要用的包我们都把它放进该包中,然后ctrl+v粘贴进IDEA,点击ok即可
在这里插入图片描述
选中该jar,右键,选择Add as Library…
在这里插入图片描述
点击下拉菜单,选择Module Library,点击ok
这一步是将该jar作为该项目的包
在这里插入图片描述
完成后如下图所示就是成功导入了
请添加图片描述

(三)Maven导包

首先我们需要进行maven配置,点击链接查看maven配置教程【哈哈哈,本人目前正在写这篇文章,大家可以去百度查看教程哦!!!】

1.创建Maven项目

(1) 配置完成后我们需要创建maven项目,项目创建教程如下,打开idea,点击"new project"新建项目
在这里插入图片描述
(2) 点击java,maven,当然,记得先选好项目路径和填好项目名称哦,然后点击“create”
在这里插入图片描述

2.导入坐标

打开Pom.xml文件,如图
在这里插入图片描述

第一次导入坐标有时候没有提示,如果项目中没有<dependencies>标签时直接复制粘贴到如图位置,并点击更新,等待一会儿即可
注意:你下载的是哪个版本的mysql下面的版本号就要写哪个版本,如果是较新版本的maven仓库可能还没有更新,所以不建议弄最新版的,不稳定也麻烦

<dependencies>
		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
如果项目已经有<dependencies>标签,直接复制到<dependencies>标签内,再点击刷新,等待一会儿即可

		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

二、JDBC连接MYSQL

(一)基础知识介绍

这是基础知识的讲解,不是操作,当然你也可以按照基础知识来操作

1.抛出异常

有两种抛出方式
第一种为直接抛出,在类或方法后面都可以加入该异常语句,‘throws Exception’,这种没有什么异常的话可以直接执行,具体使用方法如下

//使用throws Exception
//如:
public static void main(String[] args) throws Exception
  • 1
  • 2
  • 3

第二种可以处理异常,有异常会提示异常,并为开发者提供异常处理机制

//2.可以使用try{}catch{}
//如
try {
	/*这里放置执行的代码*/
    }catch (){
    /*这里放释放的代码*/
		}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.加载驱动

加载驱动的基本语法为

Class.forName("");
  • 1

mysql5.0的版本和8.0的版本加载驱动的语法改变了
5.0后的版本语法为

Class.forName("com.mysql.jdbc.Driver");
  • 1

8.0版本后的语法为

Class.forName("com.mysql.cj.jdbc.Driver");
  • 1

注意:mysql 5.0版本后可以忽略该语句,就是说可以不用添加该语句,也能执行,可以不添加。

3.创建mysql的连接

连接的基本语法,这里是基本语法后面会详细说明
要记住,链接mysql或其他数据库肯定要有个url、user、password,它们都是String类型的,其中url是链接,user是用户名,一般为root,password为密码,这三个变量名大家可以任意设置,后面使用getConnection,里包含即可

String url="";
/*连接数据库的账号,user账号的格式,如未经特殊修改可以为root,如果修改,改成哪个即为哪个*/
String user="root";
/*连接数据库的密码,密码的话设置啥密码就是啥咯*/
String password="123456";
//执行sql对象
Connection conn = DriverManager.getConnection(url, user, password);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

url格式说明,连接本机的IP地址与端口号可以不写,后面的需求不需要可不用写

jdbc:mysql[协议名称]://localhost:3306[主机:端口]/test[数据库名]?useSSL=[是否进行SSL连接]&useUnicode=[是否使用字符集]&characterEncoding=[使用指定utf-8编码]&serverTimezone=[设置时区]
  • 1

1)url: 统一资源定位符。
2)jdbc:mysql 是协议名称,JDBC连接方式。
3)localhost:3306 是主机:端口 还可以写作127.0.0.1:3306。
4)test 数据库名。
5)useSSL: MySQL在高版本需,指明是否进行SSL连接,url中加入ssl=true或者false即可 。
6)useUnicode: 是否使用Unicode字符集,如果参数characterEncoding设置为GB2312或GBK,该参数值必须设置为true。
7)characterEncoding: 当useUnicode设置为true,给定编码,常用utf8,默认是:autodetect。
8)serverTimezone: 设置时区 如UTC(统一标准世界时间)或Asia/Shanghai(中国时区)

连接本机的url的最简格式【新手推荐】,其中db1为数据库名

String url="jdbc:mysql:///db1";
  • 1

一般格式为,其中db1为数据库名

url=jdbc:mysql://localhost:3306/db1?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
  • 1

4.创建sql

基本的语法如下所示,sql语法写里面

//基本语法【易报错点,注意检查】
String sql="[sql语法]";
  • 1
  • 2

5.创建操作对象

Statement对象是Java程序与关系型数据库进行交互的重要组件之一。它提供了一些方法来执行SQL语句,查询数据库,并处理结果。

返回值方法功能
booleanexecute(String sql)执行SQL语句并返回一个布尔值,指示是否返回ResultSet对象。如果SQL语句返回的是ResultSet对象,则返回true;否则,返回false
intexecuteUpdate(String sql)执行INSERT(插入)、UPDATE(修改)、DELETE(删除)或其他SQL语句,返回一个整数,表示影响的行数。
ResultSetexecuteQuery(String sql)执行SELECT(查询)语句并返回ResultSet对象
int[]executeBatch()执行一批SQL语句,并返回一个整数数组,表示每个语句影响的行数。调用addBatch()方法将多个SQL语句添加到批处理中,然后调用executeBatch()方法执行批处理
voidaddBatch(String sql)将SQL语句添加到批处理中。
voidclearBatch()清除批处理中的所有语句。
intgetUpdateCount()获取执行SQL语句后影响的行数。
ResultSetgetResultSet()获取执行SELECT语句后返回的ResultSet对象。
voidclose()关闭Statement对象

创建Statement对象一般语法

Statement stmt = conn.createStatement();
  • 1

1、boolean execute(String sql)
执行SQL语句并返回一个布尔值,指示是否返回ResultSet对象。如果SQL语句返回的是ResultSet对象,则返回true;否则,返回false。

Statement stmt = connection.createStatement();
boolean hasResultSet = stmt.execute("SELECT * FROM mytable");
if (hasResultSet) {
    ResultSet rs = stmt.getResultSet();
    // 处理ResultSet
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2、int executeUpdate(String sql)
执行INSERT、UPDATE、DELETE或其他SQL语句,返回一个整数,表示影响的行数。

Statement stmt = connection.createStatement();
int rows = stmt.executeUpdate("UPDATE mytable SET name='John' WHERE id=1");
  • 1
  • 2

3、ResultSet executeQuery(String sql)
执行SELECT语句并返回ResultSet对象。

Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    // 处理ResultSet
}
  • 1
  • 2
  • 3
  • 4
  • 5

4、int[] executeBatch()
执行一批SQL语句,并返回一个整数数组,表示每个语句影响的行数。调用addBatch()方法将多个SQL语句添加到批处理中,然后调用executeBatch()方法执行批处理。

Statement stmt = connection.createStatement();
stmt.addBatch("INSERT INTO mytable(name, age) VALUES('John', 25)");
stmt.addBatch("UPDATE mytable SET age=30 WHERE name='Tom'");
int[] results = stmt.executeBatch();
  • 1
  • 2
  • 3
  • 4

5、List item
void addBatch(String sql)
将SQL语句添加到批处理中。

Statement stmt = connection.createStatement();
stmt.addBatch("INSERT INTO mytable(name, age) VALUES('John', 25)");
stmt.addBatch("UPDATE mytable SET age=30 WHERE name='Tom'");
  • 1
  • 2
  • 3

6、void clearBatch()
清除批处理中的所有语句。

Statement stmt = connection.createStatement();
stmt.addBatch("INSERT INTO mytable(name, age) VALUES('John', 25)");
stmt.clearBatch();
  • 1
  • 2
  • 3

7、int getUpdateCount()
获取执行SQL语句后影响的行数。

Statement stmt = connection.createStatement();
int rows = stmt.executeUpdate("UPDATE mytable SET name='John' WHERE id=1");
if (rows > 0) {
    // 更新成功
}
  • 1
  • 2
  • 3
  • 4
  • 5

8、ResultSet getResultSet()
获取执行SELECT语句后返回的ResultSet对象。

Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    // 处理ResultSet
}
  • 1
  • 2
  • 3
  • 4
  • 5

9、void close()
关闭Statement对象。

Statement stmt = connection.createStatement();
stmt.close();
  • 1
  • 2

6.使用ResultSet接口

ResultSet接口定义了许多方法,以下是一些常用的方法:

方法功能
next()移动结果集的光标到下一行,并返回一个布尔值,表示是否存在下一行。如果返回false,则表示已经到达结果集的末尾。
getInt(int columnIndex)或getInt(String columnLabel)获取当前行中指定列的整数类型的值,可以根据列的索引或者列名来获取。
getString(int columnIndex)或getString(String columnLabel)获取当前行中指定列的字符串类型的值,可以根据列的索引或者列名来获取 。
getObject(int columnIndex)/getObject(String columnLabel)获取当前行中指定列的值,可以根据列的索引或者列名来获取。如果获取的是基本类型,会返回相应的包装类。
beforeFirst()将结果集的光标移动到第一行之前,也就是说,这个方法可以将结果集的光标重新置于第一行之前,从而可以重新遍历结果集。
close()关闭结果集,释放占用的资源。

以下是ResultSet的所有方法及其示例:

1、boolean next()
将结果集光标移动到下一行,并返回一个布尔值,指示是否存在下一行。如果存在下一行,返回true;否则,返回false。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    // 处理当前行
}
  • 1
  • 2
  • 3
  • 4

2、int getInt(int columnIndex)
获取当前行中指定列的整数类型的值,根据列的索引获取。如果列的值为null,则返回0。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    int id = rs.getInt(1); // 获取第一列的值
}
  • 1
  • 2
  • 3
  • 4

3、int getInt(String columnLabel)
获取当前行中指定列的整数类型的值,根据列名获取。如果列的值为null,则返回0。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    int id = rs.getInt("id"); // 获取列名为id的列的值
}
  • 1
  • 2
  • 3
  • 4

4、String getString(int columnIndex)
获取当前行中指定列的字符串类型的值,根据列的索引获取。如果列的值为null,则返回null。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    String name = rs.getString(2); // 获取第二列的值
}
  • 1
  • 2
  • 3
  • 4

5、String getString(String columnLabel)
获取当前行中指定列的字符串类型的值,根据列名获取。如果列的值为null,则返回null。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    String name = rs.getString("name"); // 获取列名为name的列的值
}
  • 1
  • 2
  • 3
  • 4

6、Object getObject(int columnIndex)
获取当前行中指定列的值,根据列的索引获取。如果列的值为null,则返回null。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    Object obj = rs.getObject(3); // 获取第三列的值
}
  • 1
  • 2
  • 3
  • 4

7、Object getObject(String columnLabel)
获取当前行中指定列的值,根据列名获取。如果列的值为null,则返回null。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
    Object obj = rs.getObject("age"); // 获取列名为age的列的值
}
  • 1
  • 2
  • 3
  • 4

8、boolean isAfterLast()
返回一个布尔值,指示结果集光标是否在结果集的最后一行之后。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
if (!rs.isAfterLast()) {
    // 光标还未到达结果集的最后一行之后
}
  • 1
  • 2
  • 3
  • 4

9、boolean isBeforeFirst()
返回一个布尔值,指示结果集光标是否在结果集的第一行之前。

ResultSet rs = statement.executeQuery("SELECT * FROM mytable");
if (rs.isBeforeFirst()) {
    // 光标在结果集的第一行之前
}
  • 1
  • 2
  • 3
  • 4

10、boolean isFirst()
返回一个布尔值,指示结果集光标是否在结果集的第一行。

Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable");
if (rs.next()) {
    boolean isFirst = rs.isFirst();
    // 处理第一行数据
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

7.释放

哪个最后创建,先释放哪个,没有创建对象,可以不释放
一般语句

rs.close();
stmt.close();
conn.close();
  • 1
  • 2
  • 3

1)释放ResultSet

rs.close();
  • 1

2)释放Statement

stmt.close();
  • 1

3)释放Connection

conn.close();
  • 1

(二)链接数据库

注意:解释信息在注释里

try{
		//加载jdbc驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		//添加数据库用户名与密码
        String usere="root";
        String pwd="11111";
        //数据库链接,db1为数据库名
        String url="jdbc:mysql:///db1";
        //创建数据库链接对象Connection
        Connection con = DriverManager.getConnection(url,usere,pwd);
        //创建sql语句,本示例语句为查询user表中的所有信息
        String sql="select *from user";
        /*创建sql语句操作对象
        注意,此时还未加载sql语句,请勿把sql语句放入括号中*/
        Statement stmt = conn.createStatement();
        /*使用executeQuery查询sql语句,
        返回为结果集,故使用ResultSet对象*/
        ResultSet rs=stmt.executeQuery(sql);
        //此时代码还未结束下面会接着
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

我们来看一下user的表结构
我们可以看到我们有id,name等值
在这里插入图片描述
我们接着来写代码

//此时我想要查看该表中的数据值
		while(rs.next()){
			//输出
			//getInt里需要对应数据库中的表头的名
			System.out.println("id="+rs.getInt(1)+"\n"+
			//getString里需要对应数据库中的表头的名
			"name="+rs.getString("username")+"\n"+
			"password="+rs.getString("passd")+"\n"+
			"usersex="+rs.getString("usersex")+"\n"+
			"useraddress="+rs.getString("useraddress")+"\n"+
			)
		}
/*使用完了,我们需要关闭资源不然会一直消耗系统资源
下面释放,当我们没有创建该资源时我们不需要释放,
一般stmt和conn,rs可有可无*/
rs.close();
stmt.close();
conn.close();
//这里我们只提示异常,不处理异常
}catch(Exception e){
	System.out.println("有一个异常!!!");
	System.out.println(e);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

三、自己写的,代码总结

可以做个参考

public static void main(String[] args) {
        //1下载和在工程中配置mysql驱动
        Connection conn=null;
        PreparedStatement stmt=null;
        ResultSet rs=null;

        try {
            //2.加载驱动,mysql5之后可不用该语句
            Class.forName("com.mysql.cj.jdbc.Driver");
            //3.创建连接mysql的url,该语句不用更改;url连接本机可用String url="jdbc:mysql:///db1";
            String url="jdbc:mysql://127.0.0.1:3306/db1?serverTimezone=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";
            //连接数据库的账号
            String user="root";
            //连接数据库的密码
            String password="123456";
            //4.连接数据库java.sql.Connection
            conn= DriverManager.getConnection(url,user,password);
            //5.测试连接是否成功
            //System.out.println(conn);
            //6.创建sql
            String sql="select * from std where id=?";
            //7.创建操作的对象
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1,1);//设置第一个占位符为1 即id=1

            rs=stmt.executeQuery();
            while (rs.next()){
                System.out.println(rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
            }
        }catch (ClassNotFoundException| SQLException e){
            e.printStackTrace();
        }finally {
            if(rs!=null){
                try {
                    rs.close();
                }catch (SQLException throwables){
                    throwables.printStackTrace();
                }
            }
            if (stmt!=null){
                try {
                    stmt.close();
                }catch (SQLException throwables){
                    throwables.printStackTrace();
                }
            }
            if (conn!=null){
                try {
                    conn.close();
                }catch (SQLException throwables){
                    throwables.printStackTrace();
                }
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

四、常见错误总结

1.未导包错误

提示错误信息如下图错误,该错误为未将其所需要的包导入
在这里插入图片描述
解决方法1[一般方法]:
(1)选中错误地方一定要选最开始导致错误的点,比如,类呀,对象呀等等!点击右键,点击’显示上下文操作。
在这里插入图片描述

(2)然后点击导入类
在这里插入图片描述
(3)最后点击导入java.sql包下的即可
在这里插入图片描述
解决方法2[快捷方法]:
(1)选中错误点,点击快捷键Alt+Enter

在这里插入图片描述
(2)最后点击导入java.sql包下的即可
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/790394
推荐阅读
相关标签
  

闽ICP备14008679号