1.JDBC是什么?——Java DataBase Connectivity(Java语言连接数据库)
1.1.JDBC本质是什么?
JDBC是SUN公司制定的一套接口(interface)
- java.sql.* (这个软件包下有许多的接口)
1.2.面向接口编程:接口都有调用者和实现者:面向接口调用,面向接口实现类。
为什么要面向接口编程?
解耦合:降低程序的耦合度,提高程序的扩展力
多态就是典型的:面向抽象编程。(不面向具体编程)
建议“
-
Animal a = new Cat(); Animal b = new Dog(); //喂养方法 public void feed(Animal a){ //面向父类编程 …… }
- 不建议
-
Dog d = new Dog(); Cat c = new Cat();
1.3.为什么SUN制定一套JDBC接口?——为java程序员修一座桥连接不同的数据库
因为每种数据库的实现原理不一样
Oracle数据库有自己的原理。
MySQL数据库也有自己的原理。
MS SqlServer数据库也有自己的原理。
…
2.JDBC开发前的准备工作——导入jar驱动包
2.1.对于文本编辑方式的开发
- 先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath当中。
2.2.对于IDEA开发
3.JDBC编程六步(需要背会)
1.注册驱动
(作用:告诉java程序,即将要连接的是哪个”品牌“的数据库)
- mysql的注册
-
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
- API文档
2.获取连接
(表示JVM进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,用完之后一定要关闭通道)
- xxxx = DriverManager.getConnection( url , 用户名 , 密码);
-
String url = "jdbc:mysql://localhost:3306/bjpowernode"; //自己的地址链接 或:String url = "jdbc:mysql:// IP地址 : 端口 / 文件名 "; String url = "jdbc:mysql://127.0.0.1: 3306 / bjpowernode";
-
String user = "root"; String password = "123";
-
conn = DriverManager.getConnection(url,user,password);
3.获取数据库操作对象
(专门执行sql语句的对象)
- 创建staetment发送sql语句
- xxxx = xxxx.createStatement();
-
stmt = conn.createStatement();
4.执行SQL语句
(DQL、DML……)
- String xxxx = " sql语句 ";
-
String sql = "insert into dept(deptno,dname,loc) values (99,'Nobel Prize','Europe')"; int count = stmt.executeUpdate(sql); System.out.println(count == 1 ? "sql成功" : "sql失败");
- 执行结果:
5.处理查询结果集
(只有当第4步执行的是select语句时,才有这一步的操作)
-
ResultSet xxxx = xxxx.executeQuery(sqlselect); //专门执行DQL查询语句
- 如果下一行还有数据,则返回true,否则返回false
-
boolean flag = rs.next();
执行结果:
-
//5.处理查询结果集(只有当第4步执行的是select语句时,才有这第5步) String sqlselect = "select empno,ename,sal from emp"; ResultSet rs = stmt.executeQuery(sqlselect); //专门执行DQL查询语句 boolean flag = rs.next(); while (flag){ //列下标方式,取出本行中,对应列的数据,但是这种方式不健壮 // String empno = rselect.getString(1); // String ename = rselect.getString(2); // String sal = rselect.getString(3); //列标签方式,取出本行中,对应列数据 String empno = rs.getString("empno"); String ename = rs.getString("ename"); String sal = rs.getString("sal"); System.out.println(empno+","+ename+","+sal); flag = rs.next(); }
6.释放资源
(使用完资源后,一定要关闭。java和数据库之间是进程间通信,开启之后一定要关闭)
4.完整程序
- 执行结果:
import java.sql.DriverManager;
import java.sql.Driver;
import java.sql.*;
public class JDBCTest01 {
public static void main(String[] args) {
Connection connection = null;
Statement stmt = null;
try{
//1.注册驱动(作用:告诉java程序,即将要连接哪个品牌的数据库)
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//2.获取连接(表示JVM的进程和数据库进程之间的 通道 打开了,使用完之后 必须关闭)
String url = "jdbc:mysql://localhost:3306/bjpowernode"; //自己的地址链接
String user = "root";
String password = "333";
connection = DriverManager.getConnection(url,user,password);
System.out.println("数据库连接对象=" + connection);
//3.获取数据库操作对象(专门执行sql语句的对象)//创建staetment发送sql语句
stmt = connection.createStatement();
//4.执行sql语句(主要执行DQL、DML……)
String sql = "insert into dept(deptno,dname,loc) values (45,'oR','sz')";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "sql成功" : "sql失败");
//5.处理查询结果集(只有当第4步执行的是select语句时,才有这第5步)
String sqlselect = "select empno,ename,sal from emp";
ResultSet rs = stmt.executeQuery(sqlselect); //专门执行DQL查询语句
boolean flag = rs.next();
while (flag){
//列表标签
String empno = rs.getString("empno");
String ename = rs.getString("ename");
String sal = rs.getString("sal");
System.out.println(empno+","+ename+","+sal);
flag = rs.next();
}
}catch (Exception e){
e.printStackTrace();
}finally { //为保证一定关闭,放在finally关闭
//6.释放资源(使用完资源后一定要关闭资源,java和数据库属于进程间通信,开启后一定要关闭)
//按照从小到大的顺序关闭
try{
if(stmt != null)
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try{
if(connection != null)
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
5.什么是url?——统一资源路径 (网络中的某个资源的绝对位置)
-
包括:
* 1.协议
* 2.IP
* 3.PORT(端口)
* 4.资源名 -
例如: http://182.61.200.7:80/index.html (百度首页)
* http:// 协议 * 182.61.200.7 IP * 80 端口名 * index.html 文件名