jdbc

本文详细介绍了JDBC的概念,它是Java语言操作MySQL数据库的重要工具。文章涵盖了JDBC驱动的作用、API介绍,包括DriverManager、Connection、PreparedStatement等关键对象的使用,并提供了通过Java代码连接数据库、执行SQL语句的具体步骤。此外,还讲解了JDBC如何处理事务,通过转账案例展示了手动提交和异常回滚的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC

一,什么是JDBC(==========>mysql-connector-java-5.1.38.jar)

JDBC就是java语言用来操作mysql数据库的,通过java代码发送sql语句到数据库,在数据库执行操作(crue)在Java控制台显示。

二,什么是jdbc驱动?为什么每种数据库在发布后都会发布对应的驱动程序?

jdbc驱动就是java操作数据库的一个工具包,只要有了工具包java就可以操作数据库。在编写java代码的时候直接使用这个工具包就欧克,

三,jdbc的api

1)DriverManager:是驱动管理器
2)Connection对象:用来连接数据库
3)PreparedStatement对象和Statement对象:是用来发送sql语句执行对象。
4) 查询:ResultSet对象,结果集对象,对于查询的结果需要通过该对象获取。

[外链图片转存失败(img-FNN0wpgt-1569410823884)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1562549927565.png)]

java代码链接数据库的操作步骤(上一步的对象是下一步调用方法的)

1.获得jdbc驱动

(需要提前下载在oracle官网下载)

2.连接数据库

​ DriverManaer.getConnection() DriverManager是驱动管理器,getConnection()是专门用来链接数据库的对象。getConnection的参数是:jdbc:mysql://localhost:3306/数据库name 和超级管理员和数据库密码。

3.创建命令对象

PreparedStatement对象和Statement对象:是用来发送sql语句执行对象。

creatStatement在创建对象的时候不需要带sql语句,而是在下一步获得结果集的时候传入sql语句creatStatement的返回值是statement

而preparedStatement在创建实例的时候就要直接传入sql语句 他的返回值就是prepare’dStatement

4.获得结果集对象

获得ResultSet对象,结果集对象就是用statement或者用prepaedStatement调用executeQuert()方法 他的返回值是resultSet

5.查询结果集对象

然后用resulySet调用next()方法,返回值是Boolean,在注入式攻击的时候可以当作方法的返回值

在resulySet没有调用next()方法之前,可以把sesulySet看作是一张表(指证),他在表的第一行的前面,每调用next()方法一次指针就下移一行,如果指针下面有值就返回TRUE如果没有就返回false

6.反向关闭(先开的后关)

如果对象不等于null就关掉

public class jdbc2 {
	public static void main(String[] args) throws SQLException {
		mendth(30);
	}
	public static void mendth(int deptNO) throws SQLException {
		ResultSet resultSet=null;
		Statement statement=null;
		Connection connection=null;
		try {
			//创建驱动jdbc
			Class<?> aClass = Class.forName("org.gjt.mm.mysql.Driver");
			//和数据库进行链接,获得数据库的对象
			 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/students","root","1234");
			//创建命令对象
			 statement = connection.createStatement();
			//查询sql语句
			String sql="select*from dept where deptno="+deptNO;//写sql语句
			//结果集
		     resultSet = statement.executeQuery(sql);
			if(resultSet.next()){
				String loc = resultSet.getString("loc");
				String dname = resultSet.getString("dname");
				int deptno = resultSet.getInt("deptno");
				System.out.println("查询数据库的结果是:");
				System.out.println(loc+" "+dname+" "+deptno);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(null!=resultSet){
				resultSet.close();
			}
			if(statement!=null){
				statement.close();
			}
			if(connection!=null){
				connection.close();
			}
		}
	}
}

四,jdbc处理事务的步骤

1.获得驱动

Class<?> aClass = Class.forName("org.gjt.mm.mysql.Driver");

2,获得connection对象,连接数据库

3.用同一个connection对象执行一组sql语句,也就是一个事务

4.设置提交方式为手动提交

setAutocommit=false;

5.异常回滚

6.正常提交

案例

package day13.jdbc;

import day12.dao.DBUtil;

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


public class TransactionTest {
	/**
	 * 转账案例jdbc处理事务
	 * @param args
	 * @throws SQLException
	 */
	public static void main(String[] args) throws SQLException {
		testJbdc();
	}
	//jbbc处理事务
	public static void testJbdc() throws SQLException {
		PreparedStatement st=null;
		Connection connection = DBUtil.getConnection();
		try {
			//设置提交方式为手动提交
			connection.setAutoCommit(false);
			//扣款
			String sql="update bank set balance=balance-10000 where name='zhangsan'";
			String SQL="update bank set balance=balance+10000 where name='lisi'";
			 st = connection.prepareStatement(sql);
			//收到扣款
			int update =st.executeUpdate();
			 st=connection.prepareStatement(SQL);
			int update2=st.executeUpdate();
			if(update>0&&update2>0){
				//正常提交
				connection.commit();
				System.out.println("正常提交!!!!!!!");
			}
		} catch (Exception e) {
			//回滚
			connection.rollback();
			System.out.println("回滚!!!!!!!!!!!");
			e.printStackTrace();
		}finally {
			DBUtil.CloseAll(null,st,connection);
		}
	}
}


connection.rollback();
System.out.println(“回滚!!!!!!!!!!!”);
e.printStackTrace();
}finally {
DBUtil.CloseAll(null,st,connection);
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值