java连接数据库,实现增删改查操作

news/2024/5/18 22:22:34 标签: 数据库, java, sql, mysql, jdbc

一.前言

写这个文章的原因是为了巩固自己连接数据库步骤

二.MySQL数据库连接

数据库连接步骤加载驱动程序,获取数据库连接对象

2.1驱动jar包

2.2代码

package cn.sg.xx.test;

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

public class Main {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        try {
            //数据库驱动参数
            String Driver = "com.mysql.cj.jdbc.Driver";//"com.mysql.jdbc.Driver"-->驱动地址已经过时
            //连接的URL,数据库名为test
            String URL = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf8";//后边的参数serverTimezone-->指定时区,characterEncoding-->编码格式
            //数据库用户名
            String Username = "root";
            //数据库密码
            String Password = "123";
            //加载MySQL驱动程序
            Class.forName(Driver);
            //与MySQL数据库创立连接
            Connection con = null;
            con = DriverManager.getConnection(URL, Username, Password);

        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序没有找到!");
        } catch (SQLException e) {
            System.out.println("SQL异常!");
        }
    }
}

三.增加表数据

String sql = "INSERT INTO test(id,NAME,sex) VALUES(?,?,?);";

建议写成这种语法,指定插入的列,可以防止表字段修改后,程序报错

使用PreparedStatement 进行sql语句的装配,可以防止sql注入

3.1代码

package cn.sg.xx.test;

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

public class Main {
    public static void main(String[] args) {
        try {
            //数据库驱动参数
            String Driver = "com.mysql.cj.jdbc.Driver";//"com.mysql.jdbc.Driver"-->驱动地址已经过时
            //连接的URL,数据库名为test
            String URL = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf8";//后边的参数serverTimezone-->指定时区,characterEncoding-->编码格式
            //数据库用户名
            String Username = "root";
            //数据库密码
            String Password = "123";
            //加载MySQL驱动程序
            Class.forName(Driver);
            //与MySQL数据库创立连接
            Connection con = null;
            con = DriverManager.getConnection(URL, Username, Password);

            //sql语句装配,?为占位符
            String sql = "INSERT INTO test(id,NAME,sex) VALUES(?,?,?);";
            PreparedStatement stmt = con.prepareStatement(sql);
            stmt.setInt(1, 2);
            stmt.setString(2, "张三");
            stmt.setString(3, "男");
            stmt.executeUpdate();

            //执行完数据库的操作有指令之后要释放资源,否则会导致内存的溢出
            stmt.close();
            con.close();

        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序没有找到!");
        } catch (SQLException e) {
            System.out.println("SQL异常!");
        }

    }
}

四.删除表数据

删除表数据的操作和插入操作基本相同,只有sql语句不同

4.1代码

String sql = "DELETE FROM test WHERE id = 1";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.executeUpdate();

五.修改表数据

同插入数据一样,仅仅修改sql语句为

六.查找表数据

表数据的查找需要比上边的插入、删除操作多关闭ResoultSet资源

ResoultSet rs;

rs.close();

6.1代码

//查找表数据
            String sql = "SELECT * FROM test";
            PreparedStatement stmt = con.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();
            //从 rs 获取数据
            while (rs.next()) {
                //rs.getMetaData().getColumnCount() --> 获取表的列数
                for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                    String colunmName = rs.getMetaData().getColumnName(i);//获取列名
                    Object temp = rs.getString(i);//获取该列对应元素的值
                    System.out.print(colunmName + "-->" + temp + "\t");
                }
                System.out.println();

七.全部代码

package cn.sg.xx.test;

import java.sql.*;

public class Main {
    public static void main(String[] args) throws SQLException {
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            //数据库驱动参数
            String Driver = "com.mysql.cj.jdbc.Driver";//"com.mysql.jdbc.Driver"-->驱动地址已经过时
            //连接的URL,数据库名为test
            String URL = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf8";//后边的参数serverTimezone-->指定时区,characterEncoding-->编码格式
            //数据库用户名
            String Username = "root";
            //数据库密码
            String Password = "123";
            //加载MySQL驱动程序
            Class.forName(Driver);
            //与MySQL数据库创立连接
            con = DriverManager.getConnection(URL, Username, Password);

            //sql语句装配,?为占位符
            String sql = "INSERT INTO test(id,NAME,sex) VALUES(?,?,?);";
            stmt = con.prepareStatement(sql);
            stmt.setInt(1, 2);
            stmt.setString(2, "张三");
            stmt.setString(3, "男");
            stmt.executeUpdate();

            //删除表数据
            sql = "DELETE FROM test WHERE id = 1";
            stmt = con.prepareStatement(sql);
            stmt.executeUpdate();

            //修改表数据
            sql = "UPDATE test SET sex = '女' WHERE id = 1";
            stmt = con.prepareStatement(sql);
            stmt.executeUpdate();

            //查找表数据
            sql = "SELECT * FROM test";
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();
            //从 rs 获取数据
            while (rs.next()) {
                //rs.getMetaData().getColumnCount() --> 获取表的列数
                for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                    String colunmName = rs.getMetaData().getColumnName(i);//获取列名
                    Object temp = rs.getString(i);//获取该列对应元素的值
                    System.out.print(colunmName + "-->" + temp + "\t");
                }
                System.out.println();
            }
            //执行完数据库的操作有指令之后要释放资源,否则会导致内存的溢出

        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序没有找到!");
        } catch (SQLException e) {
            System.out.println("SQL异常!");
        } finally {
            //关闭资源
            if (rs != null)
                rs.close();
            if (stmt != null)
                stmt.close();
            if (con != null)
                con.close();

        }

    }
}

最后给大家推荐一个口碑不错的Java聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员定时讲解java技术,分享一些学习的方法和需要留意的小细节。


http://www.niftyadmin.cn/n/900377.html

相关文章

java---多线程的通信、生产者与消费者模式

一、重点知识 isDaemon 判断是否为守护线程。 run方法是不能用synchronized修饰&#xff0c;他是继承来的&#xff0c;不能改变其结构&#xff0c;而且&#xff0c;如果run方法加了synchronized&#xff0c;就变成单线程了&#xff0c;就没有并发了。 只要不是静态的同步方法…

git使用之三——.git文件夹详解

博客&#xff1a; 安卓之家 微博&#xff1a; 追风917 CSDN&#xff1a; 蒋朋的家 简书&#xff1a; 追风917 博客园&#xff1a; 追风917 git使用之一——git的基本使用 git使用之二——.gitignore文件详解 git使用之三——.git文件夹详解 git使用之四——windows下gi…

git使用之四——windows下github桌面版的安装

博客&#xff1a; 安卓之家 微博&#xff1a; 追风917 CSDN&#xff1a; 蒋朋的家 简书&#xff1a; 追风917 博客园&#xff1a; 追风917 git使用之一——git的基本使用 git使用之二——.gitignore文件详解 git使用之三——.git文件夹详解 git使用之四——windows下gi…

git使用之五——Github上fork项目后与原项目保持同步

博客&#xff1a; 安卓之家 微博&#xff1a; 追风917 CSDN&#xff1a; 蒋朋的家 简书&#xff1a; 追风917 博客园&#xff1a; 追风917 git使用之一——git的基本使用 git使用之二——.gitignore文件详解 git使用之三——.git文件夹详解 git使用之四——windows下gi…

来,带你鸟瞰 Java 中的并发框架!

1. 为什么要写这篇文章 几年前 NoSQL 开始流行的时候&#xff0c;像其他团队一样&#xff0c;我们的团队也热衷于令人兴奋的新东西&#xff0c;并且计划替换一个应用程序的数据库。 但是&#xff0c;当深入实现细节时&#xff0c;我们想起了一位智者曾经说过的话&#xff1a;“…

git使用之六——github协同工作的Fork+Pull Request

博客&#xff1a; 安卓之家 微博&#xff1a; 追风917 CSDN&#xff1a; 蒋朋的家 简书&#xff1a; 追风917 博客园&#xff1a; 追风917 git使用之一——git的基本使用 git使用之二——.gitignore文件详解 git使用之三——.git文件夹详解 git使用之四——windows下gi…

git使用之七——Android Studio下git的正确使用

博客&#xff1a; 安卓之家 微博&#xff1a; 追风917 CSDN&#xff1a; 蒋朋的家 简书&#xff1a; 追风917 博客园&#xff1a; 追风917 git使用之一——git的基本使用 git使用之二——.gitignore文件详解 git使用之三——.git文件夹详解 git使用之四——windows下gi…

10 分钟实现 Java 发送邮件功能

Spring Boot集成邮件服务竟如此简单&#xff0c;快速掌握邮件业务类的核心逻辑和企业邮件的日常服务。 什么是SMTP&#xff1f; SMTP全称为Simple Mail Transfer Protocol&#xff08;简单邮件传输协议&#xff09;&#xff0c;它是一组用于从源地址到目的地址传输邮件的规范…