JDBC操作

2023-11-16

目录

一、实现JDBC步骤

1.注册驱动

 1.1导入驱动包

1.1异常处理

2.创建连接

2.1导包

2.2处理异常

3.得到执行sql语句的Statement对象

3.1修改数据操作

 3.2删除数据操作

3.3插入数据操作

3.4查询数据操作 

4.执行sql语句,并返回结果,并处理结果

5.关闭资源

6.完整代码

6.1修改数据操作代码

6.2查询数据操作代码

二、JDBC封装函数

1.建立两个类(工具类、测试类)

2.全局变量声明

3.初始化数据库链接函数

4.修改数据函数

5.查询数据函数

6.关闭资源函数

7.测试代码

7.1修改数据测试代码

7.2查询数据测试代码


一、实现JDBC步骤

1.注册驱动

 1.1导入驱动包

1.1异常处理

更正一下是 Class.forName("com.mysql.jdbc.Driver"),上面代码写错了。 

//注册驱动(加载驱动类,5.0版本)
try {
    Class.forName("com.mysql.jdbc.Driver");
	System.out.println("加载驱动成功");
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
	System.out.println("加载驱动失败");
	e.printStackTrace();
}

2.创建连接

2.1导包

2.2处理异常

//创建数据库连接
String url = "jdbc:mysql://127.0.0.1:3306/score";
//jdbc:mysql: //数据库主机地址:端口号/数据库名
String user="root"; //数据库用户名
String password="268875"; //数据库密码
Connection connection = DriverManager.getConnection(url,user,password);			
System.out.println("获取数据库连接成功");

3.得到执行sql语句的Statement对象

3.1修改数据操作

//修改数据操作
String sql = "update student SET Sage=? where Sid=?";
PreparedStatement pre = connection.prepareStatement(sql);
//prepareStatement--预编译SQL语句执行对象
//把数据设置到占位符位置
pre.setInt(1, 39);
//向sql语句中第一个位置设置数据
pre.setString(2,"100010");
//向sql语句中第二个位置设置数据

 3.2删除数据操作

//删除数据操作
String sql="delete from student where Sid=?";
pre = connection.prepareStatement(sql);
pre.setString(1, "100020");

3.3插入数据操作

//插入数据操作
String sql="insert into student values(?,?,?,?,?)";
//问号为占位符,使用占位符主要为了避免sql注入
pre = connection.prepareStatement(sql);
pre.setString(1,"100010");
pre.setString(2,"黎明");
pre.setInt(3,30);
pre.setString(4,"女");
pre.setString(5,"手机游戏");

3.4查询数据操作 

//查询数据操作
String sql="select * from student";
pre = connection.prepareStatement (sql);
ResultSet set = pre.executeQuery();
//查询,返回的是结果集,类似于一张虚拟表
//把虚拟表中的数据取出来,即解析结果集
while(set.next()){
/* 调用next()方法时,
 * 游标向下移动一行,
 * 判断是否存在数据,
 * 并把数据放入结果集中,
 * 返回值为布尔类型。
 */
	/* 通过数所在位置去获取数据,这个方法不可取
	 * System.out.println(set.getString(1));
	 * System.out.println(set.getString(2));
	 * System.out.println(set.getInt(3));
	 * System.out.println(set.getString(4));
	 * System.out.println(set.getString(5));
	 */
	System.out.println(set.getString("Sid"));
	System.out.println(set.getString("Sname"));
	System.out.println(set.getInt("Sage"));
	System.out.println(set.getString("Ssex"));
	System.out.println(set.getString("Szhuanye"));
}

4.执行sql语句,并返回结果,并处理结果

/* 执行sql语句
 * 对于jdbc来说操作数据库只有两种操作
 * 1.修改(增,删,改);2.查询(查)
 */
int row = pre.executeUpdate();
//修改,返回影响数据库的行数
System.out.println(row);
if(row>0){
    System.out.println("修改数据成功");
}else{
	System.out.println("修改数据失败");
}

5.关闭资源

finally{
//关闭资源,finally无论代码是否出现异常都会被执行
	try {
		if(connection!=null)
			connection.close(); //关闭数据库链接
		if(pre!=null)
			pre.close(); //关闭语句执行对象
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
}

6.完整代码

对于jdbc来说操作数据库只有两种操作:
1.修改(增,删,改);

2.查询(查)。

6.1修改数据操作代码

package java_projects;

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

public class JDBCTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//设置成全局变量,便于后面直接关闭资源
		Connection connection = null;
		PreparedStatement pre = null;
		
		//注册驱动(加载驱动类,5.0版本)
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("加载驱动成功");
			
			//创建数据库连接
			String url = "jdbc:mysql://127.0.0.1:3306/score";
			//jdbc:mysql://数据库主机地址:端口号/数据库名
			String user="root";	//数据库用户名
			String password="268875"; //数据库密码
			connection = DriverManager.getConnection(url,user,password);			
			System.out.println("获取数据库连接成功");
			
//			//通过数据库链接对象获取sql语句执行对象Statement
//			//修改数据
//			String sql = "update student SET Sage=? where Sid=?";
//			pre = connection.prepareStatement(sql);
//			//prepareStatement--预编译SQL语句执行对象
//			//把数据设置到占位符位置
//			pre.setInt(1, 39);
//			//向sql语句中第一个位置设置数据
//			pre.setString(2,"100010");
//			//向sql语句中第二个位置设置数据
			
//			//删除数据操作
//			String sql="delete from student where Sid=?";
//			pre = connection.prepareStatement(sql);
//			pre.setString(1, "100020");
			
			//插入数据操作
			String sql="insert into student values(?,?,?,?,?)";
			//问号为占位符,使用占位符主要为了避免sql注入
			pre = connection.prepareStatement(sql);
			pre.setString(1,"100010");
			pre.setString(2,"黎明");
			pre.setInt(3,30);
			pre.setString(4,"女");
			pre.setString(5,"手机游戏");
			
			int row = pre.executeUpdate();
			//修改,返回影响数据库的行数
			System.out.println(row);
			if(row>0){
				System.out.println("修改数据成功");
			}else{
				System.out.println("修改数据失败");
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("加载驱动失败");
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("获取数据库连接失败");
			e.printStackTrace();
		}finally{
		//关闭资源,finally无论代码是否出现异常都会被执行
			try {
				if(connection!=null)
					connection.close(); //关闭数据库链接
				if(pre!=null)
					pre.close(); //关闭语句执行对象
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
	}
}

6.2查询数据操作代码

package java_projects;

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

public class JDBCTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//设置成全局变量,便于后面直接关闭资源
		Connection connection = null;
		PreparedStatement pre = null;
		ResultSet set = null;

		//注册驱动(加载驱动类,5.0版本)
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("加载驱动成功");
			
			//创建数据库连接
			String url = "jdbc:mysql://127.0.0.1:3306/score";
			//jdbc:mysql://数据库主机地址:端口号/数据库名
			String user="root";	//数据库用户名
			String password="268875";	//数据库密码
			connection = DriverManager.getConnection(url,user,password);			
			System.out.println("获取数据库连接成功");
			
			//查询数据操作
			String sql="select * from student";
			pre = connection.prepareStatement (sql);
			set = pre.executeQuery();
			//查询,返回的是结果集,类似于一张虚拟表
			//把虚拟表中的数据取出来,即解析结果集
			while(set.next()){
			/* 调用next()方法时
			 * 游标向下移动一行
			 * 判断是否存在数据
			 * 并把数据放入结果集中
			 * 返回值为布尔类型
			 */
				/* 通过数所在位置去获取数据,这个方法不可取
				 * System.out.println(set.getString(1));
				 * System.out.println(set.getString(2));
				 * System.out.println(set.getInt(3));
				 * System.out.println(set.getString(4));
				 * System.out.println(set.getString(5));
				 */
				System.out.println(set.getString("Sid"));
				System.out.println(set.getString("Sname"));
				System.out.println(set.getInt("Sage"));
				System.out.println(set.getString("Ssex"));
				System.out.println(set.getString("Szhuanye"));
			}
			
			/* 执行sql语句
			 * 对于jdbc来说操作数据库只有两种操作
			 * 1.修改(增,删,改);2.查询(查)
			 */

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("加载驱动失败");
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("获取数据库连接失败");
			e.printStackTrace();
		}finally{
		//关闭资源,finally无论代码是否出现异常都会被执行
			try {
				if(connection!=null)
					connection.close(); //关闭数据库链接
				if(pre!=null)
					pre.close(); //关闭语句执行对象
				if(set != null)
					set.close(); //关闭结果集资源
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}
	}
}

二、JDBC封装函数

1.建立两个类(工具类、测试类)

2.全局变量声明

private	static	Connection connection;
private	static	PreparedStatement pre;
private	static	ResultSet set;
private	static	String url="jdbc:mysql://127.0.0.1:3306/score";
private	static	String user="root";
private	static	String password="268875";
private	static	String driver="com.mysql.jdbc.Driver";

3.初始化数据库链接函数

public static void initConnection(){
	try {
		Class.forName(driver);
		connection = DriverManager.getConnection(url, user, password);
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

4.修改数据函数

/**
 * 修改数据操作(增、删、改)
 * @param o 数组第一个位置放sql语句,后面的所有位置放sql语句中对应的值
 * @return 影响的行数
 */
public static int update(Object ... o) {
    /* Object ... o
	 * 该写法叫可变参数
	 * 可以传递0到无限个object参数进来
	 * 把可变参数当成数组使用即可
	 */
	try {
		pre=connection.prepareStatement(o[0].toString());
		for(int i=1;i < o.length;i ++){
			pre.setObject(i, o[i]); 
			//不知道设置什么类型,直接使用Object
		}
		return pre.executeUpdate();			
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally{
		close(); //关闭资源函数
	}
	return 0;
}
	

5.查询数据函数

	/**
	 * 查询操作
	 * @param o 数组第一个位置放sql语句,后面的所有位置放sql语句中对应的值
	 * @return 返回结果集
	 */
	public static ResultSet select(Object ... o){
		initConnection();
		try {
			pre=connection.prepareStatement(o[0].toString());
			for(int i = 1;i < o.length;i ++){
				pre.setObject(i, o[i]);
			}
			set = pre.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}//结果集资源不能被关闭,所以没有finally语句
		return set;
	}

6.关闭资源函数

public static void close(){
	try {
		if(connection!=null)
			connection.close(); //关闭数据库链接
		if(pre!=null)
			pre.close(); //关闭语句执行对象
		if(set!=null)
			set.close(); //关闭结果集资源
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

7.测试代码

7.1修改数据测试代码

package java_projects;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JDBCTool.initConnection();
		JDBCTool.update("insert into student values(?,?,?,?,?)","100020","黑暗",50,"男","电脑游戏");
//		int row=JDBCTool.update("insert into student values(?,?,?,?,?)","100020","黑暗",50,"男","电脑游戏");
//		if(row>0){
//			System.out.println("修改数据成功");
//		}else{
//			System.out.println("修改数据失败");
//		}
	}
}

7.2查询数据测试代码

package java_projects;

import java.sql.ResultSet;
import java.sql.SQLException;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JDBCTool.initConnection();
		ResultSet set = JDBCTool.select("select * from student");
		try {
			while(set.next()){
				System.out.println(set.getString("Sid"));
				System.out.println(set.getString("Sname"));
				System.out.println(set.getInt("Sage"));
				System.out.println(set.getString("Ssex"));
				System.out.println(set.getString("Szhuanye"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			JDBCTool.close();
			/*结果集必须在使用完之后再关闭
			 * 在查询数据函数中不能调用关闭资源函数
			 * 因为查询数据函数返回的是结果集
			 */
		}
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC操作 的相关文章

随机推荐

  • java list 写入txt_java 如何用io流 读取list集合里我需要的内容,然后写入到.txt文件里?各位大侠请赐教...

    展开全部 import org junit Test import java io import java util ArrayList import java util List public class TestIo 路径 privat
  • 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布(3元获取腾讯云服务器带小程序支持系统)

    很多朋友都认为微信小程序申请 部署 发布很难 需要很长时间 实际上 微信和腾讯云同是腾讯产品 已经提供了10分钟 根据准备资源情况 已完成小程序申请认证 完成小程序开发 部署 发布的方式 当然 实现的是基础功能 但是 可以给学习者很便捷的体
  • ios接入GameCenter登录

    iOS接入GameCenter登录很简单 首先 在target gt Capabilities中打开GameCenter配置 这里的内购 In App Purchase 是因为我需要接内购的SDK 所以我把这个 In App Purchas
  • C++ STL基本容器比较

    摘自 http blog chinaunix net u2 75321 showart 1144742 html 在STL中基本容器有 string vector list deque set map set 和map都是无序的保存元素 只
  • 在vue中使用高德地图的上浮下钻—最简单明了的方法(无需后台接口渲染文字marker)

    在vue中使用高德地图的上浮下钻 最简单明了的方法 无需后台接口渲染文字marker 第一步 安装vue amap npm i vue amap S 第二步 配置main js import VueAMap from vue amap Vu
  • QT之鼠标点击事件学习

    最近在学习点击鼠标事件 在这分享给大家 window h中的配置 ifndef MAINWINDOW H define MAINWINDOW H include
  • Linux如何查看显存

    以下内容由参看资料总结而来 若有不对 望指出 用ctrl alt t打开终端 输入命令 lspci 得到如下 部分 00 1f 6 Signal processing controller Intel Corporation 5 Serie
  • AI相关站点

    人工智能学习网站 产品经理的人工智能学习库 https easyai tech 大白智能 https www jiangdabai com API网站 极速数据 https www jisuapi com api Kate API http
  • Pandas删除某一列的方法

    1 del df columns 改变原始数据 2 df drop columns axis 1 删除不改表原始数据 可以通过重新赋值的方式赋值该数据 3 df drop columns axis 1 inplace True 改变原始数据
  • 怎样将cad布局导出来_cad布局导出模型(CAD 布局图怎么转换成模型图)

    请教大神cad布局转模型exportlayout命令无法生成新 用高版本CAD打开需要转的文件 然后用recover命令 输入完命令会提示打开文件 再次选择第一次 需要转换的 文件 此时会从新打开一个新文件 在新文件中右键模型选项卡点击里面
  • 用python编写一个更好看好用的日志库

    相信现在很多做自动化测试 开发 一般用的都是python的logging来记录日志 但是 logging确实不是很好看 只有一个红色的 在控制台中也不好分辨 那能不能自己写一个好看点的呢 我已经写好一个了 需要的可以直接下载安装试试 下面来
  • RabbitMQ图文详解

    重新整理了涉及资料的一些语言描述 排版而使用了自己的描述 对一些地方做了补充说明 比如解释专有名词 类比说明 对比说明 注意事项 提升了总结归纳性 尽可能在每个知识点上都使用一句话 关键词概括 更注重在实际上怎么应用 提出并回答了一些问题
  • C++ 函数重载(overroad) 覆盖(override) 隐藏(hide) 的区别

    C 函数重载 overroad 覆盖 override 隐藏 hide 的区别 原文转自 http blog chinaunix net u 15921 showart 227111 html 成员函数被重载的特征 1 相同的范围 在同一个
  • 2020年数学建模国赛C题题目和解题思路

    2020年数学建模国赛C题题目 在实际中 由于中小微企业规模相对较小 也缺少抵押资产 因此银行通常是依据信贷政策 企业的交易票据信息和上下游企业的影响力 向实力强 供求关系稳定的企业提供贷款 并可以对信誉高 信贷风险小的企业给予利率优惠 银
  • 安全防御——防火墙一

    安全防御 防火墙一 1 什么是防火墙 2 互联网为什么会出现防火墙 3 状态防火墙工作原理 4 防火墙如何处理双通道协议 5 防火墙如何处理nat 6 你知道哪些防火墙 以及防火墙的技术分类 防火墙种类 1 硬件防火墙 2 软件防火墙 个人
  • Qt入门(12)——Qt国际化

    应用的国际化就是使应用成为能被非本国的人使用的过程 有的情况下 国际化很简单 例如 使一个US应用可被Australian或者British用户理解 工作可能少于几个拼写修正 但是使一个US应用可以被Japanese用户使用 或者一个Kor
  • React 在componentDidMount使用 echarts,样式未加载导致Echart自适应div出错

    只需要修改componentDidMount中加入setTimeout gt echarts代码 import React Component from react import Main css 引入 ECharts 主模块 ts ign
  • 创建聚集索引

    一 ibuf init at db start Creates the insert buffer data structure at a database startup and initializes the data structur
  • 深度学习(十九)——FCN, SegNet, DeconvNet, DeepLab, ENet, GCN

    前DL时代的语义分割 续 Grab cut Grab cut是微软剑桥研究院于2004年提出的著名交互式图像语义分割方法 与N cut一样 grab cut同样也是基于图划分 不过grab cut是其改进版本 可以看作迭代式的语义分割算法
  • JDBC操作

    目录 一 实现JDBC步骤 1 注册驱动 1 1导入驱动包 1 1异常处理 2 创建连接 2 1导包 2 2处理异常 3 得到执行sql语句的Statement对象 3 1修改数据操作 3 2删除数据操作 3 3插入数据操作 3 4查询数据