IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 猿创征文|JDBC操作数据库 -> 正文阅读

[大数据]猿创征文|JDBC操作数据库

目录

如何操作数据库?

实际开发中如何操作数据库?

JDBC(Java Database Connectivity)

综合案例:增加、删除、修改

ResultSet(结果集)

综合案例:查询

JDBC常见异常

总结


如何操作数据库?

1.使用DOS命令窗口,输入“mysql -ulocalhost -u数据库用户名 -p数据库密码”命令连接数据库,编写SQL语句,回车运行,查看操作结果。

2.使用MySQL数据库自带的命令窗口,输入数据库密码连接数据库,编写SQL语句,回车运行,查看操作结果

3.使用数据库连接软件(SQLyog)连接数据库,通过图形化界面或者在查询编辑器中编写SQL语句,运行SQL语句查看操作结果。

实际开发中如何操作数据库?

在实际开发中,当用户的数据发生变化时,不会也不可能通过客户端连接数据库去操作SQL语句,因为在实际开发中,数据的操作量很大,如果使用客户端操作数据库,无法保证SQL语句的正确性和执行效率。因此使用JDBC来操作数据库。

JDBC(Java Database Connectivity)

JDBC的概念

????????JDBC(Java DataBase Connectivity)Java连接数据库的规范(标准),可以使用Java语言连接数据库,从而对数据进行增删改查(CURD)操作。

JDBC核心思想

Java中定义了访问数据库的接口,可以为多种关系型数据库提供统一的访问方式。由数据库厂商提供驱动实现类(Driver数据库驱动)。不同的厂商提供不同的驱动包。

MySQL数据库驱动

mysql-connector-java-5.1.x 适用于5.x版本

mysql-connector-java-8.1.x 适用于8.x版本

JDBC API

JDBC是由多个接口和类进行功能实现的。

类型权限定名功能
classjava.sql.DriverManager管理多个数据库驱动类,提供了获取数据库连接的方法
interfacejava.sql.Connection代表一个数据库连接(当connection不为null时,表示已连接数据库)
interfacejava.sql.Statement发送SQL语句到数据库工具
interfacejava.sql.PreparedStatement发送SQL语句到数据库工具
interfacejava.sql.ResultSet保存SQL查询语句的结果数据(结果集)
classjava.sql.SQLException处理数据库应用程序时所发生的异常

JDBC环境搭建

  1. 在项目下创建lib文件夹,用于存放jar文件。
  2. 将mysql驱动mysql-connector-java-5.1.x复制到项目的lib文件夹中。
  3. 将选中lib文件中的jar文件配置到项目中。

选中项目(JDBC)鼠标右击? --> "New" --> “Folder” --> 创建”lib“文件夹?

?将mysql驱动mysql-connector-java-5.1.x复制到项目的lib文件夹中。

?选中lib文件中的jar文件鼠标右击 --> "Build Path" --> "Configure Build Path"

选择 “ Libraries?” --> " Add Libaray... "

?选择 “ User Library ” --> “ Next ”

?选择 “ User Library ”

选择 “ New ”?

?设置JRE名称 --> 再点击" OK "

?

选择“ Add JARs... ”

?选择 “?mysql-connector-java-5.1.0-bin.jre?” --> 点击“ OK ”

?点击“ OK?”

点击“ Finish ”

?点击 “ OK ”

?配置成功

?JDBC的开发步骤

1.注册驱动

????????使用Class.forName("包含完整路径的驱动类");//手动加载字节码文件到JVM中。

1、注册驱动
Class.forName("com.mysql.jdbc.Driver");

2.获取连接对象

????????通过DriverManager.getConnection(url,user,password)获取数据库连接对象

????????url:mysql数据库的路径

????????user:mysql数据库用户名

????????password:mysql数据库密码

2、获取连接对象
String url = "jdbc:mysql://127.0.0.1:3306/java221804";
String dbuser = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, dbuser, password);

3.获取发送SQL语句的对象

????????通过Connection对象获取Statement对象,用于发送SQL语句,实现对数据库进行访问。

//3、获取发送SQL语句的对象
Statement statement = connection.createStatement();

4.执行SQL语句

????????编写SQL语句并执行SQL语句,接收SQL语句的执行结果。

编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法错误
String sql = "DELETE FROM stu WHERE sid='S_1010';";
4、执行SQL语句,并接收结果/DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响的行数(int类型)
DQL语句:对于查询数据,调用executeQuery()方法,返回一个结果集(ResultSet类型)
int num =statement.executeUpdate(sql);

5.处理结果

????????处理第三步返回的数据。对返回的受影响行数结果进行逻辑判断;对返回的结果集进行迭代、依次获取数据。

5、处理结果
if(num==1){
?? ?System.out.println("数据删除成功");
}else{
?? ?System.out.println("数据删除失败");
}

6.释放资源

????????释放(关闭)所使用到的所有资源对象,遵循”先开的后关,后开的先关“原则。

6、释放资源:先开后关,后开先关
statement.close();
connection.close();?

综合案例:增加、删除、修改

1.JDBC环境搭建

2.创建数据表

?

?3.使用JDBC操作数据库

? ? ? ? 向student数据表中插入一条数据,从创建“InsertJDBC.java”文件

? ? ? ? 1)注册驱动,完整路径的驱动类:"com.mysql.jdbc.Driver"

public class InsertJDBC {

	public static void main(String[] args) {
		//向student数据表中插入一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

}

? ? ? ? 2)获取连接对象

public class InsertJDBC {

	public static void main(String[] args) {
		//向student数据表中插入一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

? ? ? ? 3)获取发送SQL语句的对象

public class InsertJDBC {

	public static void main(String[] args) {
		//向student数据表中插入一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			//3.获取发送SQL语句的对象
			Statement statement = connection.createStatement();
	
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

? ? ? ? 4)执行SQL语句

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


public class InsertJDBC {

	public static void main(String[] args) {
		//向student数据表中插入一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			//3.获取发送SQL语句的对象
			Statement statement = connection.createStatement();
			//4.执行SQL语句
			String sql = "insert into student values ('S_1101','张三',18,'男');";
			int num =statement.executeUpdate(sql);

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

? ? ? ? 5)处理结果

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


public class InsertJDBC {

	public static void main(String[] args) {
		//向student数据表中插入一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			//3.获取发送SQL语句的对象
			Statement statement = connection.createStatement();
			//4.执行SQL语句
			String sql = "insert into student values ('S_1101','张三',18,'男');";
			int num =statement.executeUpdate(sql);
			//处理结果
			if(num == 1){
				System.out.println("数据添加成功!");
			}else{
				System.out.println("数据添加失败!");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

? ? ? ? 6)释放资源

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


public class InsertJDBC {

	public static void main(String[] args) {
		//向student数据表中插入一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			//3.获取发送SQL语句的对象
			Statement statement = connection.createStatement();
			//4.执行SQL语句
			String sql = "insert into student values ('S_1101','张三',18,'男');";
			int num =statement.executeUpdate(sql);
			//处理结果
			if(num == 1){
				System.out.println("数据添加成功!");
			}else{
				System.out.println("数据添加失败!");
			}
			// 6、释放资源:先开后关,后开先关
			statement.close();
			connection.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

运行结果

修改和删除数据与上述代码添加数据基本相同;下面展示修改和删除代码

修改:

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


public class upDateJDBC {

	public static void main(String[] args) {
		//修改student数据表中的一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			//3.获取发送SQL语句的对象
			Statement statement = connection.createStatement();
			//4.执行SQL语句
			String sql = "update student set name='lisi' ,age=20 where id='S_1101';";
			int num =statement.executeUpdate(sql);
			//处理结果
			if(num == 1){
				System.out.println("数据修改成功!");
			}else{
				System.out.println("数据修改失败!");
			}
			// 6、释放资源:先开后关,后开先关
			statement.close();
			connection.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

?删除:

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


public class deleteJDBC {

	public static void main(String[] args) {
		//修改student数据表中的一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			//3.获取发送SQL语句的对象
			Statement statement = connection.createStatement();
			//4.执行SQL语句
			String sql = "delete from student where id='S_1101';";
			int num =statement.executeUpdate(sql);
			//处理结果
			if(num == 1){
				System.out.println("数据删除成功!");
			}else{
				System.out.println("数据删除失败!");
			}
			// 6、释放资源:先开后关,后开先关
			statement.close();
			connection.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

ResultSet(结果集)

????????JDBC中执行DQL查询语句后,使用ResultSet存放查询到的结果集数据。

?1.接受结果集

????????ResultSet resultSet = statement.executeQuery(String sql);

编写SQL语句
String sql = "SELECT * FROM stu;";
执行SQL语句
ResultSet ?resultSet=statement.executeQuery(sql);

2.遍历ResultSet结果集中的数据

ResultSet以表(table)结构进行临时结果的存储,需要通过JDBC API将其中的数据依次获取。

数据行指针:初始位置在第一行数据前,每调用一次boolean next()方法ResultSet的指针向下移动一行,结果为true,表示当前行有数据。

  • resultSet.getXxx(int columnIndex):根据列的编号顺序获取表中字段的数据,编号从1开始,Xxx表示字段类型。

  • resultSet.getXxx(String columnLabel):根据列的名称获取表中字段的数据。

5、对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
while(resultSet.next()){
?? ?//取出元素
?? ?String sid =resultSet.getString(1);
?? ?String sname =resultSet.getString(2);
?? ?int age =resultSet.getInt(3);
?? ?String gender = resultSet.getString(4);
?? ?System.out.println(sid+"-"+sname+"-"+age+"-"+gender);
}

3.常用遍历方法

  • int getInt(int columnIndex) throws SQLException //获得当前行第N列的int值
  • int getInt(String columnLabel) throws SQLException //获得当前行名为cloumnLabel列的int值

  • int getDouble(int columnIndex) throws SQLException //获得当前行第N列的double值
  • int getDouble(String columnLabel) throws SQLException //获得当前行名为cloumnLabel列的double值

  • int getString(int columnIndex) throws SQLException //获得当前行第N列的String值
  • int getString(String columnLabel) throws SQLException //获得当前行名为cloumnLabel列的String值

综合案例:查询

查询student表中的数据

?1.根据列的编号获取数据

//5.对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
// next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false	
while(resultSet.next()){
	String id = resultSet.getString(1);
	String name = resultSet.getString(2);
	int age = resultSet.getInt(3);
	String sex = resultSet.getString(4);
	System.out.println(id+"-"+name+"-"+age+"-"+sex);
}

?完整代码如下:

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


public class selectJDBC {

	public static void main(String[] args) {
		//修改student数据表中的一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			//3.获取发送SQL语句的对象
			Statement statement = connection.createStatement();
			//4.执行SQL语句
			String sql = "select * from student;";
			ResultSet resultSet =statement.executeQuery(sql);
			//5.对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
			// next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
			while(resultSet.next()){
				String id = resultSet.getString(1);
				String name = resultSet.getString(2);
				int age = resultSet.getInt(3);
				String sex = resultSet.getString(4);
				System.out.println(id+"-"+name+"-"+age+"-"+sex);
			}
			// 6、释放资源:先开后关,后开先关
			statement.close();
			connection.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

?2.根据列的名称获取数据

//5.对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
// next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
while(resultSet.next()){
	String id = resultSet.getString("id");
	String name = resultSet.getString("name");
	int age = resultSet.getInt("age");
	String sex = resultSet.getString("sex");
	System.out.println(id+"-"+name+"-"+age+"-"+sex);
}

?完整代码如下:

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


public class selectJDBC {

	public static void main(String[] args) {
		//修改student数据表中的一条数据
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取链接对象
			String url = "jdbc:mysql://localhost:3306/javajdbc";
			String user = "root";
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			//3.获取发送SQL语句的对象
			Statement statement = connection.createStatement();
			//4.执行SQL语句
			String sql = "select * from student;";
			ResultSet resultSet =statement.executeQuery(sql);
			//5.对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
			// next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
			while(resultSet.next()){
				String id = resultSet.getString("id");
				String name = resultSet.getString("name");
				int age = resultSet.getInt("age");
				String sex = resultSet.getString("sex");
				System.out.println(id+"-"+name+"-"+age+"-"+sex);
			}
			// 6、释放资源:先开后关,后开先关
			statement.close();
			connection.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

JDBC常见异常

  • java.lang.ClassNotFoundException:找不到类(类名书写错误、没有导入jar包)

  • java.sql.SQLException:与SQL语句相关的异常(约束错误、表名列名字段名书写错误),建议:在客户端工具中测试SQL语句正确后再复制到代码中

  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column原因:列值String类型没有加单引号

  • Duplicate entry '1' for key 'PRIMARY'原因,主键值已经存在或混乱,更改主键值或清空表

  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column 'password' in原因:可能输入的值类型不对,确定是否插入的元素是对应的值的类型正确

???????

总结

????????以上就是本文所讲的全部内容,主要讲述如何通过java代码实现对数据库的操作,以及对数据库中的数据进行增加、修改、删除以及查询操作。操作数据库的6个步骤:1.注册驱动、2.获取连接对象、3.获取发送SQL语句的对象、4.编写及执行SQL语句、5.处理返回的结果、6.关闭资源

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:34:29  更:2022-11-05 00:35:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/22 15:23:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码