Java JDBC连接MySQL数据库,基础语法及自定义JDBC的MySQL工具类

JAVA JDBC连接MySQL数据库

JDBC使用

1、通过反射加载驱动

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

2.建立连接

        Connection connection = DriverManager.getConnection(
                "jdbc:mysql://master:3306/shujia?useUnicode=true&characterEncoding=utf8",
                "root",
                "123456"
        );

3.创建执行器 用了执行sql语句

createStatement()

prepareStatement()

Statement statement = connection.createStatement();
        String sql = "select * from student";

4.执行sql语句

ResultSet rs = statement.executeQuery(sql);

5.获取结果

        while (rs.next()){
            System.out.print(rs.getInt("id") + "t");
            System.out.print(rs.getString("name") + "t");
            System.out.print(rs.getInt("age") + "t");
            System.out.print(rs.getString("sex") + "t");
            System.out.print(rs.getString("clazz") + "t");
            System.out.print(rs.getString("job") + "t");
            System.out.print(rs.getString("gongzi") + "tn");
        }

6.关闭

        rs.close();
        statement.close();
        connection.close();

JDBC查询全体学生信息

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

public class mysqlSelectDemo02 {
    public static void main(String[] args) throws Exception{
        //jdbc使用
        //1.通过反射加载 加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.建立连接
        Connection connection = DriverManager.getConnection(
                "jdbc:mysql://master:3306/shujia?useUnicode=true&characterEncoding=utf8",
                "root",
                "123456"
        );
        //3.创建执行器 用来执行SQL语句
        //3.1 createStatement()
        //3.2 prepareStatement()
        Statement statement = connection.createStatement();
        String sql = "select * from student";
        //4.执行sql语句
        ResultSet rs = statement.executeQuery(sql);
        //5.获取结果
        while (rs.next()){
            System.out.print(rs.getInt("id") + "t");
            System.out.print(rs.getString("name") + "t");
            System.out.print(rs.getInt("age") + "t");
            System.out.print(rs.getString("sex") + "t");
            System.out.print(rs.getString("clazz") + "t");
            System.out.print(rs.getString("job") + "t");
            System.out.print(rs.getString("gongzi") + "tn");
        }
        //6.关闭
        rs.close();
        statement.close();
        connection.close();
    }
}
运行结果:

20221401	刘生发	25	男	14	没有工作	17k	
20221402	胡杰靓	24	男	14	大数据工程师	18k	
20221403	朱佳乐	23	男	14	没有工作	17k	
20221404	张咪 	23	女	14	没有工作	17k	
20221405	杨旭	22	男	14	码农	15k	
20221406	陶华根	22	男	14	码农	15k	
20221407	潘磊	22	男	14	码农	14k	
20221408	王友虎	24	男	14	大数据高级开发工程师	20k	
20221409	覃笑	26	男	14	大数据架构师	50k	
20221410	潘磊	22	男	14	码农	14k	
20221411	王友虎	24	男	14	大数据高级开发工程师	20k	
20221412	覃笑	26	男	14	大数据架构师	50k	
20221413	潘磊	22	男	14	码农	14k	
20221414	王友虎	24	男	14	大数据高级开发工程师	20k	
20221415	覃笑	26	男	14	大数据架构师	50k	
20221416	潘磊	22	男	14	码农	14k	
20221417	王友虎	24	男	14	大数据高级开发工程师	20k	
20221418	覃笑	26	男	14	大数据架构师	50k	
20221419	王友虎	24	男	14	大数据高级开发工程师	20k	
20221420	覃笑	26	男	14	大数据架构师	50k	
20221421	覃笑	26	男	14	大数据高级开发工程师	20k	
20221422	王友虎	24	男	14	大数据高级开发工程师	20k	
20221423	覃笑	26	男	14	大数据架构师	50k	
20221424	覃笑	26	男	14	大数据高级开发工程师	20k	
20221425	王友虎	24	男	14	大数据高级开发工程师	20k	
20221426	覃笑	26	男	14	大数据架构师	50k	
20221427	覃笑	26	男	14	大数据高级开发工程师	20k	
20221428	王友虎	24	男	14	大数据高级开发工程师	20k	
20221429	覃笑	26	男	14	大数据架构师	50k	
20221430	覃笑	26	男	14	大数据高级开发工程师	20k	
20221431	李静	25	女	14	没有工作	17k	
20221432	奥特曼	25	男	14	打怪兽 	15k	
20221433	杨金杨	25	男	14	码农	15k	
20221434	杨金杨	25	男	14	打怪兽	15k	
20221435	杨金杨	25	男	14	打豆豆	15k	
20221436	杨金杨	25	男	14	打怪兽	15k	
20221437	李静 	25	女	14	打豆豆	20k	
20221438	覃笑	26	男	14	招生	25k	
20221439	李静	27	男	14	搞钱	28k	
20221440	张志凯	26	男	14	铠甲勇士	10k	
20221441	靓仔	24	男	14	大数据高级开发工程师	20k	

在这里插入图片描述

JDBC 添加学生信息

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

public class mysqlInsert {
    public static void main(String[] args) throws Exception{
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的id:");
        int id = scanner.nextInt();
        System.out.println("请输入您的姓名:");
        String name = scanner.next();
        System.out.println("请输入您的年龄:");
        int age = scanner.nextInt();
        System.out.println("请输入您的性别:");
        String sex = scanner.next();
        System.out.println("请输入您的班级:");
        String clazz = scanner.next();
        System.out.println("请输入您想要的工作:");
        String job = scanner.next();
        System.out.println("请输入您想要的薪资:");
        String gongzi = scanner.next();
        
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(
                "jdbc:mysql://master:3306/shujia?useUnicode=true&characterEncoding=utf8",
                "root",
                "123456"
        );
        
        Statement statement = connection.createStatement();
        String sql = "insert into student(id,name,age,sex,clazz,job,gongzi) values("+id+",'"+name+"',"+age+",'"+sex+"','"+clazz+"','"+job+"','"+gongzi+"')";
        
        int i = statement.executeUpdate(sql);
        if (i==i){
            System.out.println("注册成功,影响行数:" + i);
        }else {
            System.out.println("注册失败");
        }
        
        statement.close();
        connection.close();
        
    }
}

运行结果:

请输入您的id:
20221443
请输入您的姓名:
test
请输入您的年龄:
23
请输入您的性别:
女
请输入您的班级:
14
请输入您想要的工作:
划水
请输入您想要的薪资:
50k
注册成功,影响行数:1

在这里插入图片描述

JDBC 删除学生信息

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

public class mysqlDelete {
    public static void main(String[] args) throws Exception{
    
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(
                "jdbc:mysql://master:3306/shujia?useUnicode=true&characterEncoding=utf8",
                "root",
                "123456"
        );
        
        Statement statement = connection.createStatement();
        String sql = "delete from student where name = 'test'";
        
        int i = statement.executeUpdate(sql);
        if (i>0){
            System.out.println("执行成功,影响行数:" + i);
        }else {
            System.out.println("执行失败,影响行数:" + i);
        }
        
        statement.close();
        connection.close();
        
    }
}
运行结果:

执行成功,影响行数:1

在这里插入图片描述

JDBC 修改学生信息

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

public class mysqlUpdate {
    public static void main(String[] args) throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(
                "jdbc:mysql://master:3306/shujia?useUnicode=true&characterEncoding=utf8",
                "root",
                "123456"
        );
        Statement statement = connection.createStatement();
        String sql = "update student set age = 80 where name = 'test'";
        int i = statement.executeUpdate(sql);
        if (i>0){
            System.out.println("执行成功,影响行数:" + i);
        }else {
            System.out.println("执行失败,影响行数:" + i);
        }
        statement.close();
        connection.close();
    }
}

在这里插入图片描述

运行结果:

执行成功,影响行数:1

在这里插入图片描述

JDBC 用户登录

JDBC用户登录1

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class login01 {
    public static void main(String[] args) throws Exception{
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户:");
        String username = scanner.next();
        System.out.println("请输入密码:");
        String password = scanner.next();
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(
                "jdbc:mysql://master:3306/shujia",
                "root",
                "123456");
        Statement statement = connection.createStatement();
        //1.通过username去mysql中查找有没有这一条记录(存在:输入密码,不存在:就报错了)
        //2.存在之后 用查到的密码匹配输入的密码
        String sql = "select * from user where username='"+username+"'";
        ResultSet rs = statement.executeQuery(sql);
        if (!rs.next()){
            System.out.println("用户输入错误");
            //结束
        }
        //匹配密码
        String password1 = rs.getString("password");
        if (password==null || !password.equals(password1)){
            System.out.println("密码不匹配");
        }
        System.out.println("登录成功");
        rs.close();
        statement.close();
        connection.close();
    }
}

运行结果1:

请输入用户:
123
请输入密码:
456
用户输入错误

运行结果2:

请输入用户:
123
请输入密码:
456
用户输入错误

运行结果3:

请输入用户:
root
请输入密码:
123456
登录成功

但是这种方法通过SQL注入 123’ or '1=1 是可以登录进去的(不安全)

JDBC用户登录2

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

public class login02 {
    public static void main(String[] args) throws Exception{
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户:");
        String username = scanner.next();
        System.out.println("请输入密码:");
        String password = scanner.next();
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(
                "jdbc:mysql://master:3306/shujia",
                "root",
                "123456"
        );
        String sql = "select * from user where username=?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,username);
        ResultSet rs = statement.executeQuery();
        if (!rs.next()){
            System.out.println("用户输入错误");
        }
        //匹配密码
        String password1 = rs.getString("password");
        if (password==null || !password.equals(password1)){
            System.out.println("密码不匹配");
        }
        System.out.println("登录成功");
        rs.close();
        statement.close();
        connection.close();
    }
}

这种方式是安全的,以后开发都是使用该方法


MySQLUtil 工具类

如果说项目多了,每次都要启动JDBC的驱动,太啰嗦了为了减少工作量,我们自己定义一个MySQL JDBC工具类

import java.sql.*;

public class MysqUtil {
    static String DRIVER="com.mysql.jdbc.Driver";
    static String URL="jdbc:mysql://master:3306/shujia?useUnicode=true&characterEncoding=utf8";
    static String USERNAME="root";
    static String PASSWORD="123456";
    static Connection connection = null;
    static PreparedStatement ps = null;
    static ResultSet rs = null;
    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConn() {
        try {
            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD
            );
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    public static PreparedStatement getPs(String sql){
        try {
            ps = connection.prepareStatement(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return ps;
    }
    //查
    public static ResultSet getRs(){
        try {
            rs = ps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }
    //增删改
    public static int getInsert(){
        int i = 0;
        try {
            i = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }

    public static void close(){
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            if (ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                if (connection!=null){
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

使用该方法,以后想更改服务器,更改数据库,地址变了没关系,直接修改一下即可

JDBCUtilTest

import mysql.util.MysqUtil;

import java.sql.PreparedStatement;

public class JdbcUtilTest {
    public static void main(String[] args) {
        MysqUtil.getConn();
        String sql = "insert into student(id,name,age,sex,clazz,job,gongzi) values(20221445,'test',23,'nan','14','扫厕所','3k')";
        PreparedStatement ps = MysqUtil.getPs(sql);
        int insert = MysqUtil.getInsert();
        if (insert>0){
            System.out.println("运行成功,影响行数" + insert);
        }else {
            System.out.println("运行失败,影响行数" + insert);
        }
        MysqUtil.close();
    }
}

运行结果:

运行成功,影响行数1

在这里插入图片描述


                                                ?到底啦给靓仔一个关注吧!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>