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();
}
}