简单易懂的JDBC连接数据库教程
JDBC(Java DataBase Connectivity)
- 称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用统一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。
- 有了JDBC,就不必为访问Mysql数据库专门写一个程序,为访问Oracle又专门写一个程序等等。
JDBC核心接口与类
DriverManager类:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并注册后才可以使用,同时提供方法来建立与数据库的连接。
SQLException类:有关数据库操作的异常。
Connection类:特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果。
PreparedStatement类:表示预编译的 SQL 语句的对象。
Statement类:用于执行静态 SQL 语句并返回它所生成结果的对象。
ResultSet 类:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成 。
CallableStatement :用于执行 SQL 存储过程的接口。
创建JDBC应用程序的步骤
- 载入JDBC驱动程序
- 定义连接URL
- 建立连接
- 创建Statement对象
- 执行查询或更新
- 结果处理
- 关闭连接
载入JDBC驱动包
- 第一步在工程目录文件夹下新建lib文件
- 第二步将ojdbc6.jar这个文件复制到文件夹中。数字6是驱动的版本,版本号没关系,稳定能用就可以。
ojdbc6.jar可以在数据库的安装目录下好到,如下图:
- 第三步,配置构建路径
右键ojdbc6.jar文件>Build>configure build path,点击configure build path后会生成如下文件:
话不多说,上Demo(Statement类例子)
题目:使用java的jdbc查询emp表的全部信息
首先做一个Emp类,Emp类实际的开发中写在另外的一个包里面,本Demo写在_JDBCBean包下,代码如下:
package com.neuedu.chapter05._JDBCBean;
import java.util.Date;
public class Emp {
//数据库中类型和在这里定义的类型存在着映射射关系,这里定义的类型要和数据库定义的类型相同
private int empno;
private String Ename;
private String job;
private int mgr;
private Date hiredate;
private double Sal;
private double comm;
private int deptno;
/**
* 默认构造器
*/
public Emp() {
super();
// TODO Auto-generated constructor stub
}
/**有参构造器
* @param empno
* @param ename
* @param job
* @param mgr
* @param hiredate
* @param sal
* @param comm
* @param deptno
*/
public Emp(int empno, String ename, String job, int mgr, Date hiredate, double sal, double comm, int deptno) {
super();
this.empno = empno;
Ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
Sal = sal;
this.comm = comm;
this.deptno = deptno;
}
//分别给每个属性添加get和set方法
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return Ename;
}
public void setEname(String ename) {
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 getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public double getSal() {
return Sal;
}
public void setSal(double sal) {
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 + ", hiredate=" + hiredate
+ ", Sal=" + Sal + ", comm=" + comm + ", deptno=" + deptno + "]";
}
}
再写一个操作数据库JDBC类,按照 创建JDBC应用程序的步骤来,代码如下:
package com.neuedu.chapter05._JDBC;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import com.neuedu.chapter05._JDBCBean.Emp;
public class JDBCDemo {
public ArrayList<Emp> selectEmp() { //返回值为Emp> 类型的 ArrayList集合
Connection con = null;
Statement stat = null;
ResultSet rs = null;
System.out.println("开始连接程序···");
try {
// 第1步、 载入JDBC驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 第 2步、定义连接URL
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";// jdbc:oracle:thin:@<主机名或IP>:1521:<数据库名>
// 第3步、建立连接
con = DriverManager.getConnection(url, "scott", "123456");
System.out.println(con);
// 第4步、创建Statement对象
stat = con.createStatement();
// 第5步、执行查询或更新
String sql = "select * from emp"; //查询整个emp表
rs = stat.executeQuery(sql); //结果集的数据表
// 6.结果处理
ArrayList<Emp> empList = new ArrayList(); //Emp类型的ArrayList
while(rs.next()) { //一行一行地遍历
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empno")); //将一行中的empno赋值给emp对象中的empno属性
//emp.setEname(rs.getString("ename")); //将一行中的ename赋值给emp对象中的ename属性,一下类似!
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHiredate(rs.getDate("hiredate"));
emp.setSal(rs.getDouble("sal"));
emp.setComm(rs.getDouble("empno"));
emp.setDeptno(rs.getInt("deptno"));
empList.add(emp); //将表里面的每一行数据转化为集合里面的一个对象
}
return empList ; //不出现异常
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 7.关闭连接(先打开后关闭)
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(con != null) {
con.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(stat != null) {
stat.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
}
接下来再写一个测试类,代码如下:
package com.neuedu.chapter05._JDBC;
import java.util.ArrayList;
import com.neuedu.chapter05._JDBCBean.Emp;
public class TestEmp {
public static void main(String[] args) {
JDBCPreparedStatement jdbc = new JDBCPreparedStatement();
//-------------使用集合查询整个表的内容----------------
JDBCDemo test = new JDBCDemo();
ArrayList<Emp> empList = test.selectEmp(); //遍历集合,输出表中每一列信息
for(Emp emp : empList) {
System.out.println(emp.toString());
}
}
}