Java连接mysql数据库

news/2024/5/18 22:59:29 标签: 数据库, mysql, java, jdbc, sql注入

文章目录

  • 一、Java连接mysql数据库
    • 1.1 流程
    • 1.2 一个测试连接的java程序
  • 二、优化:创建一个工具类
    • 2.1 存在的问题
    • 2.2 创建配置文件和工具类
    • 2.3 测试使用工具类进行CRUD操作

mysql_1">一、Java连接mysql数据库

1.1 流程

java连接mysql大致需要这六步:

  1. 导入驱动包:这里我使用的是mysql-connector-java-8.0.17.jar(点击下载),这个包连接mysql5.6,5.7,8.0版本都没问题。
    Class.forName("com.mysql.cj.jdbc.Driver");
  2. url和账户名密码
    JDBC连接串:jdbc:mysql://<地址>:<端口>/<数据库>
  3. 获取连接DriverManager.getConnection(url, user, password);
  4. 执行sql的Statement对象connection.createStatement();
  5. 执行SQL
  6. 释放连接

java_13">1.2 一个测试连接的java程序

JdbcFirstDemo.java

java">package com.peng.less01;

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

public class JdbcFirstDemo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1.导入驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2.用户信息和url
        String url = "jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false";
        String user = "root";
        String password = "12345678";
        // 3.获取连接
        Connection conn = DriverManager.getConnection(url, user, password);
        // 4.执行SQL的对象
        Statement sta =  conn.createStatement();
        // 5.执行SQL
        String sql = "select * from account";
        ResultSet rs = sta.executeQuery(sql);
        while (rs.next()){
            System.out.println("id= " + rs.getObject("id"));
            System.out.println("name= " + rs.getObject("name"));
            System.out.println("money= " + rs.getObject("money"));
            System.out.println("=========================================");
        }
        // 6.释放连接
        rs.close();
        sta.close();
        conn.close();
    }
}

这里使用的是VScode,connector包放到了lib目录下,代码放在了src/com/peng/less01下。
执行结果如下,显示了shop.account表下面的三条记录。
在这里插入图片描述

二、优化:创建一个工具类

2.1 存在的问题

1、JDBC连接串,用户名,密码等都存在于代码中,需要进行解耦

2、创建连接,释放连接这些操作都是固定的,没必要每次都重复写这些代码(创建函数解决

2.2 创建配置文件和工具类

src/db.properties 文件中记录driver,url,user,password

java">driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false
user=root
password=12345678

src/com/peng/less02/utils/JdbcUtils.java 工具类:读取properties配置文件
自动读取配置信息,加载mysql驱动。

java">package com.peng.less02.utils;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

// 这是一个工具类,用来减少重复操作
public class JdbcUtils {

    private static String driver = null;
    private static String url = null;
    private static String user = null;
    private static String password = null;
    static{
        
        try{
            // 读取db.properties
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(in);
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            password = properties.getProperty("password");

            // 加载驱动
            Class.forName(driver);  
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    // 创建连接
    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(url,user,password);
    }
    // 释放连接
    public static void releaseConnection(Connection conn, Statement sta, ResultSet rs){
        if (rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (sta != null){
            try {
                sta.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

2.3 测试使用工具类进行CRUD操作

测试插入操作
src/com/peng/less02/TestInsert.java

java">package com.peng.less02;

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

import com.peng.less02.utils.JdbcUtils;

public class TestInsert {
    public static void main(String[] args) {
        Connection conn = null;
        Statement sta = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtils.getConnection();
            sta = conn.createStatement();
            String sql = "insert into account(`id`,`name`,`money`) values(4,'药水哥',4698888)";
            int i = sta.executeUpdate(sql);
            if (i > 0){
                System.out.println("插入成功!");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            JdbcUtils.releaseConnection(conn, sta, rs);
        }
    }
    
}

测试更新操作
src/com/peng/less02/TestUpdate.java

java">package com.peng.less02;
import java.sql.*;
import com.peng.less02.utils.JdbcUtils;

public class TestUpdate {
    public static void main(String[] args) {
        Connection conn = null;
        Statement sta = null;
        try {
            conn = JdbcUtils.getConnection();
            sta = conn.createStatement();
            String sql = "update account set `money`=238888 where id=3";
            int i = sta.executeUpdate(sql);
            if (i > 0){
                System.out.println("更新成功");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            JdbcUtils.releaseConnection(conn, sta, null);
        }
    }
    
}

测试读取操作

java">package com.peng.less02;
import java.sql.*;
import com.peng.less02.utils.JdbcUtils;

public class TestSelect {
    public static void main(String[] args) {
        Connection conn = null;
        Statement sta = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtils.getConnection();
            sta = conn.createStatement();
            String sql = "select * from account";
            rs = sta.executeQuery(sql);
            while (rs.next()){
                System.out.println("id= " + rs.getInt("id"));
                System.out.println("name= " + rs.getString("name"));
                System.out.println("money= " + rs.getObject("money"));
                System.out.println("======================================================");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            JdbcUtils.releaseConnection(conn, sta, rs);
        }
    }

}

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

相关文章

【uniapp小程序开发】—— 组件封装之【自定义弹窗】

文章目录&#x1f34b;前言&#xff1a;&#x1f34d;正文1、探讨需求封装popup自定义弹窗组件2、实战开发弹窗组件2.1 子组件内容 popup.vue文件2.2 父组件引用子组件3、效果图预览3.1 不使用具名插槽的原有样式效果3.2 使用具名插槽之后样式效果&#x1f383;专栏分享&#x…

从1-10,中国制造业数字化持续增长的路径与实践

3月30日&#xff08;周三&#xff09;下午&#xff0c;纷享销客[对话|新增长100]栏目的制造行业专场如约而至&#xff0c;本次也是纷享销客2022年B2B新增长趋势系列的第三期&#xff0c;话题聚焦“从1-10&#xff0c;中国制造业数字化持续增长的路径及实践? ” 纷享销客制造行…

信号完整性测试

信号完整性测试----持续更新中示波器三要素&#xff1a;带宽采样率存储深度IIC信号测试SPI信号测试USART信号测试RS232信号测试RS485信号测试CAN信号测试PWM信号测试示波器三要素&#xff1a; 示波器三个重要参数&#xff1a;带宽、采样率、存储深度 带宽 示波器的带宽&…

【数据结构-数组】数组的相关算法

文章目录1 无序数组的排序——快速排序1.1 升序排序1.2 降序排序2 有序数组的查找——折半查找&#xff08;二分查找&#xff09;2.1 升序数组的查找2.2 降序数组的查找3 有序数组的合并——归并思想3.1 归并两个升序数组3.2 归并两个降序数组3.3 升序和降序归并为升序3.4 升序…

计算机毕业设计(37)java毕设作品之疫情核酸检查预约系统

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的疫情核酸检查预约系统&#xff0c;整个网站项目使用了B/S架构&#xff0c;基于java的springboot框架下开发&#xff1b;&#xff1b;通过后台设置医院信息、录入医院科室信息、录入医生信息、设…

使用Microsoft Visual Studio 2019进行unity开发代码无智能提示

问题 使用Microsoft Visual Studio 2019进行unity开发代码无智能提示 详细问题 对于GameObject关键字&#xff0c; 输入部分关键字&#xff0c; Microsoft Visual Studio 2019未进行智能提示 解决方案 1 工具→\rightarrow→获取工具与功能 2 选中.NET的移动开发与使用u…

HTML之背景颜色、图片、超链接

背景颜色、图片&#xff1a; img用于设置浮动于浏览器窗口当中的一个图片元素&#xff1a; img是图片标签&#xff0c;这个标签可以没有结束标签。 src属性用来指定图片的路径 width用来设置图片的宽度&#xff0c;这个时候高度会等比例缩放。高度不需要设置&#xff0c;设置高…

【SpringBoot】一文吃透SpringBoot多环境开发

文章目录前言yml版多环境开发yml版单文件多环境yml版多文件多环境properties版多环境开发多环境分组管理多环境开发控制总结&#x1f315;博客x主页&#xff1a;己不由心王道长&#x1f315;! &#x1f30e;文章说明&#xff1a;一文彻底吃透SpringBoot多环境开发&#x1f30e;…