JDBC标准实现

news2024/11/15 13:38:41

JDBC是什么

Java Database Connectivity:Java访问数据库的解 决方案

JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些接口。

JDBC希望用相同的方式访问不同的数据库,让具体 的数据库操作与数据库厂商实现无关,从而在不同数 据库之间轻易的进行切换。

JDBC相关类与接口

驱动管理类 DriverManager

连接接口 Connection

语句对象接口 Statement

结果集接口 ResultSet

JDBC工作原理

下载驱动

• 下载对应的数据库的驱动 mysql-connector-java-5.0.4-bin.jar

• 将驱动类加载到项目中 Eclipse: Build Path

使用DriverManager加载驱动类

•  加载驱动类

•  通过Class.forName( )方法(反射) 完成驱动类的注册

Connection接口

• 根据URL连接参数找到与之匹配的Driver对象, 调用其方法获取连接

: Connection只是接口!真正的实现是数据库厂商提供的驱动包 完成的。         jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT

连接字符串          MySQL: jdbc:mysql:// Oracle: jdbc:oracle:thin:@

数据库地址         数据库的地址以及端 口号 localhost:本机IP 3306:MySQL默认 端口号

数据库名        具体要连接数据库服 务器上的哪一个数据库

Statement接口

• Statement用于执行SQL语句

注:不同的SQL语句,要调用不同的方法来执行。

ResultSet接口

•  执行查询SQL语句后返回的结果集,由 ResultSet接口接收。、

•  常用处理方式:遍历/判断是否有结果

• 查询结果存放在ResultSet对象的一系列行中

• ResultSet对象的最初位置在行首

• ResultSet.next()方法用来在行间移动

• ResultSet.getXXX()方法用来取得字段的内容

关闭并释放资源

• 数据库操作执行完毕以后要释放相关资源

• Connection

• Statement

• ResultSet

package com.xn.Connector;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectorTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		//com.mysql.cj.jdbc.Driver
		//1.加载驱动     --反射
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取连接对象
		String url="jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url,user,pwd);
		
		System.out.println(conn);
		
		//3.释放资源
		conn.close();
		
		
	}
}


//添加
package com.xn.Connector;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import com.mysql.cj.xdevapi.Statement;

public class InsertTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		//1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取连接
		String url="jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url,user,pwd);
		
		//3.获取sql执行对象
		java.sql.Statement statm=conn.createStatement();
		
		String sql="insert into student(sname,birthday,ssex,classid)values('迪迦','1888-8-1','男',1)";
		int ret = statm.executeUpdate(sql);
		
		
		//逻辑
		if(ret>0) {
			System.out.println("添加成功");
		}else {
			System.out.println("添加失败");
		}
		
		//4.释放资源
		conn.close();
	}
}


//修改
package com.xn.Connector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

//字符串的修改
public class UpdateTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		Scanner input=new Scanner(System.in);
		//1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取连接
		String url="jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url,user,pwd);
		
		
		//3.获取sql执行对象
		Statement statm=conn.createStatement();
		
		System.out.println("请输入学生编号:");
		String sid=input.next();
		System.out.println("请输入学生名字:");
		String sname=input.next();
		System.out.println("请输入学生生日:");
		String bir=input.next();
		System.out.println("请输入学生性别:");
		String sex=input.next();
		System.out.println("请输入学生新班级编号:");
		String gid=input.next();
				
		
		String sql="update student set sname='"+sname+"',"
				+ "birthday='"+bir+"',ssex='"+sex+"',classid="+gid+" where sid="+sid;
				
		int ret=statm.executeUpdate(sql);
		
		if(ret>0) {
			System.out.println("修改成功");
		}else {
			System.out.println("修改失败");
		}
		
		//4.释放资源
		conn.close();
		
		
		
	}
}


//删除
package com.xn.Connector;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DeleteTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// 1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");

		// 2.获取连接
		String url = "jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT";
		String user = "root";
		String pwd = "123456";
		Connection conn = DriverManager.getConnection(url, user, pwd);

		// 3.获取sql执行对象
		java.sql.Statement statm = conn.createStatement();

		String sql = "delete from student where sid=14";
		int ret = statm.executeUpdate(sql);

		// 逻辑
		if (ret > 0) {
			System.out.println("删除成功");
		} else {
			System.out.println("删除失败");
		}
		// 4.释放资源
		conn.close();

	}
}


//查找
package com.xn.Connector;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class FindTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// 1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");

		// 2.获取连接
		String url = "jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT";
		String user = "root";
		String pwd = "123456";
		Connection conn = DriverManager.getConnection(url, user, pwd);

		// 3.获取sql执行对象
		Statement statm = conn.createStatement();

		String sql = "select * from student";

		ResultSet rs = statm.executeQuery(sql);

		// 测试
		System.out.println(rs);

		// 解析结果集
		while (rs.next()) {
//			int sid = rs.getInt(1);
//			String sname = rs.getString(2);
//			Date bir = rs.getDate(3);
//			String sex = rs.getString(4);
//			int classid = rs.getInt(5);
			
			int sid=rs.getInt("sid");
			String sname = rs.getString("sname");
			Date bir = rs.getDate("birthday");
			String sex = rs.getString("ssex");
			int classid = rs.getInt("classid");
			
			System.out.println(sid + sname + bir + sex + classid);
		}

	}
}



package com.xn.Connector;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class LoginTest {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		// sql 注入
		// 通过一些特殊的符号 让原本的sql失效,让sql执行新的sql指令
		// 1. 正则表达式
		// 2. JDBC 
		
		
		Scanner input = new Scanner(System.in);
		
		// 1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2. 获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT", "root", "123456");

		// 3. sql执行对象
//		Statement statm = conn.createStatement();
		
		System.out.println("请输入账号");
		String username = input.nextLine();
		System.out.println("请输入密码");
		String userpwd = input.nextLine();
		
		// jdbc 操作数据库的index 都是从1开始
//		PreparedStatement 防止sql注入
		// 1. 预处理sql语句
		String sql = "select * from login where lname=? and lpwd=?";
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
		
		//  2. ? 变成真正的参数
		prepareStatement.setObject(1, username);
		prepareStatement.setObject(2, userpwd);
		
		// 3. 执行
		ResultSet rs = prepareStatement.executeQuery();
	
		
//		ResultSet rs = statm.executeQuery(sql);
		
		if(rs.next()) {
			int lid = rs.getInt("lid");
			String lrname = rs.getString("lrname");
			String lsex = rs.getString("lsex");
			String laddr = rs.getString("laddr");
			System.out.println(lid+lrname+lsex+laddr);
		}else {
			System.out.println("登录失败,连个账号密码都记不住,你能干啥");
		}
		
		// 释放资源
		rs.close();
//		statm.close();
		prepareStatement.close();
		conn.close();
	}

}

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

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

相关文章

Nacos 2.x 新增 grpc 端口,Nginx 需要配置TCP端口转发的注意事项

Nacos 2.x 开始,最大的变化就是端口。在默认主端口 8848 之外又新增了三个端口,新增端口是在配置的主端口 server.port 的基础上,进行一定偏移量自动生成。 8848(主端口,默认8848)web页面端口及相关http接口…

医院等保解决方案有哪些?用哪些软件可以加强等级保护?

在医疗领域,信息系统的安全直接关系到患者的隐私保护、医院的正常运营乃至社会的稳定。医院信息系统面临着越来越多的安全挑战。 为了确保患者信息的安全与隐私保护,医院需要采取有效的等保(等级保护)措施。那么,医院…

数据恢复教程:如何从硬盘、SD存储卡、数码相机中恢复误删除数据。

您正在摆弄 Android 设备。突然,您意外删除了一张或多张图片。不用担心,您总能找到一款价格实惠的数据恢复应用。这款先进的软件可帮助 Android 用户从硬盘、安全数字 (SD) 或存储卡以及数码相机中恢复已删除的数据。 Android 上数据被删除的主要原因 在…

以FastGPT为例提升Rag知识库应用中的检索召回命中率

提升Rag知识库应用中的检索召回命中率 在构建Rag(Retrieval-Augmented Generation)知识库应用时,检索召回知识片段的命中率是至关重要的。高效、准确的检索机制是确保AI系统能够精准响应用户查询的基础。当前,FastGPT主要采用三种…

四步实现网站HTTPS访问

随着网络安全的重要性日益凸显,HTTPS(超文本传输安全协议)已成为现代网站的标准配置。HTTPS协议作为HTTP协议的安全版本,通过SSL协议加密数据传输,不仅能保护用户数据的安全,还能提升搜索引擎排名&#xff…

一文带你搞懂C++友元和类型转换

6. C友元 在C中,一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。…

【ai】Easy-RAG 6:安装bge-reranker-large、 成功部署并通过frpc访问

作者用到了funasrwhisper还有RAG的rerank模型这里用的是bge-reranker-large , 要从 https://huggingface.co/BAAI/bge-reranker-large 下载。AttributeError: module ‘numba’ has no attribute ‘jit’ 【ai】Easy-RAG 4: 修复依赖项:numpy numba omegaconf 等作者的地址是…

英特尔宣布针对对Llama 3.1进行优化 以提升所有产品的性能

日前Meta正式发布了Llama 3.1开源大模型,以其庞大的参数量和卓越性能,首次在多项基准测试中击败了GPT-4o等业界领先的闭源模型。允许开发者自由地进行微调、蒸馏,甚至在任何地方部署,这种开放性为AI技术的普及和创新提供了无限可能…

关于promise的一些例题(运行步骤详细说明)

关于promise的一些例题(详细说明) 基本例题 // 直接运行 输出 1 2 const promise new Promise((resolve, reject) > {console.log(1);resolve();console.log(2); });// then后面放入微队列 promise.then(() > {console.log(3); });// 输出4 之后没有代码了所以运行为队…

秋招突击——7/23——百度提前批面试准备和正式面试

文章目录 引言一面准备面试预演一1、讲一下hashcode()和equals()关系2、equals()和有什么区别3、讲一下重载和重写的区别4、讲一下深拷贝、浅拷贝的区别5、讲一下Java异常的基类,运行时异常举几个例子,什么情况下会出现?6、讲一下Java中线程的…

【管控业财一体化】

1. 引言 大型集团在现代企业管理中扮演着举足轻重的角色,其管控业财一体化解决方案是实现企业高效运营的关键。随着数字化转型的加速,业财一体化不再局限于财务与业务流程的简单融合,而是向着更深层次的数据驱动、智能化决策和价值创造方向发…

光猫设置桥接 路由器pppoe拨号 设置正常访问光猫 (openwrt)

网络信息展示 光猫桥接很简单吧,就不说了。先来列出修改前的网络接口和网络信息。 光猫192.168.1.1,openwrt 10.0.0.0/8 初始配置 需要记录的信息:WAN的网络设备(eth1),光猫的IP(192.168.1.1&am…

RV1126 Linux 系统,接外设,时好时坏(一)应该从哪些方面排查问题

在 Linux 系统中接外设时,遇到“时好时坏”的问题,可能是由多种因素引起的。以下是一些排查问题的建议。 1. 硬件方面的排查 1.1 连接检查 物理连接: 确保外设与主板之间的连接良好,检查插头、插座及线缆是否牢固。引脚配置: 确认设备树中引脚的配置是否正确,尤其是引脚…

linux modetest常用命令

1 通过help有哪些参数 130|:/ # modetest -h usage: modetest [-acDdefMPpsCvrw]Query options:-c list connectors-e list encoders-f list framebuffers-p list CRTCs and planes (pipes)Test options:-P <plane_id><crtc_id>:<w>x&l…

Web开发:ASP.NET CORE中前端使用Ajax定时获取后端数据

一、低难度&#xff08;刷新a标签&#xff09; 1、需求 给a标签每15s刷新一次&#xff0c;显示最新的时间&#xff08;时间必须由后端获取&#xff09; 应该如何操作呢 2、代码 后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Mi…

go语言开发Prometheus Exporter(DM数据库)

一、介绍 源码步骤基于dameng_exporter源码讲解&#xff0c;看完本篇文章可以直接进行二次开发。 dameng exporter的开源地址&#xff1a;https://github.com/gy297879328/dameng_exporter&#xff08;可直接对接prometheusgrafana 提供表盘&#xff09; 开发一个exporter 其…

智谱OpenDay“大有可玩”:30秒将任意文字生成视频

Sora毫无疑问带来AI大模型的全新玩法&#xff0c;大模型可基于任意文字生成视频&#xff0c;这也是这个“大家庭”若干努力&#xff08;包括Runway的Gen系列、微软的Nuwa、Meta的Emu、谷歌的Phenaki/VideoPoet、CogVideo等&#xff09;的一个全新高度。 7月26日&#xff0c;这…

数据结构(5.3_4)——线索二叉树的概念

普通二叉树找某结点前驱和后继的方法 中序线索二叉树 n个结点的二叉树&#xff0c;有n1个空链域!可用来记录前驱&#xff0c;后继的信息 中序线索二叉树的存储结构 //线索二叉树结点 typedef struct ThreadNode {ElemType data;struct BiTNode* lchild, * rchild;int ltag,…

Git、Gitlab以及分支管理

分布式版本控制系统 一、Git概述 Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更。它由Linus torvalds创建的&#xff0c;最初被设计用于Linux内核的开发。Git 允许开发人员跟踪和管理代码的版本&#xff0c;并且可以在不同的开发人员之间进行协作。 Githu…

【学习笔记】解决Serial Communication Library编译问题

【学习笔记】解决编译 Serial Communication Library 时的 Catkin 依赖问题 Serial Communication Library 是一个用 C 编写的用于连接类似 rs-232 串口的跨平台库。它提供了一个现代的 C 接口&#xff0c;它的工作流程设计在外观和感觉上与 PySerial 相似&#xff0c;但串口速…