JDBC
1.概述
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范
JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。
2.原理
JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。
3.JDBC开发步骤
1.注册驱动.
告知JVM使用的是哪一个数据库的驱动
2.获得连接.
使用JDBC中的类,完成对MySQL数据库的连接
3.获得语句执行平台
通过连接对象获取对SQL语句的执行者对象
4.执行sql语句
使用执行者对象,向数据库执行SQL语句
获取到数据库的执行后的结果
5.处理结果
6.释放资源.
调用一堆close()方法
3.1导入驱动jar包
创建lib目录,用于存放当前项目需要的所有jar包,选择jar包,右键执行build path / Add to Build Path
3.2JDBC开发步骤代码
package com.oracle.demo1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class demo01 {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
// 1.注册驱动(反射的概念)
//DriverManager.registerDriver(new Driver());
Class.forName("com.mysql.jdbc.Driver");
//2.获得连接
//url格式url="jdbc:mysql://主机:端口号/数据库名";
String url="jdbc:mysql://localhost:3306/demo_jdbc";
String username="root";
String password="123456";
Connection conn=DriverManager.getConnection(url, username, password);
//3.获得语句执行平台
Statement sta=conn.createStatement();
//4.执行SQL语句
//String sql="INSERT INTO sort(sname,sprice,syear) VALUES ('中央空调',2000,10)";
String sql="update sort set sprice=33 where sid=2";
int row=sta.executeUpdate(sql);
//5.处理结果集
System.out.println(row);
//6.释放资源(先开的后关)
sta.close();
conn.close();
}
}
3.3SQL注入问题
假设有登录SQL语句如下
SELECT * FROM 用户表 WHERE NAME = 用户输入的用户名 AND PASSWORD = 用户输的密码;
此时,用户输入正确的用户名和密码,查询到了信息用户可以登录。但是当输入的帐号为XXX
密码为'XXX' OR 'a'='a'时,真正执行的代码变成了
SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’ OR ’a’=’a’;
此时,用户不需要输入正确的用户名和密码也能登录成功。这便是SQL的注入问题。
为了解决这一问题,我们使用PreparedStatement来反注入。
3.4JDBC工具类
以后涉及数据库的增删改查操作,都会用到获得数据库连接操作。为了实现代码的重复利用,我们可以封装工具类JDBCUtil,用来提供获取连接对象的方法。代码如下
package com.oracle.demo2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class Dbutil {
private Dbutil() {}
static Connection conn;
static {
try{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/demo_jdbc";
Scanner sc=new Scanner(System.in);
String username="root";
String password="123456";
conn=DriverManager.getConnection(url,username,password);
}catch(Exception ex){
throw new RuntimeException(ex+"数据库连接失败");
}
}
public static Connection getConn() {
return conn;
}
public static void close(ResultSet rs,Statement sta,Connection conn){
if(rs!=null) {
try {
rs.close();
}catch(SQLException ex) {}
}
if(sta!=null) {
try {
sta.close();
}catch(SQLException ex) {}
}if(conn!=null) {
try {
conn.close();
}catch(SQLException ex) {}
}
}
public static void close(Statement sta,Connection conn){
if(sta!=null) {
try {
sta.close();
}catch(SQLException ex) {}
}if(conn!=null) {
try {
conn.close();
}catch(SQLException ex) {}
}
}
}