JDBC连接mysql数据库(一)

news/2024/5/19 1:38:04 标签: mysql, java, jdbc, sql, 数据库

sql>mysql_0">JDBC连接sql>mysql数据库

第一节 了解并使用JDBC


文章目录

  • JDBC连接sql>mysql数据库
  • 一、JDBC是什么?
  • 二、使用步骤
    • 1.导入驱动包
    • 2.注册驱动
    • 3.获取数据库连接对象
        • 一、DriverManager:驱动管理对象
        • 二、Connection:数据库连接对象
    • 4.定义sql语句
    • 5.获取执行sql的对象 Statement
    • 6.执行sql
        • 一、Statement:执行sql的对象
        • 二、PreparedStatement:执行sql的对象,防止sql注入
    • 7.处理结果
    • 8.释放资源
  • 三、添加案例
  • 总结


一、JDBC是什么?

概念:Java DataBase Connectivity ,Java 数据库连接,是使用Java语言来进行操作数据库

二、使用步骤

1.导入驱动包

我使用的数据库是Mysql,用的是sql>mysql-connector-java-5.1.37-bin.jar包。可根据自身使用情况到相应数据库官网下载。
导入步骤:
1.复制sql>mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键–>Add As Library

在这里插入图片描述

2.注册驱动

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

3.获取数据库连接对象

conn = DriverManager.getConnection
("jdbc:sql>mysql://localhost:3306/db","root","root");

一、DriverManager:驱动管理对象

功能:

  1. 注册驱动:告诉程序该使用哪一个数据库驱动jar
    static void registerDriver(Driver driver) :注册与给定的驱动程序 DriverManager 。

    注意:sql>mysql5之后的驱动jar包可以省略注册驱动的步骤。

  2. 获取数据库连接:

    方法:static Connection getConnection(String url, String user, String password)
    参数:
    * url:指定连接的路径
    语法:jdbc:sql>mysql://ip地址(域名):端口号/数据库名称
    例子:jdbc:sql>mysql://localhost:3306/db3
    细节:如果连接的是本机sql>mysql服务器,并且sql>mysql服务默认端口是3306,则url可以简写为:jdbc:sql>mysql:///数据库名称
    * user:用户名
    * password:密码

二、Connection:数据库连接对象

功能:

  1. 获取执行sql 的对象
    * Statement createStatement()
    * PreparedStatement prepareStatement(String sql)

sql_79">4.定义sql语句

String sql = "update user set username= '张三' where id = 1";

sql_Statement_85">5.获取执行sql的对象 Statement

Statement stmt = conn.createStatement();

sql_91">6.执行sql

int count = stmt.executeUpdate(sql);

sql_95">一、Statement:执行sql的对象

  1. boolean execute(String sql) :可以执行任意的sql
  2. int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
    返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。
  3. ResultSet executeQuery(String sql) :执行DQL(select)语句

sqlsql_102">二、PreparedStatement:执行sql的对象,防止sql注入

  1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题。
    输入用户随便,输入密码:a’ or ‘a’ = 'a
    sql:select * from user where username = ‘fhdsjkf’ and password = ‘a’ or ‘a’ = ‘a’

  2. 解决sql注入问题:使用PreparedStatement对象来解决

  3. 预编译的SQL:参数使用?作为占位符

  4. 使用PreparedStatement可以防止sql注入,同时效率更高。

7.处理结果

System.out.println(count);

8.释放资源

stmt.close();
conn.close();

三、添加案例

public static void main(String[] args) {
        Statement stmt = null;
        Connection conn = null;
        try {
            //1. 注册驱动
            Class.forName("com.sql>mysql.jdbc.Driver");
            //2. 定义sql
            String sql = "insert into account values(4,'王五',3000)";
            //3.获取Connection对象
            try {
                conn = DriverManager.getConnection("jdbc:sql>mysql://localhost:3306/db", "root", "root");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            //4.获取执行sql的对象 Statement
            stmt = conn.createStatement();
            //5.执行sql
            int count = stmt.executeUpdate(sql);//影响的行数
            //6.处理结果
            System.out.println(count);
            if(count > 0){
                System.out.println("添加成功!");
            }else{
                System.out.println("添加失败!");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //7. 释放资源
            //避免空指针异常
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

控制台结果
在这里插入图片描述
数据库已经成功添加
在这里插入图片描述


总结

以上就是JDBC与数据库的原生态连接步骤,但是大家有没有发现一个问题,就是连接过多的话,代码冗余量过多,有很多重复的操作,所以下次将会使用黑科技来减少代码量,简化我们的开发。有问题可以下方评论,我看到后会进行解答。一起加油!


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

相关文章

编程世界的那把锁

1共享变量惹得祸 我们这里是个典型的弱肉强食的世界,人口多而资源少,为了争抢有限的资源,大家都在自己能运行的CPU时间片里拼了老命,经常为了一个变量的修改而打的头破血流。 100纳秒以前,我有幸占据了CPU,从内存中读取…

请按要求编写多线程应用程序,模拟多个人通过一个山洞

请按要求编写多线程应用程序,模拟多个人通过一个山洞: 1.这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒; 2.随机生成10个人,同时准备过此山洞,并且定义一个变量用于记录通过隧道的人数。 3.显示每…

等待唤醒机制

线程间通信   概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。   比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理…

线程的基本概念(一)

线程的基本概念 第一节 线程的基本概念 文章目录线程的基本概念前言一、程序、进程、线程是什么?1.程序(program)2.进程(process)3.线程(thread)二、单核CPU和多核CPU的分别表示什么?1.单核CUP2.多核CUP三、并行与并发1.并行2.并发四、使用多线程的优点五…

Nginx HTTP缓存设置

Nginx提供了expires、etag、if-modified-since指令来实现浏览器缓存控制。 expires 如果我们使用Nginx作为静态资源服务器,那么可以使用expires进行缓存控制。 location /img { alias /export/img/; expires 1d; } 当我们访问静态资源时,如,将…

电商项目中的经典问题(二)

电商项目中的经典问题(持续更新)这个系统的用户认证是怎么实现的? 使用用户名密码认证方式。 1、 用户认证 2、 用户身份校验 用户身份校验使用springmvc提供拦截器完成。 流程: 公开权限:用户不需要登录就访问地址…

线程的四种创建方式(二)

线程的四种创建方式 第二节 线程的四种创建方式 文章目录线程的四种创建方式前言一、继承Thread类创建线程二、实现Runnable接口创建线程1.继承方式和实现方式的联系与区别三、实现Callable接口。 --- JDK 5.0新增1.与使用Runnable相比, Callable功能更强大些四、使…

Java多线程系列--“JUC原子类”01之 框架

根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;3. 引用类型: AtomicReference, AtomicStampedRerence, AtomicMa…