数据库JDBC

news2025/1/11 17:09:55

数据库厂商提供一个程序来完成 API 的转换,对原生 API 封装再提供成JDBC 的形状。

这个程序叫数据库驱动包。

JAVA程序员要想对数据库开发, 就要导入对应的数据库驱动包,才能编写代码。

数据库驱动是让JDBC认识数据库API 

URL 计算机里的一个常见术语唯一资源定位符~~ 描述网络上的某个资源所在的位置~~ 

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

 jdbc:mysql是固定的,取决于用什么数据库。

127.0.0.1:

mysql 数据库是一个"客户端服务器”结构的程序.客户端和服务器之间通过网络来通信~~
网络上确定主机的位置就是通过 IP 地址来确定的~~

咱们都是写作 127.0.0.1 叫做环回 IP,表示你自己的当前主机因为咱们的 数据库客户端(现在写的 dbc 代码),数据库服务器(之前装存数据的服务)是在一个主机上~~

3306:端口来区分应用程序数据库服务器默认端口就是 3306 。

test1000是要创建的数据库的名称 

SSL是加密协议,设为false是不加密。

 三步设置完后才能访问数据库服务器。

密码是安装数据库时的密码。

这个代码只是设置数据源,描述数据库服务器在哪~~还没真正和数据库服务器连接呢!!

使用这个代码进行连接。

 红线是一个异常。

异常分为受查异常和非受查异常。

受查异常 必须要显式处理。

非受查异常 不显式处理也没事

这里是受查异常。

加上下面这个就好了。

Connection定义变量类型,一定要用第一个。 

 

 

下面红线是对sql进行预编译的。

 为什么进行预编译?

如果请求是个 SQL 字符串,服务器是可以处理的服务器就需要对 SQL 进行解析,理解这里的含义并执行~~对于服务器的压力就比较大!!

让客户端来对 SQL 进行预编译, 服务器做的工作就简单一些,压力就会小不少

下面代码是把预编译过的sql语句发送给数据库服务器,由服务器进行响应。

其中executeUpdate返回int,表示影响的行数。

 

 

 

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCtest1 {
    public static void main(String[] args) throws SQLException {
        //1.创建并初始化一个数据源
        DataSource databsource=new MysqlDataSource();//向上转型
        ((MysqlDataSource)databsource).setUrl("jdbc:mysql://127.0.0.1:3306/test1000?characterEncoding=utf8&useSSL=false");
        //setUrl是子类有父类没有的方法,所以要转换为子类,这个过程是向下转型。
        //MysqlDataSource databsource=new MysqlDataSource();
        //        ((MysqlDataSource)databsource).setUrl();
        //这样写也是可以的,只不过上面那种写法在java中比较流行。
        ((MysqlDataSource)databsource).setUser("root");
        ((MysqlDataSource)databsource).setPassword("asdf6115855");
        //和数据库服务器建立连接
       Connection connection= databsource.getConnection();
       //构造sql语句
        String sql="insert into student value(1,'王五')";
        PreparedStatement statement=connection.prepareStatement(sql);
        //执行sql语句
        int ret=statement.executeUpdate();
        System.out.println("ret="+ret);
        //释放必要资源
        statement.close();
        connection.close();
    }
}

 其中上面的数据是死的,最好可以灵活输入内容。

 下面这样就可以了。

 但是这样写不美观。

我们可以用下面的方式,其中?是占位符。

 

 

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.*;

public class JDBCtest2 {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test1000?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("asdf6115855");
        Connection connection=dataSource.getConnection();
        String sql="select * from student";
        PreparedStatement statement=connection.prepareStatement(sql);
        ResultSet resultSet=statement.executeQuery();
        //遍历结果集合
        while(resultSet.next())
        {
            //把 resultSet 想象成一个表格,同时表格这里有个光标,初始情况下光标指向表最上面~
            //每次调用 next,光标往下走一行~~
            //当光标指向某一行的时候,就可以通过 getxxX 来获取到当前这行里的数据
            int id=resultSet.getInt("id");
            String name=resultSet.getString("name");
            System.out.println("id ="+ id +", name ="+name);
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL安装与新用户的创建相关

一、MySQL安装 1. 官网下载mysql的ims包 MySQL :: Download MySQL Installer (Archived Versions) 下载好,双击运行。 2. 根据提示进行安装 这里选择手动安装的选项: 然后选择你安装的MySQL版本,这里是5.7 勾选自定义MySQL安装位置 下一…

教育大数据总体解决方案(7)

考勤查询 创客教室 为体现学校创新教育的成果,丰富学校创新实践活动,加强创新课程普及教育,把机器人创新教育作为学校的教育特色来体现,使学生通过理论与实践相结合的方法,进一步学习掌握机械、电子结构、信息技术、人…

让我们谈谈你对 ThreadLocal 的理解

介绍 ThreadLocal 从 JDK1.2 开始,ThreadLocal 是一个被用来存储线程本地变量的类。在 ThreadLocal 中的变量在线程之间是独立的。当多个线程访问 ThreadLocal 中的变量,它们事实上访问的是自己当前线程在内存中的变量,这能确保这些变量是线…

基于鲸鱼算法的极限学习机(ELM)回归预测-附代码

基于鲸鱼算法的极限学习机(ELM)回归预测 文章目录 基于鲸鱼算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于鲸鱼算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要:本文利用鲸鱼算法对极限学习机进行优化,并…

kettle——数据清洗(数据表——>转换——>数据表)

目录 1、表输入 ①点击“新建”选项,新建数据库 ②选择“获取SQL” ③选择表a ④注意:字段只显示了5个,而一共有6个字段,money字段需要手动添加 2、转换 ①打开java 控件,设置变量 3、表输出 ①连接表b ②映…

【Redis7】Redis7 复制(重点:复制原理)

【大家好,我是爱干饭的猿,本文重点介绍Redis7 复制。 后续会继续分享Redis7和其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章:《【Redis7】Redis7 事务&管道&…

Git入门指南(手把手教学)

Git入门指南 一、什么是Git二、Git的安装下载三、git的简单实践1.创建git仓库2.Windows上生成公钥以绑定GitHub仓库3.写一个Helloworld 四、帮助学习的网站 一、什么是Git Git是一种分布式版本控制系统,它是由Linus Torvalds为了管理Linux内核开发而开发的。与中心化…

项目第四天

解决了路变墙 墙变路的问题 void onechange(ExMessage* msg) {if (msg->message WM_LBUTTONDOWN && msg->x > 50 && msg->x < 410 && msg->y > 50 && msg->y < 410){//printf("鼠标位置&#xff1a;x&#…

Vue.js中class与style的增强绑定

目录 一、v-bind绑定class属性 &#xff08;1&#xff09;绑定class样式&#xff0c;字符串写法 &#xff08;2&#xff09;绑定class样式&#xff0c;数组写法 &#xff08;3&#xff09;绑定class样式&#xff0c;对象写法 二、v-bind绑定内联样式style &#xff08;1&…

【CSS3】CSS3 属性选择器 ( CSS3 简介 | 属性选择器 | 属性选择器权重 )

文章目录 一、CSS3 简介二、CSS3 属性选择器权重三、CSS3 属性选择器 一、CSS3 简介 CSS3 是在 CSS2 基础上进行扩展后的样式 ; 在 移动端 对 CSS3 的支持 要比 PC 端支持的更好 , 建议在移动端开发时 , 多使用 CSS3 ; PC 端老版本浏览器不支持 CSS3 , 尤其是 IE 9 及以下的版…

【Linux 裸机篇(五)】I.MX6ULL BSP工程管理下的 Makefile编写、链接脚本

目录 一、BSP 工程二、Makefile三、链接脚本 一、BSP 工程 文件夹描述bsp存放驱动文件imx6ul存放跟芯片有关的文件&#xff0c;比如 NXP 官方的 SDK库文件obj存放编译生成的.o 文件project存放 start.S 和 main.c 文件&#xff0c;也就是应用文件 二、Makefile 1 CROSS_COMPI…

ESP32设备驱动-BMA400加速度传感器驱动

BMA400加速度传感器驱动 文章目录 BMA400加速度传感器驱动1、BMA400介绍2、硬件准备3、软件准备4、驱动实现1、BMA400介绍 BMA400 是第一款真正的超低功耗加速度传感器,不会影响性能。 BMA400 具有 12 位数字分辨率、连续测量和定义的可选带宽以及超低功耗,允许对三个垂直轴…

带有时钟使能和同步清零的D触发器

每个 Slice 有 8 个 FF 。四个可以配置为 D 型触发器或电平敏感锁存器&#xff0c;另外四个只能配置为 D 型触发器&#xff0c;但是需要记得是&#xff1a;当原来的四个 FF 配置为锁存器时&#xff0c;不能使用这四个 FF 。 &#xff08;1&#xff09;FDCE 简介 带有时钟使能…

【grpc01】入门

目录 背景 单体架构 微服务架构 代码冗余问题 服务之间调用 grpc protobuf protoc protoc-gen-go 背景 单体架构 有一些致命缺点&#xff1a; 一旦某个服务宕机&#xff0c;会引起整个应用不可用&#xff0c;隔离性差只能整体应用进行伸缩&#xff0c;浪费资源&#…

【Java基础】迷宫问题的Java代码实现

迷宫问题通常是指在给定的迷宫中&#xff0c;找到从起点到终点的路径的问题。迷宫通常由障碍物和自由空间组成&#xff0c;其中障碍物是不可穿越的区域&#xff0c;自由空间可以穿越。解决迷宫问题的方法有很多种&#xff0c;本文使用递归算法来解决迷宫问题。 一、使用递归算法…

MATLAB简单图形绘制(五)

目录 实验目的 实验内容 实验目的 1&#xff09;掌握MATLAB图形绘制的基本原理和方法&#xff1b; 2&#xff09;熟悉和了解MATLAB图形绘制程序编辑的基本指令&#xff1b; 3&#xff09;掌握利用MATLAB图形编辑窗口编辑和修改图形界面&#xff0c;并添加图形的各种标注&…

人工智能技术在软件开发中的应用

人工智能技术的不断发展和成熟&#xff0c;使得它在软件开发中的应用越来越广泛。人工智能技术的应用可以帮助软件开发人员提高效率、降低成本、增强软件的功能性和可靠性。在本文中&#xff0c;我们将探讨人工智能技术在软件开发中的应用&#xff0c;并且提供一些实际案例&…

借助高性能计算的发展十大网络趋势

当今的网络支持复杂企业IT环境中的大量工作负载。而借助高性能计算(HPC)和人工智能/深度学习的应用程序&#xff0c;企业可以满足对更快计算周期、更高数据传输率和出色连接性日益增长的需求。 当今的网络支持复杂企业IT环境中的大量工作负载。而借助高性能计算(HPC)和人工智能…

比spire.pdf速度更快:EVO PDF Print Crack

适用于 .NET 的 EVO PDF 打印 EVO PDF Print 可用于任何类型的 .NET 应用程序&#xff0c;以静默打印 PDF 文档而不显示任何打印对话框。它可以集成到任何 .NET 应用程序中&#xff0c;包括 ASP.NET 网站和桌面应用程序&#xff0c;以便为您的应用程序添加 PDF 打印功能。您可以…

机器学习:基于心脏病数据集的XGBoost分类预测

目录 一、简介 原理&#xff1a; 二、实战演练 1.数据准备 2.数据读取/载入 3.数据预处理 4.可视化处理 5.对离散变量进行编码 6.模型训练与预测 7.特征选择 8.通过调整参数获得更好的效果 核心参数调优 网格调参法 一、简介 XGBoost&#xff08;eXtreme Gradient B…