一、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();
}
}
输出结果: