[MySql]JDBC编程

2023-11-02

  JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问

目录

JDBC的使用:

1.下载驱动包,并添加到项目当中  

2.编程语句

2.1创建数据源

2.2与数据库建立连接

2.3构造sql语句

2.4执行sql语句

2.5释放资源

3.完整代码


JDBC的使用:

1.下载驱动包,并添加到项目当中  

驱动包下载地址:Maven Repository: mysql » mysql-connector-java (mvnrepository.com)

下载jar包 

  

按照MySql版本下载成功后,添加到对应要使用的项目当中.

对项目进行右键,创建一个新的文件夹(文件名随意)

下载完成的mysql驱动包右键选择复制,再对刚刚创建完成的文件夹Ctrl  + v.

 点击OK即可

右键添加驱动包的文件夹,选择Add as Library(让IDEA知道,这个文件夹作为存放库文件)

 现在就正式的完成了对驱动包的添加

2.编程语句

2.1创建数据源

DataSource是一个接口,为我们指明了数据库服务的位置

这一步我们要做的,主要是创建一个MysqlDataSource对象,并用DataSource类型来接收

MysqlDataSource是DataSource的一个子类,我们使用了向上转型主要是为了减少其耦合性,方便日后更换其他驱动包.

setURL/setUrl()方法:

        URL是唯一资源定位符,用来在网络上描述资源的位置.

 jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false

URL的类型/用途,此处为Mysql进行服务

这个位置要存放的是数据库所在的设备的IP,而127.0.0.1为环回地址,指代自己的主机,即数据库与JAVA代码在用一台设备

端口号,用来区分主机上的进程

访问的数据库的名称,即打开Mysql后use 数据库名的那个.

统一字符集为utf8

数据库与客户端之间的通信与否

 setUser()方法:

        用来放置要登录的数据库账户的用户名

setPassword()方法:

        放置登录账号的密码

DataSource dataSource = new MysqlDataSource();//创建一个datasource对象
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");

2.2与数据库建立连接

Connection connection = dataSource.getConnection();

要选择java.sql的Connection接口,并抛出相应的异常

public static void main(String[] args) throws SQLException{}

2.3构造sql语句

String sql = ""; // 写出一个mysql语句

PreparedStatement statement = connection.prepareStatement(sql);
//对mysql语句进行预处理,验证mysql语句是否符合语法要求,能减轻mysql服务器的负担

也可以使用

Statement statement = connection.createStatement();//不进行处理,传输到mysql服务器上

方法一:

String sql = "insert into employee values('xiaoming','111','male')";
PreparedStatement statement = connection.prepareStatement(sql);

方法二:

Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();

String sql = "insert into employee values(" + name + ", " + id + ", " + sex + ", " + ")";
PreparedStatement statement = connection.prepareStatement(sql);

方法三:(推荐)

使用占位符来替换,能够有效的避免出现SQL的注入攻击,也会更严格的进行校验语句是否正确

Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();

String sql = "insert into employee values(?,?,?)";

        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);//替换第一个占位符
        statement.setString(2,id);//替换第二个占位符
        statement.setString(3,sex);//替换第三个占位符

2.4执行sql语句

int n = statement.executeUpdate();//对于数据库的增,删,改可以使用此语句
//使用一个整数来接受返回值,含义为对于数据库所影响的数据行数
ResultSet resultSet = preparedStatement.executeQuery();//对于查询sql语句使用
//并使用ResultSet来接收返回值,含义为select得到的所有数据行

while(resultSet.next()){//每一次while循环以一行数据为单位,直到所有都打印完
    String name = resultSet.getString("name");
    String id = resultSet.getString("id");
    String sex = resultSet.getString("sex");
    System.out.println(name + " " + id + " " + " " + sex);
}

2.5释放资源

使用了什么就释放什么,并按照相反的使用顺序

resultSet.close();//只有查询语句并使用了ResultSet来接收executeQuery()才需要释放
preparedStatement.close();//释放预处理
connection.close();//释放连接

3.完整代码

增添,删除和更新数据的语句格式很类似,只有sql语句的区别
public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();
        //创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("021228");
        //和数据库建立连接
        Connection connection = dataSource.getConnection();
        //构造sql语句
        String sql = "insert into employee values(?,?,?)";

        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setString(2,id);
        statement.setString(3,sex);
        System.out.println(statement);
        //执行sql语句
        int n = statement.executeUpdate();
        //释放资源,关闭连接
        statement.close();
        connection.close();
    }
查询数据
public static void main(String[] args) throws SQLException {
        //创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("021228");
        //建立连接
        Connection connection = dataSource.getConnection();
        //构造sql语句
        String sql = "select * from employee";
        //预处理sql语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        System.out.println(sql);
        //执行sql语句
        ResultSet resultSet = preparedStatement.executeQuery();
        while(resultSet.next()){//每一次while循环以一行数据为单位
            String name = resultSet.getString("name");
            String id = resultSet.getString("id");
            String sex = resultSet.getString("sex");
            System.out.println(name + " " + id + " " + " " + sex);
        }
        //释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[MySql]JDBC编程 的相关文章

随机推荐

  • PBFT共识算法原理

    1 容错类型 PBFT假定错误可以是拜占庭类型的 也就是说可以使任意类型的错误 比如节点作恶 说谎等 这有别于crash down类型的错误 raft paxos这类共识算法只能允许crash down类型错误 节点只能crash而不能产生
  • 推荐三款适合运维小白的网络监测工具

    对于刚刚步入职场的运维小白而言 面对工作中的突发情况时常会感到手忙脚乱 为了帮助他们更好地应对这些挑战 本文将介绍三款特别适合运维新手使用的网络监测工具 1 Zabbix是一个功能强大的网络监控系统 可以监视各种网络设备的性能指标 应用的运
  • Python图形界面设计 Tkinter GUI编程组件的使用

    一 学习目标 1 GUI库 2 Tkinter库 3 导入Tkinter库 4 4 Tkinter窗口中显示中文 5 Tkinter 组件 二 重点知识 1 GUI库 GU1 Graphical User Interface 图形用户界面
  • 【Python数据挖掘课程】二.Kmeans聚类数据分析及Anaconda介绍

    这次课程主要讲述一个关于Kmeans聚类的数据分析案例 通过这个案例让同学们简单了解大数据分析的基本流程 以及使用Python实现相关的聚类分析 主要内容包括 1 Anaconda软件的安装过程及简单配置 2 聚类及Kmeans算法介绍 3
  • 使用SoapHeader实现Soap请求验证

    http www laruence com 2010 03 26 1365 html PHP的Soap Extension中 对于SoapServer来说 并没有方法可用得到 处理客户端发送的SoapHeader信息 网上也有很多人认为 只
  • CSS&JavaScript讲解

    CSS 概念 全称 Cascading Style Sheets 层叠样式表 用于美化页面 布局页面 层叠 多个样式可以作用在同一个html的元素上 同时生效 好处 功能强大 将内容展示和样式控制分离 降低耦合度 解耦 让分工写作更容易 提
  • QQ分享失败原因

    通过qq分享链接到QQ空间 QQ当中 分享失败 要么就是调起qq后调不起分享框 排查了很久才找到原因 原来是分享的url链接不正确
  • PAT-B 1032 挖掘机技术哪家强 (20分)

    为了用事实说明挖掘机技术到底哪家强 PAT 组织了一场挖掘机技能大赛 现请你根据比赛结果统计出技术最强的那个学校 输入格式 输入在第 1 行给出不超过 10 5 的正整数 N 即参赛人数 随后 N 行 每行给出一位参赛者的信息和成绩 包括其
  • leetcode3 链表相加

    package 剑指offer 我们要明白链表逆序的好处 4 gt 2 gt 5 5 gt 8 gt 1 9 gt 0 gt 7 第一 数需要对齐 尤其是两个数不是相同位数的情况 那么那就回想一下 我们做加法都是尾部对齐 而不是头部 这样的
  • 如何在pycharm使用Anaconda下载的库

    如何在pycharm使用Anaconda下载的库 这篇文章 介绍了如何在pycharm项目 project 里建立Anaconda环境 从而引用anaconda下载的库 site packages 但我个人使用后发现 换了虚拟环境后无法实现
  • 旋转的矩阵-c++

    旋转的矩阵 数据结构 题目描述 给定一个n m的矩阵 请以顺 逆时针交替旋转的方式打印出每个元素 Input Format 第一行n m 0
  • Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.executor

    报错信息 Error getting generated key or setting result to parameter object Cause org apache ibatis executor ExecutorExceptio
  • 毕业设计课题大全

    Java毕业设计课题大全 https blog csdn net My IT Road article details 90341793 软件工程毕业设计集合 https blog csdn net linzhiqiang0316 arti
  • tutk云平台服务器_哪家云服务器便宜?各家云平台活动详解【持续更新】

    不知不觉 双十一已经近在眼前 作为一年一度的购物狂欢节 无论对于商家还是消费者来说 都是一次畅快购物的饕餮盛宴 对于云平台来说 自然不会错过一年中绝佳的营销机会 各种优惠活动也是纷至沓来 在讨论哪家云服务器便宜之前 我们先来看看该如何选择云
  • 微信登录总结公众号登录小程序登录企业微信登录

    微信公众号 服务号登录 微信内部网页授权 第一步 请求CODE https open weixin qq com connect oauth2 authorize appid APPID redirect uri REDIRECT URI
  • VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出

    换了一台电脑 vc6 0程序中 点击打开文件以及向工程中添加文件时 程序竟然崩溃自动退出了 不知什么原因 安装相同的vc程序 本本竟然出现此缘故 但是这个操作又是自己经常用到的 所以不得不解决 与上一台电脑不同的是 此电脑是win7系统 而
  • 最小二乘拟合平面——拉格朗日乘子法

    目录 一 算法原理 二 代码实现 1 python 2 matlab 三 算法效果 一 算法原理 设拟合出的平面方程为 a x b
  • tinyhttp

    博客园 http www cnblogs com letlifestop Tinyhttpd 是J David Blackstone在1999年写的一个不到 500 行的超轻量型 Http Server 用来学习非常不错 可以帮助我们真正理
  • c++中和c语言不相同的地方

    c 糅合了c语言的语法 并且在c语言的基础上进行了改进 并且具有向下兼容的特性 但是c 改进了什么东西呢 今天就来学习一下吧 目录 命名空间 namespace cout与cin与endl 流插入符与流运算符 using namespace
  • [MySql]JDBC编程

    JDBC 即Java Database Connectivity java数据库连接 是一种用于执行SQL语句的Java API 它是Java中的数据库连接规范 这个API由 java sql javax sql 包中的一些类和接口组成 它