小白学习java连通、操作mysql数据库小记(更新中)

java连通、操作mysql数据库


  在最近这段时间,也是对java与数据库之间的联系进行了一些尝试。在前期,为了方便,都将以idea的开发环境与数据库进行联系。因为后期有进行java web与数据库联系的尝试,所以后期也会提到如何用eclipse进行类似操作(因为非羽是使用的mysql的8.0以上版本,所以在这里记录的信息可能对于8.0以上的版本更为有效)。这里前面的代码大部分只是起到演示作用配合解释,最后的“最新代码”才可以真正有效运行。
  软件配置:IntelliJ IDEA Community Edition 2020.1.2 x64
       MySQL Workbench 8.0 CE
       eclipse2019-12

java连通数据库

准备工作:

  首先,我们需要下载一个驱动包,这个驱动包的接口(功能大概类似于处在java与mysql之间的一个执行指令的机器人)。这个接口我们可以在下面这个链接中下载:
  java驱动下载
  下载好后记得将其储存在一个方便记忆或者查找的地方,有助于我们等会的利用。
  打开idea,新创一个project。
  下面开始分步演示插入这个驱动包。
step 1:点击“file”中的“Project Structure”(或者直接在Ctrl+Alt+Shift+S)
在这里插入图片描述
step 2:找到“libraries”,点击“+”号,再点击“java”。
在这里插入图片描述
step  3:找到驱动包,点击“ok”,最后点击一个“apply”或者“ok”(两者作用差不多)。
在这里插入图片描述
step  4:在选择project后再点击ok

在这里插入图片描述
step  5:最后点击一个“apply”或者“ok”(两者作用差不多)。
在这里插入图片描述
  在完成上述的操作后,我们可以看到在我们的project栏目里有这样一个内容。就代表你已经成功插入了驱动包。
在这里插入图片描述

eclipse中添加包:

  这里我就假定你们已经自己创建好一个project了,这个过程还是比较简单的。然后直接开始引入数据包。
Step 1:
  右击你想要加包的project名,在这里,我的叫"try"。点击最下面的"properties"(这个地方我一点截图它就不显示那个目录了,就没有截图,但相信各位应该可以自己搞定)。
Step 2:
  可以直接看到有一个叫java build path的东西。点击之后出现下面这个界面,当然,你的没有那个mysql的包。
在这里插入图片描述
Step 3:
  点击“classpath”,你可以看到右边的那些键由灰转黑。
在这里插入图片描述
Step 4:
  点击“add esternal jars…”(加入外面的包)。可以出现一个找包的界面,找到你想要的那个包。
在这里插入图片描述
Step 5:
  点击“apply and close”,搞定。
在这里插入图片描述

一个eclipse报错的改法

  如果你的java程序出现了没有主函数这个错误,可能是你没有保存,你可以点击保存试试。
  如果你比较懒,或者已经用熟了那种不用点击可以自己保存支行,可以点击上面的“window”栏,点击“preferences”看到如下界面。点击“run/debug”点击“launching”得到如下界面:
在这里插入图片描述
  看到第一个选项的项目“save required…”点击“always”再点击“apply and close”。搞定。

连接数据库:

  首先,我们需要导入一个java关于sql语言的包(这个是jdk里自带的)。

	import java.sql.*;

  然后初始化一个驱动名,同时定义好一个url字符串(这个是用来作为一个连接数据库时的定向功能,相当于给了驱动一个目标)。

		//驱动程序名
        String driver = "com.mysql.cj.jdbc.Driver";
        //URL指向要访问的数据库名mydata
        String url = "jdbc:mysql://127.0.0.1:3306/s_t?characterEcoding=ut" +
                "f-8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";

  再对上面的url做一个小小的解释。仅仅出于使用的角度考虑的话,首尾两部分是不需要管的,只有中间一部分我们需要了解一下。其中,先看到127.0.0.1:3306。这个东西我第一眼看到的时候感觉十分熟悉,嗯,如果不记得了我可以帮你们翻出来,是在这里。
在这里插入图片描述
  可以看到的是这个是数据用到的端口。如果有和我的不一样的,可以根据这个自己改一下。然后我们看到的是s_t,这个东西其实是你想要连接的schema(模式)的名字,而不是上面那个hello(这其实是一个连接)。
  接着我们来看一下后面的连接过程:

		//MySQL配置时的用户名
        String user = "root";
        //MySQL配置时的密码
        String password = "123456";
        Connection conn = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(driver);
            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(url,user,password);
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }

  我们可以看到的是它先给了一个用户名和密码,至于这个是什么东西,如果有些人忘记了,可以看看这个。其实就是登录数据库进行操作时的一个帐号而已,关于这个帐号的分配与剥夺将会在第二个部分中讲到。
在这里插入图片描述
  下面是命名了一个连接,我们可以通过这个连接来进行操作,而关于这个连接的初始化,我们可以在注册了驱动后对其进行初始化,conn = DriverManager.getConnection(url,user,password);,其中url对应的是我们开始讲过的那个目标导向,是告诉驱动去哪打开这个schema的。在进行了这些操作后,对错误进行抛出就可以执行了。

java操作数据库

对数据的操作

对数据进行检索:

  为什么把查找放在第一个呢?因为,放在第一个的话我们可以直接先试验一下我们的数据库是否是真的连上了,而且即使把其它的功能放在前面,不会查找的话我们也不知道那些操作的结果。
  好的,我们先来看看结果,这是我针对一个学生信息数据库的检索:
在这里插入图片描述
  先注册一个statement(这是一个执行的接口)。

		Statement stmt = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(driver);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(url,user,password);

            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();

            //执行查询
            String sql;
            sql = "SELECT sno, sname FROM student";
            ResultSet rs = stmt.executeQuery(sql);

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                String Name = rs.getString("sname");
                String Url = rs.getString("sno");

                // 输出数据
                System.out.print(", 学生姓名: " + Name);
                System.out.print(", 学生学号: " + Url);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }

  其中,sql中是我们要执行的操作。这里的语义是从我student数据表里读出所有的sno(学号)和对应的snam(姓名)数据。rs是用来接受所收集到的结果。它会与你所查询的结果结构一制,所以我们可以在后面直接输出,当全部都展示完毕时会结束这个循环。

数据删除:

  老规矩,我们先来看看结果,这是我针对上面那个学生信息数据库删除部分信息后的检索:
在这里插入图片描述
  可以看到,20182316这个数据已经没有了,而中间那个输出的1则是表示这个操作成功执行了。下面我们来看一看代码:

		try{
            // 注册 JDBC 驱动
            Class.forName(driver);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(url,user,password);

            // 执行删除
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String insert="DELETE FROM student WHERE sno='20182316' ";
            int  result = stmt.executeUpdate(insert);                    //执行INSERT语句,返回插入的记录数
            System.out.println( result );

            //执行查询
            String sql;
            sql = "SELECT sno, sname FROM student";
            ResultSet rs = stmt.executeQuery(sql);



            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                String Name = rs.getString("sname");
                String Url = rs.getString("sno");

                // 输出数据
                System.out.print(", 学生姓名: " + Name);
                System.out.print(", 学生学号: " + Url);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }

  其中,insert(本来是做过一个录入的实验,后面懒得改了)中是我们要执行的操作。这里执行的说语义是我们从students表中删除一个学号为20182316的学生数据。相信一些有基础的学友已经可以自己去摸索剩下的一些对于数据的操作了。其中,我们有一点要注意的是区分查找与增(删、改)的操作不同。查是stmt.executeQuery(sql),其它的是executeQuery(sql)

因为非羽也是一名初学者,所以可能在实现方面也存在许多不完善的地方,欢迎各位学友斧正。

最新代码:

import java.sql.*;
public class try1{
    public static void main(String[] args) {
        //驱动程序名
        String driver = "com.mysql.cj.jdbc.Driver";
        //URL指向要访问的数据库名mydata
        String url = "jdbc:mysql://127.0.0.1:3306/s_t?characterEcoding=ut" +
                "f-8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";
        //MySQL配置时的用户名
        String user = "root";
        //MySQL配置时的密码
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(driver);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(url,user,password);

            // 执行删除
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String insert="DELETE FROM student WHERE sno='20182316' ";
            int  result = stmt.executeUpdate(insert);                    //执行INSERT语句,返回插入的记录数
            System.out.println( result );

            //执行查询
            String sql;
            sql = "SELECT sno, sname FROM student";
            ResultSet rs = stmt.executeQuery(sql);



            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                String Name = rs.getString("sname");
                String Url = rs.getString("sno");

                // 输出数据
                System.out.print(", 学生姓名: " + Name);
                System.out.print(", 学生学号: " + Url);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值