JDBC是什么
Java Database Connectivity:Java访问数据库的解 决方案
JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些接口。
JDBC希望用相同的方式访问不同的数据库,让具体 的数据库操作与数据库厂商实现无关,从而在不同数 据库之间轻易的进行切换。
JDBC相关类与接口
驱动管理类 DriverManager
连接接口 Connection
语句对象接口 Statement
结果集接口 ResultSet
JDBC工作原理

下载驱动
• 下载对应的数据库的驱动 mysql-connector-java-5.0.4-bin.jar
• 将驱动类加载到项目中 Eclipse: Build Path


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

Connection接口
• 根据URL连接参数找到与之匹配的Driver对象, 调用其方法获取连接
注: Connection只是接口!真正的实现是数据库厂商提供的驱动包 完成的。 jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT
连接字符串          MySQL: jdbc:mysql:// Oracle: jdbc:oracle:thin:@
数据库地址 数据库的地址以及端 口号 localhost:本机IP 3306:MySQL默认 端口号
数据库名 具体要连接数据库服 务器上的哪一个数据库
Statement接口
• Statement用于执行SQL语句
注:不同的SQL语句,要调用不同的方法来执行。

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

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

关闭并释放资源
• 数据库操作执行完毕以后要释放相关资源
• Connection
• Statement
• ResultSet

package com.xn.Connector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectorTest {
	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:3306/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.xn.Connector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import com.mysql.cj.xdevapi.Statement;
public class InsertTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		//1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取连接
		String url="jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url,user,pwd);
		
		//3.获取sql执行对象
		java.sql.Statement statm=conn.createStatement();
		
		String sql="insert into student(sname,birthday,ssex,classid)values('迪迦','1888-8-1','男',1)";
		int ret = statm.executeUpdate(sql);
		
		
		//逻辑
		if(ret>0) {
			System.out.println("添加成功");
		}else {
			System.out.println("添加失败");
		}
		
		//4.释放资源
		conn.close();
	}
}
//修改
package com.xn.Connector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
//字符串的修改
public class UpdateTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		Scanner input=new Scanner(System.in);
		//1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//2.获取连接
		String url="jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT";
		String user="root";
		String pwd="123456";
		Connection conn=DriverManager.getConnection(url,user,pwd);
		
		
		//3.获取sql执行对象
		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.xn.Connector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DeleteTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// 1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2.获取连接
		String url = "jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT";
		String user = "root";
		String pwd = "123456";
		Connection conn = DriverManager.getConnection(url, user, pwd);
		// 3.获取sql执行对象
		java.sql.Statement statm = conn.createStatement();
		String sql = "delete from student where sid=14";
		int ret = statm.executeUpdate(sql);
		// 逻辑
		if (ret > 0) {
			System.out.println("删除成功");
		} else {
			System.out.println("删除失败");
		}
		// 4.释放资源
		conn.close();
	}
}
//查找
package com.xn.Connector;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class FindTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// 1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2.获取连接
		String url = "jdbc:mysql://localhost:3306/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 * from student";
		ResultSet rs = statm.executeQuery(sql);
		// 测试
		System.out.println(rs);
		// 解析结果集
		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);
		}
	}
}
package com.xn.Connector;
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:3306/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();
	}
}
 
                

















