JDBC实现&相关类及接口(案例)

JDBC

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

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

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

JDBC相关类&接口

在这里插入图片描述

JDBC工作原理

在这里插入图片描述

mysql实现

在这里插入图片描述

oracle实现

在这里插入图片描述

使用DriverManager加载驱动类

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

//加载驱动 com.mysql.cj.jdbc.Driver.class
Class.forName("com.mysql.cj.jdbc.Driver"); 
Connection接口

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

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

在这里插入图片描述

Statement接口

Statement用于执行SQL语句

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

// 创建SQL语句
String sql = "insert into student(sname,birthday,ssex,classid) values('小红','2002-1-1','女',1)";	 

//创建SQL执行对象
Statement state = conn.createStatement();

//执行SQL语句(用于执行DML)
int ret = state.executeUpdate(sql);

//执行SQL语句(用于执行DQL)
ResultSet rs = statm.executeQuery(sql);
ResultSet接口

执行查询SQL语句后返回的结果集,由ResultSet接口接收。
常用处理方式:遍历/判断是否有结果

查询结果存放在ResultSet对象的一系列行中:
1.ResultSet对象的最初位置在行首
2.ResultSet.next()方法用来在行间移动
3.ResultSet.getXXX()方法用来取得字段的内容

String sql = "select * from student";
ResultSet rs = statm.executeQuery(sql);

while (rs.next()) {		
            int sid =rs.getInt("sid");
            String sname = rs.getString("sname");
            Date bir = rs.getDate("birthday");
            String ssex = rs.getString("ssex");
            int classid =rs.getInt("classid");
            System.out.println(sid+sname+bir+ssex+classid);	 
        }	
关闭并释放资源

数据库操作执行完毕以后要释放相关资源(先开后关)

1.Connection
2.Statement
3.ResultSet

//释放资源
rs.close();
statm.close();
conn.close();
login(案例)
public class Test05_login {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
	
    Scanner input = new Scanner(System.in);

    //1.加载驱动		
    Class.forName("com.mysql.cj.jdbc.Driver");					

    // 2.获取连接
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschoolxxx?serverTimezone=GMT", "root", "123456");
        System.out.println("请输入账号");
        String username = input.nextLine();
        System.out.println("请输入密码");
        String userpwd = input.nextLine();

    // ' or 1=1 --  sql注入
    // 3.0 创建SQL语句
    String sql = "select * from login where lusername = ? and luserpwd = ?";

    //3.1 创建执行对象
    //prepareStatement 将SQL语句传入   -- 预处理sql
    PreparedStatement prestatm = conn.prepareStatement(sql);

    //给SQL语句传值
    prestatm.setObject(1, username);
    prestatm.setObject(2, userpwd);

    //3.2 执行并获取结果集
    ResultSet rs =  prestatm.executeQuery();

    //判断结果集
    if (rs.next()) {
        System.out.println("登陆成功");
    }else {
        System.out.println("登陆失败,账号密码有误");
    }

    // 释放资源	
    rs.close();
    prestatm.close();
    conn.close();
    input.close();
	}
}
注册(案例)
public class Test07_zhuCe {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
	
	Scanner input = new Scanner(System.in);
	//1.加载驱动 com.mysql.cj.jdbc.Driver.class
			Class.forName("com.mysql.cj.jdbc.Driver"); 
			
	// 2. 获取连接
	String url = "jdbc:mysql://localhost:3306/myschoolxxx?serverTimezone=GMT";
	String user = "root";
	String password = "123456";
	Connection conn = DriverManager.getConnection(url, user, password);
			
	// 添加数据
			
	System.out.println("请输入账号:");
	String username = input.nextLine();
	System.out.println("请输入密码:");
	String userpwd = input.nextLine();
	System.out.println("请输入姓名:");
	String uname = input.nextLine();
	System.out.println("请输入性别:");
	String sex = input.nextLine();
	System.out.println("请输入地址:");
	String address = input.nextLine();
			
	// 3.0 创建SQL语句
	String sql = "insert into login (lusername,luserpwd,luname,lusex,laddress) values (?,?,?,?,?)";
			 
	// 3.1 创建对象
	PreparedStatement prestatm = conn.prepareStatement(sql);
	
	prestatm.setObject(1,username);
	prestatm.setObject(2,userpwd);
	prestatm.setObject(3,uname);
	prestatm.setObject(4,sex);
	prestatm.setObject(5,address);
			
	//3.2 执行SQL语句
	int rs = prestatm.executeUpdate();
			
	//业务逻辑
	if (rs > 0) {				
		System.out.println("注册成功");
	}else {
		System.out.println("注册失败");
	}
			
	//释放资源
	prestatm.close();
	conn.close();
	input.close();
			
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值