JDBC

一、jdbc是什么

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

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

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

1.JDBC相关类与接口 

  • 驱动管理类 DriverManager
  • 连接接口 Connection
  • 语句对象接口 Statement
  • 结果集接口 ResultSet 

2.JDBC工作原理 

 

3.下载驱动 

 

4.使用DriverManager加载驱动类

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

//com.mysql.cj.jdbc.Driver
//1.加载驱动 -- 反射方式
Class.forName("com.mysql.cj.jdbc.Driver");

5.Connection接口

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

注意:Connection只是接口!真正的实现是数据库厂商提供的驱动包完成的。 jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT  

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

6.Statement接口 

        Statement用于执行SQL语句 

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

//3.获取sql执行对象
Statement statm =  conn.createStatement();
		
String sql="insert into class(classid,classname)values(4,'校招3')";
		
int ret=statm.executeUpdate(sql);

7.ResultSet接口

• 查询结果存放在ResultSet对象的一系列行中

• ResultSet对象的最初位置在行首

• ResultSet.next()方法用来在行间移动

• ResultSet.getXXX()方法用来取得字段的内容 

ResultSet rs=statm.executeQuery(sql);
		
		//解析结果集
		while(rs.next()) {
//			int sid=rs.getInt(1);
//			String sname=rs.getString(2);
//			Date bir=rs.getDate(3);
//			String sex=rs.getString(4);
//			int classid=rs.getInt(5);
			
			int sid = rs.getInt("sid");
			String sname = rs.getString("sname");
			Date bir = rs.getDate("birthday");
			String sex = rs.getString("ssex");
			int classid = rs.getInt("classid");
			
			System.out.println(sid+sname+bir+sex+classid);
			
		}

7.关闭并释放资源

• 数据库操作执行完毕以后要释放相关资源

• Connection

• Statement

• ResultSet 

rs.close();
statm.close();
conn.close();

练习

建立连接

package com.ztt.Day1;

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

public class connTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		//com.mysql.cj.jdbc.Driver
		//1.加载驱动 -- 反射方式
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取连接
		String url="jdbc:mysql://localhost:3307/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url, user, pwd);
		
		//测试
		System.out.println(conn);
		//3.释放资源
		conn.close();
	}

}

输出结果:

 

对学生的增加

package com.ztt.Day1;

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



public class insertStudentTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//1.加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取链接
		String url="jdbc:mysql://localhost:3307/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url, user, pwd);
		
		//3.获取sql执行对象
		Statement statm =  conn.createStatement();
		
		String sql="insert into student(sname,birthday,ssex,classid)values('迪迦','2001-10-1','男',1)";
		
		int ret=statm.executeUpdate(sql);
		
		
		//逻辑
		if(ret>0) {
			System.out.println("添加成功!");
		}else {
			System.out.println("添加失败!");
		}
		
		//4.释放连接
		statm.close();
		conn.close();
		
		
		
	}

}

输出结果:

 

对学生表的修改

package com.ztt.Day1;

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

public class updateStudentTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		//1.加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		String url="jdbc:mysql://localhost:3307/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url, user, pwd);
		
		Scanner input=new Scanner(System.in);
		
		Statement statm =  conn.createStatement();
		
		System.out.println("请输入学生新的编号");
		String sid=input.next();
		System.out.println("请输入学生新的姓名");
		String sname=input.next();
		System.out.println("请输入学生新的生日");
		String bir=input.next();
		System.out.println("请输入学生新的性别");
		String sex=input.next();
		System.out.println("请输入学生新的班级");
		String gid=input.next();
		
		String sql="update student set sname='"+sname+"',"
				+ "birthday='"+bir+"',ssex='"+sex+"',classid="+gid+" where sid="+sid;
		
		
		
		int ret=statm.executeUpdate(sql);
		
		
		//逻辑
		if(ret>0) {
			System.out.println("修改成功!");
		}else {
			System.out.println("修改失败!");
		}
		
		//4.释放连接
		conn.close();
		

	}
}

对学生表的数据的删除

package com.ztt.Day1;

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

public class deleteStudentTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//1.加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取链接
		String url="jdbc:mysql://localhost:3307/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url, user, pwd);
		
		//3.获取sql执行对象
		Statement statm =  conn.createStatement();
		
		String sql="delete from student where sid=22";
		
		int ret=statm.executeUpdate(sql);
		
		
		//逻辑
		if(ret>0) {
			System.out.println("删除加成功!");
		}else {
			System.out.println("删除失败!");
		}
		
		//4.释放连接
		statm.close();
		conn.close();
				
	}

}

查找学生表中的数据

package com.ztt.Day1;

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

public class selectStudentTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//1.加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取链接
		String url="jdbc:mysql://localhost:3307/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url, user, pwd);
		
		//3.获取sql执行对象
		Statement statm =  conn.createStatement();
		
		String sql="select sid,sname,birthday,ssex,classid  from student";
		
		ResultSet rs=statm.executeQuery(sql);
		
		//解析结果集
		while(rs.next()) {
//			int sid=rs.getInt(1);
//			String sname=rs.getString(2);
//			Date bir=rs.getDate(3);
//			String sex=rs.getString(4);
//			int classid=rs.getInt(5);
			
			int sid = rs.getInt("sid");
			String sname = rs.getString("sname");
			Date bir = rs.getDate("birthday");
			String sex = rs.getString("ssex");
			int classid = rs.getInt("classid");
			
			System.out.println(sid+sname+bir+sex+classid);
			
		}
		
		
		//释放资源
		rs.close();
	}

}

 输出结果:

 

package com.ztt.Day1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class loginTest {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		// sql 注入
		// 通过一些特殊的符号 让原本的sql失效,让sql执行新的sql指令
		// 1. 正则表达式
		// 2. JDBC 
		
		
		Scanner input = new Scanner(System.in);
		
		// 1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2. 获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/myschool?serverTimezone=GMT", "root", "123456");

		// 3. sql执行对象
//		Statement statm = conn.createStatement();
		
		System.out.println("请输入账号");
		String username = input.nextLine();
		System.out.println("请输入密码");
		String userpwd = input.nextLine();
		
		// jdbc 操作数据库的index 都是从1开始
//		PreparedStatement 防止sql注入
		// 1. 预处理sql语句
		String sql = "select * from login where lname=? and lpwd=?";
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
		
		//  2. ? 变成真正的参数
		prepareStatement.setObject(1, username);
		prepareStatement.setObject(2, userpwd);
		
		// 3. 执行
		ResultSet rs = prepareStatement.executeQuery();
	
		
//		ResultSet rs = statm.executeQuery(sql);
		
		if(rs.next()) {
			int lid = rs.getInt("lid");
			String lrname = rs.getString("lrname");
			String lsex = rs.getString("lsex");
			String laddr = rs.getString("laddr");
			System.out.println(lid+lrname+lsex+laddr);
		}else {
			System.out.println("登录失败,连个账号密码都记不住,你能干啥");
		}
		
		// 释放资源
		rs.close();
//		statm.close();
		prepareStatement.close();
		conn.close();
	}

}

输出结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值