当前位置: 首页 > news >正文

Java原生JDBC概览

Java原生JDBC概览

一、是什么?

JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。

Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现对数据库的访问。

例如访问MySQL,那么必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是由数据库厂商提供的。MySQL的JDBC驱动由Oracle提供。

访问某个具体的数据库只需要引入该厂商提供的JDBC驱动。这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的JDBC驱动。

二、怎么用?

所谓JDBC驱动,其实就是一个第三方jar包,我们直接添加一个Maven依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version><scope>runtime</scope>
</dependency>

2.1 连接数据库

首先得先连接到数据库。打开一个Connection时,需要准备URL、用户名和口令。

URL是由数据库厂商指定的格式,MySQL的URL格式是:

jdbc:mysql://<hostname>:<port>/<db>?key1=value1&key2=value2

假设数据库运行在本机localhost,端口使用标准的3306,数据库名称是learnjdbc,那么URL如下:

jdbc:mysql://localhost:3306/learnjdbc?useSSL=false&characterEncoding=utf8

要获取数据库连接,使用如下代码:

// JDBC连接的URL, 不同数据库有不同的格式:
String JDBC_URL = "jdbc:mysql://localhost:3306/test";
String JDBC_USER = "root";
String JDBC_PASSWORD = "password";
// 获取连接:
Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);// TODO: 访问数据库// 关闭连接:
conn.close();

2.2 访问数据库操作

经典的数据库操作CRUD:创建、读取、更新和删除。

(1)创建Sql语句

User login(String name, String pass) {...String sql = "SELECT * FROM user WHERE login=? AND pass=?"; //?是占位符PreparedStatement ps = conn.prepareStatement(sql);ps.setObject(1, name); //索引从1开始ps.setObject(2, pass);...
}

(2)执行Sql语句

ResultSet rs = ps.executeQuery();

(3)获取返回结果

  while (rs.next()) {long id = rs.getLong("id");long grade = rs.getLong("grade");String name = rs.getString("name");String gender = rs.getString("gender");}

完整代码:

try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) {try (PreparedStatement ps = conn.prepareStatement("SELECT id, grade, name, gender FROM students WHERE gender=? AND grade=?")) {ps.setObject(1, "M"); // 注意:索引从1开始ps.setObject(2, 3);try (ResultSet rs = ps.executeQuery()) {while (rs.next()) {long id = rs.getLong("id");long grade = rs.getLong("grade");String name = rs.getString("name");String gender = rs.getString("gender");}}}
}

相关文章:

  • 快速排序算法备考
  • [个人笔记] 记录CentOS7构建docker-ce的过程
  • 数据持久化第六课-ASP.NET运行机制
  • 云上聚智——移动云云服务器进行后端的搭建及部署
  • 整理好了!2024年最常见 20 道 Redis面试题(九)
  • keepalived交叉编译
  • yarn dev启动项目时遇到的问题
  • 【实战JVM】-基础篇-02-类的声明周期-加载器
  • 春秋CVE-2022-23906
  • ❤职场小心得❤
  • 上交提出TrustGAIN,提出6G网络中可信AIGC新模式!
  • php质量工具系列之paslm
  • 工博科技联手伯尼纳,共谋食品包装外贸行业新市场,助力全球市场拓展!
  • 质量源于设计:QbD培训引领企业产品质量飞跃!
  • 数据库编程
  • 【前端学习】-粗谈选择器
  • socket.io+express实现聊天室的思考(三)
  • 创建一个Struts2项目maven 方式
  • 代理模式
  • 好的网址,关于.net 4.0 ,vs 2010
  • 计算机常识 - 收藏集 - 掘金
  • 记一次和乔布斯合作最难忘的经历
  • 检测对象或数组
  • 如何胜任知名企业的商业数据分析师?
  • 深入 Nginx 之配置篇
  • 数据结构java版之冒泡排序及优化
  • 微信小程序:实现悬浮返回和分享按钮
  • 微信小程序--------语音识别(前端自己也能玩)
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • C# - 为值类型重定义相等性
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​zookeeper集群配置与启动
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ‌内网穿透技术‌总结
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #考研#计算机文化知识1(局域网及网络互联)
  • #预处理和函数的对比以及条件编译
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计高校学生选课系统
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (四)Android布局类型(线性布局LinearLayout)
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一) storm的集群安装与配置
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)我也是一只IT小小鸟
  • .gitignore