Java日志十九「JDBC」

本文介绍了Java Database Connectivity (JDBC),详细讲解了使用JDBC连接MySQL数据库的步骤,包括导入驱动、注册驱动、获取连接、定义SQL、执行SQL以及处理结果。通过示例代码展示了如何注册驱动、创建连接、执行INSERT、UPDATE和SELECT语句,并对Connection、Statement和ResultSet对象进行了说明。由于内容较多,剩余部分将在后续文章中继续阐述。

**

JDBC

**
JDBC的全称呼为java database connectivity,是sun公司指定的java的数据库连接技术的简称。这篇日志我用的是mySQL数据库做的案例。

我们先来看java连接数据库的步骤:
1.导入驱动jar包
2.注册驱动
3.获取数据库连接对象
4.定义sql
5.获取执行sql语句的对象
6.执行sql,接受返回结果
7.处理结果
8.释放资源

这里先来一段代码来演示一下,后面对各个对象进行详解(jar包我已经导入了,从第二步开始)。

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		//2
		Class.forName("com.mysql.cj.jdbc.Driver");
		//3
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/Practice_affair","root","000222abc");
		//4
		String sql="update account set balance=10000 where id=1";
		//5
		Statement stmt=conn.createStatement();
		//6
		int count=stmt.executeUpdate(sql);
		//7
		System.out.println(count);
		//8
		stmt.close();
		conn.close();
	}

打印结果

1//代表作用结果影响了数据库中的一行数据

我们看一下后台数据库
在这里插入图片描述
id为1的balance成功被修改为10000。

下面说一下一些有关的对象:

DriverManager:驱动管理对象
功能:
1.注册驱动
在com.mysql.cj.jdbc.Driver中存在静态代码块,其中使用了DriverManager的registerDriver方法来注册驱动
2.获取数据库连接
使用getConnection静态方法可以连接数据库,传递的第一个参数是指定连接的路径(mysql的格式:jdbc:mysql://ip地址:端口号/要连接的数据库),
若连接的是本机的数据库且端口号为3306,那么【ip地址:端口号】可以不写

Connection:数据库连接对象
功能:
1.获取执行的sql对象
Statement createStatement()
2.管理事务
开启事务:void SetAutoCommit(boolean autoCommit),参数设置为false即开启事务
提交事务:void commit()
回滚事务:void rollback()

Statement:执行sql语句的对象
功能:
1.执行sql
boolean execute(String sql):可以执行任何sql
int executeUpdate(String sql):可以执行DML(增删改数据)语句,DDL(对库的操作)语句,返回值是影响的行数
ResultSet executeQuery(String sql):执行DQL语句

还有两个有关对象,但是上面没有体现,下面我们进行对数据库中数据的INSERT,SELECT,UPDATE操作,等用到了这两个对象我们再解释。

INSERT

public static void main(String[] args)  {
		//在这里写的原因是要在finally代码块中执行,要是在try中定义那么检测不到
		Statement stmt=null;
		Connection conn=null;
		
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			String sql="insert into account values(null,'simon',5000)";
			conn=DriverManager.getConnection("jdbc:mysql:///Practice_affair","root","000222abc");
			stmt=conn.createStatement();
			int count=stmt.executeUpdate(sql);
			if(count>0)
				System.out.println("插入成功");
			else
				System.out.println("插入失败");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			if(stmt!=null) {//避免空指针异常
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				}
			if(conn!=null) {//避免空指针异常
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}

结果

插入成功

在这里插入图片描述

UPDATE

public static void main(String[] args) {
		
		Statement stmt=null;
		Connection conn=null;
		
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			String sql="update account set balance=3000 where id=3";
			conn=DriverManager.getConnection("jdbc:mysql:///Practice_affair","root","000222abc");
			stmt=conn.createStatement();
			int count=stmt.executeUpdate(sql);
			if(count>0)
				System.out.println("修改成功");
			else
				System.out.println("修改失败");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			if(stmt!=null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				}
			if(conn!=null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}

结果

修改成功

在这里插入图片描述

SELECT

public static void main(String[] args) {
		
		Statement stmt=null;
		Connection conn=null;
		ResultSet rs=null;
		
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			String sql="select * from account";
			conn=DriverManager.getConnection("jdbc:mysql:///Practice_affair","root","000222abc");
			stmt=conn.createStatement();
			rs=stmt.executeQuery(sql);
			//处理结果:
			while(rs.next()) {
			int id=rs.getInt(1);
			String name=rs.getString(2);
			double balance=rs.getDouble(3);
			System.out.println("id:"+id+" NAME:"+name+" balance:"+balance);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			if(stmt!=null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				}
			if(conn!=null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(rs!=null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}

结果

id:1 NAME:jack balance:10000.0
id:2 NAME:eden balance:1500.0
id:5 NAME:james balance:1000.0
id:6 NAME:simon balance:5000.0

这里出现了一个新的对象ResultSet

ResultSet:结果集对象,封装查询结果
功能:
拿到数据库中的数据并
boolean next():游标向下移动一行
若下一行有数据返回true,没有返回false
XXX getXXX(参数):获取数据(XXX代表数据类型,比如int getInt(),String getString())
参数分为两种:
int类型的参数,代表列的编号,从1开始
String类型的参数,代表列的名称

这次先到这里,这篇文章本来要一次性说完JDBC,但是发现内容有点多,剩下的明天说完。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值