当前位置: 首页 > 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");}}}
}
http://www.lryc.cn/news/354871.html

相关文章:

  • C# 跨线程访问UI组件,serialPort1串口接收数据
  • D - New Friends(AtCoder Beginner Contest 350)
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(2)
  • Web组态可视化编辑器 快速绘制组态图
  • 怎样在网上赚点零花钱?推荐十个正规的赚钱兼职平台
  • 手动操作很麻烦?试试这个自动加好友神器吧!
  • 金额转大写
  • vue的axios配置超时时间;单个接口配置响应时间
  • leetcode-盛水最多的容器-109
  • VMware ESXi中安装Proxmox VE
  • Java(其十二)--集合·初级
  • 疯狂“造人”!美国两党共推新法案,5年培养100万AI及量子人才
  • Python 文件操作指南:使用 open 和 with open 实现高效读写
  • FasterNet代码阅读
  • Rust开源Web框架Salvo源码编译
  • 基于Java+SpringBoot+Mybaties-plus+Vue+elememt + uniapp 新闻资讯 的设计与实现
  • TCP—三次握手和四次挥手
  • 基于UDP的网络聊天室
  • 数组-两个升序数组中位数
  • 每日一题《leetcode--116.填充每个结点的下一个右侧结点》
  • 【MySQL精通之路】InnoDB(6)-磁盘结构(5)-Redolog
  • 【探索自然语言处理:构建一个简单的文本分类器】
  • 概率论统计——大数定律
  • vscode终端命令行前面出现两个conda环境名的问题决解方法
  • “AI黏土人”一夜爆火,图像生成类应用应该如何长期留住用户?
  • 【MySQL精通之路】SQL优化(1)-查询优化(12)-块嵌套循环和批处理Key访问联接
  • SQL使用函数给多个分表添加同一字段
  • OpenAI 再次刷新认知边界:GPT-4 颠覆语音助手市场,流畅度直逼真人互动?
  • UE5 使用外置摄像头进行拍照并保存到本地
  • 【C++】从零开始map与set的封装