JAVA本地实现与MySQL连接

3 篇文章 0 订阅

JDBC驱动访问MySQL数据库

本人用的是8.0版本的MySQL,因此在连接的时候,需要使用jdbc驱动,首先写一个Connec类:

public class Connect {

    //JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    static final String MY_URL = "jdbc:mysql://localhost:3306/world?useSSL=false&serverTimezone=UTC";
    // 数据库的用户名与密码
    static final String USER = "root";
    static final String PASSWORD = "*******";

    static public Connection link = null;
    static public PreparedStatement statement = null;

    public Connect(){
        try{
            Class.forName(JDBC_DRIVER);
            link = DriverManager.getConnection(MY_URL,USER,PASSWORD);
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }  

其中对URL分析,jdbc是驱动,“mysql://localhost:3306”是数据库地址,world是该地址下具体的Schemas名字,剩下部分的是jdbc标志格式后缀。

涉及的相关函数

在连接MySQL之后,我们当然会想在Java中对数据库进行相关操作,这时候,有些方法就必须了解。

  1. ResultSet executeQuery(String sql);
    执行SQL查询,并返回ResultSet 对象。
  2. int executeUpdate(String sql);
    可执行增,删,改,返回执行受到影响的行数。
  3. boolean execute(String sql);
    可执行任何SQL语句,返回一个布尔值,表示是否返回ResultSet。

这三个方法都来自PreparedStatement接口

executeUpdate() 是 PreparedStatement 接口中的方法
executeUpdate(String sql) 是 PreparedStatement 的父类接口 Statement 中继承过来的方法

executeUpdate() 中执行 SQL 语句需要在创建 PerparedStatement 时通过 Connection 的 prepareStatement(String sql) 方法中写出。

因为 PerparedStatement 中的 SQL 语句数据库需要进行预编译和缓存,所以要在创建 PerparedStatement 对象时给出 SQL 语句。

executeUpdate(String sql) 是 Statement 中的方法,参数中的 SQL 语句直接提交给数据库去执行,不需要预编译。

如果 SQL 语句中有 ? 占位符,那么在设置好占位符中的值后,必须使用 executeUpdate() 执行。

executeUpdate(String sql) 只是提交一个 SQL 语句,且这个语句中不能带有 ? 占位符。

ResultSet结果集
查询数据库时,返回的是一个二维的结果集,我们需要用到ResultSet来遍历结果集,获取每一行的数据。

boolean next() 将光标从当前位置向前移一行。
String  getString(int columnIndex) 以java编程语言中String的形式获取此ResultSet对象的当前行中指定列的值
String  getString(String columnLabel) 以java编程语言中String的形式获取此ResultSet对象的当前行中指定列的值
应用举例:

ResultSet rs = psta.executeQuery();//返回结果集ResultSet
		while(rs.next()){
			int id = rs.getInt(1);// 获取第一个列的值 编号id
			String bookName = rs.getString(2);// 获取第二个列的值 图书名称 bookName
			String author = rs.getString(3);// 获取第三列的值 图书作者 author
			float price = rs.getFloat(4);// 获取第四列的值 图书价格 price
		}

MySQL数据库准备

首先连接的world数据库里创建一个Marks表,并初始化四个同学的成绩:
初始化三个同学的成绩

添加函数

在Connect类中添加查询函数

    //查询函数
    public static ResultSet search(String sql){
        ResultSet resultSet = null;
        try{
            //将对sql预处理之后的结果放入statement
            statement = link.prepareStatement(sql);
            //将预处理后的statement传到MySQL,并返回结果
            resultSet = statement.executeQuery();
        }catch (Exception e){
            e.printStackTrace();
        }
        return resultSet;
    }

在Connect类中添加关闭数据库函数

    //关闭数据库函数
    public static void close(){
        try{
            link.close();
            statement.close();
        }catch (SQLException e){
            e.printStackTrace();
        }
    }

在Connect类中添加插入、删除和更新函数

    //使用update函数进行表的插入、更新和删除
    public static boolean Update(String sql){
        int success=0;
        try{
            statement = link.prepareStatement(sql);
            success = statement.executeUpdate(sql);
        }catch (Exception e){
            e.printStackTrace();
        }
        return success != 0; //如果修改失败,受影响的行数为0
    }
}

Connect类完整代码

package Connect;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Connect {

    //JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    static final String MY_URL = "jdbc:mysql://localhost:3306/world?useSSL=false&serverTimezone=UTC";
    // 数据库的用户名与密码
    static final String USER = "root";
    static final String PASSWORD = "********";

    static public Connection link = null;
    static public PreparedStatement statement = null;

    public Connect(){
        try{
            Class.forName(JDBC_DRIVER);
            link = DriverManager.getConnection(MY_URL,USER,PASSWORD);
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    //关闭数据库函数
    public static void close(){
        try{
            link.close();
            statement.close();
        }catch (SQLException e){
            e.printStackTrace();
        }
    }

    //查询函数
    public static ResultSet search(String sql){
        ResultSet resultSet = null;
        try{
            //将对sql预处理之后的结果放入statement
            statement = link.prepareStatement(sql);
            //将预处理后的statement传到MySQL,并返回结果
            resultSet = statement.executeQuery();
        }catch (Exception e){
            e.printStackTrace();
        }
        return resultSet;
    }

    //使用update函数进行表的插入、更新和删除
    public static boolean Update(String sql){
        int success=0;
        try{
            statement = link.prepareStatement(sql);
            success = statement.executeUpdate(sql);
        }catch (Exception e){
            e.printStackTrace();
        }
        return success != 0; //如果修改失败,受影响的行数为0
    }
}

实例调用

另开一个main文件,在里面进行对Connect的调用访问,使用Scanner方法来实现在Java中输入MySQL的命令行操控数据库。再利用ResultSet方法将数据库可视化。后续的插入、更新和删除操作就直接使用预处理语句。

package Connect;

import java.sql.*;
import java.util.Scanner;

public class main {

    static Connect linker = null;   //创建Connect对象

    public static void main(String[] args){
        linker = new Connect();
        String sql;
        ResultSet resultSet = null;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入SQL查询指令:");
        try {
            sql = scanner.nextLine();
            resultSet = linker.search(sql);

            while(resultSet.next()){
                String id = resultSet.getString(1);
                String the_name = resultSet.getString(2);
                String mark = resultSet.getString(3);
                String grade = resultSet.getString(4);
                System.out.println(id + '\t' + the_name + '\t' + mark + '\t' + grade);
            }
            resultSet.close();
        }catch (SQLException e){
            e.printStackTrace();;
        }
        try {
            sql = "insert into world.marks VALUE (18340005, 'JAck', 77, 29);";
            if(!linker.Update(sql)){
                System.out.println("语句错误!");
            }

            sql = "update world.marks set mark = 79 where id = 18340005;";
            if(!linker.Update(sql)){
                System.out.println("语句错误!");
            }

            sql = "delete from world.marks where id = 18340005;";
            if(!linker.Update(sql)){
                System.out.println("语句错误!");
            }

            linker.close();      //最后关闭数据库
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

最后的运行结果如下:
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值