JDBC(JavaDataBase Connectivity)就是Java数据库连接,就是用JAVA语言操作数据库
JDBC基本流程:
1.加载驱动(选择数据库)
2.获取连接(与数据库建立连接)
3.准备SQL
4.构建处理块(封装发送SQL)
5.发送SQL,得到结果
6.处理结果
7.连接关闭
public class Class001_JDBC {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动(选择数据库)
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.获取连接(与数据库建立连接)
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE",
"SCOTT",
"TIGER"
);
//3.准备SQL
String sql = "SELECT * FROM DEPT";
//4.构建处理块(封装发送SQL)
Statement state = conn.createStatement();
//5.发送SQL,得到结果
ResultSet result = state.executeQuery(sql);
//6.处理结果
while(result.next()){
int deptno = result.getInt(1);
String dname = result.getString("dname");
String loc = result.getString(3);
System.out.println(deptno+"-->"+dname+"-->"+loc);
}
//7.连接关闭
conn.close();
}
}
处理块
处理块分为:
1.静态处理块Statement
2.预处理块PreparedStatement
静态处理块Statement
Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发 送要执行的 SQL 语句。Statement 对象,用于执行不带参数的简单 SQL 语句。 执行静态 SQL 语句并返回它所生成结果的对象。
创建:
连接.Connection.createStatement()
执行 :
ddl -->execute(dd语句) -- 通常不会在代码中执行
dml -->executeUpdate(dml语句)
select -->executeQuery(select)
特点 :
处理 不变的静态的 sql 语句
优点:
直接查看sql ,方便处理错误
缺点:性能不高 拼接 sql 麻烦 可能存在 sql 注入
//静态处理块 Statement
/*public static boolean login(String username,String password){
boolean flag = false;
Connection conn = null;
Statement state = null;
ResultSet result = null;
//1.获取连接
try {
conn = JDBCUtils.getConnection();
//2.准备sql
String sql = "select * from t_user where username='"+username+"' and password = "+password;
//3.封装处理块
state = conn.createStatement();
//4.执行,得到结果
result = state.executeQuery(sql);
//5.处理结果
if(result.next()){
flag = true;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
//6.关闭资源
JDBCUtils.close(conn,state,result);
}
//7.返回结果
return flag;
}*/
预处理块PreparedStatement
PreparedStatement 接口继承了 Statement,并与之在两方面有所不同.始终以 PreparedStatement 代替 Statement.也就是说,在任 何时候都不要使用 Statement。
优点:
1. 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement对象。因此,多次 执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
2. 防止SQL注入问题 7.2.1. 创建: 创建:连接.prepareStatement(sql)
执行: 存在? ,先填充参数再执行 ddl -->execute() dml -->executeUpdate() select -->executeQuery()
特点: 处理 不变的静态的 sql 语句 |可变的 sql 语句 带 ? 的 sql 优点:性能高,方便编写sql 不存在sql注入 安全
缺点:不能直接打印sql语句 不方便处理错误
//预处理块 PreparedStatement
public static boolean login(String username,String password){
boolean flag = false;
Connection conn = null;
PreparedStatement state = null;
ResultSet result = null;
//1.获取连接
try {
conn = JDBCUtils.getConnection();
//2.准备sql
String sql = "select * from t_user where username=? and password =?";
//3.构建预处理块
state = conn.prepareStatement(sql);
//4.为?赋值
state.setString(1,username);
state.setObject(2,password);
//5.执行,得到结果
result = state.executeQuery();
//5.处理结果
if(result.next()){
flag = true;
}
}catch(SQLSyntaxErrorException e){
System.out.println("遇到SQL注入了....");
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
//6.关闭资源
JDBCUtils.close(conn,state,result);
}
//7.返回结果
return flag;
}
释放资源
后打开的先关闭