JDBC标准实现
什么是JDBC
- JDBC(Java Database Connectivity):Java访问数据看的解决方法
- JDBC定义了一套标准接口,即访问数据库的通用API,不同的数据库厂商根据各自的数据库的特点去实现这些接口。
- JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与书记库厂商实现无关,从而在不同数据库之间轻易的进行切换。
JDBC相关类与接口
- 驱动管理类(DriverManager)
- 语句对象接口(Statement)
- 连接接口(Connection)
- 结果集接口(ResultSet)
JDBC工作原理
- Class.forName():加载驱动
- DriverManager:获取Connection连接
- 创建Statement:执行SQL语句
- 返回ResultSet:查询结果
- 释放资源
下载驱动
- 下载对应的数据库的驱动 mysql-connector-java-5.0.4-bin.jar
- 将驱动类加载到项目中 Eclipse: Build Path
MySQL使用DriverManager加载驱动类
- 加载驱动类
- 通过Class.forName( )方法(反射) 完成驱动类的注册
Class.forName("com.mysql.jdbc.Driver");
Connection接口
- 根据URL连接参数找到与之匹配的Driver对象, 调用其方法获取连接
注:Connection只是接口!真正的实现是数据库厂商提供的驱动包完成的。 jdbc:mysql://localhost:3306/myschoolxxx?serverTimezone=GMT
Statement接口
- Statement用于执行SQL语句
注:不同的SQL语句,要调用不同的方法来执行。
- Statement用于执行DML
- Statement用于执行DQL
ResultSet接口
- 执行查询SQL语句后返回的结果集,由 ResultSet接口接收。
查询结果存放在ResultSet对象的一系列行中
- ResultSet对象的最初位置在行首
- ResultSet.next()方法用来在行间移动
- ResultSet.getXXX()方法用来取得字段的内容
关闭并释放资源
- 数据库操作执行完毕以后要释放相关资源
- Connection
- Statement
- ResultSet
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//com.mysql.cj.jdbc.Driver.class
//1、加载驱动 通过反射的方式加载的MySQL的驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
//2、获取连接对象
String url="jdbc:mysql://localhost:3306/myschoolxxx?serverTimezone=GMT";
String user="root";
String pwd="123456";
Connection connection=DriverManager.getConnection(url, user, pwd);
//测试
System.out.println(connection);
//3、释放资源
connection.close();
}
Oracle实现
下载对应的数据库驱动jar包 ojdbc6.jar/ojdbc14.jar
将驱动jar包加载到项目中 Eclipse:BuildPath
加载驱动类 Class.forName(“oracle.jdbc.OracleDriver”)
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();
}