JDBC是Java数据库连接(Java Database Connectivity)的简称,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了查询和更新数据库数据的方法。
JDBC的使用
1、根据数据库不同导入相应jar包。这里用到的数据库是MySQL,版本为8.0.12,可以在MySQL官网下载对应版本的MySQL的jdbc驱动jar包,并导如的项目中。
2、加载驱动。使用Class.forName()方法加载MySQL连接驱动,在使用MySQL 5及之前的数据库和数据库连接时需要使用“com.mysql.jdbc.Driver”进行加载,使用的是MySQL 6及之后的数据库和数据库连接时就需要使用“com.mysql.cj.jdbc.Driver”进行加载。
3、根据数据参数(url、username、password)来获取数据库连接。url中的mysql的默认端口号为3306,并且在MySQL 8.0以上的数据库的url后面需要加上“?useSSL=false&serverTimezone=UTC”,指明是否进行SSL连接和指定时区
4、创建需要执行的sql命令。
5、执行sql命令,获取结果集。
6、遍历查询结果。
7、关闭资源。
prepareStatement与creatStatement
在执行sql语句的时候可以选择是使用prepareStatement执行sql语句还是使用createStatement的方式执行sql语句。
1、preparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程。
preparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,preparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。但是preparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
2、Statement不会初始化,没有预处理,每次都是从0开始执行SQL。在对数据库只执行一次性存取的时侯,适合用 Statement 对象进行处理。
3、preparedStatement可以使用占位符“?”进行参数赋值,createStatement只能使用字符串拼接的方式进行参数赋值。
完整示例
实体类Emp:
package com.jdbcDemo;
import java.util.Date;
public class Emp {
private int empno;
private String ename;
private String job;
private int mgr;
private Date date;
private double sal;
private double comm;
private int deptno;
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getMgr() {
return mgr;
}
public void setMgr(int mgr) {
this.mgr = mgr;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public double getComm() {
return comm;
}
public void setComm(double comm) {
this.comm = comm;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
@Override
public String toString() {
return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", date=" + date
+ ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
long temp;
temp = Double