文章目录
jdbc编程步骤1.注册驱动2.获取数据库的连接3.获取数据库操作对象4.执行sql语句5.处理查询结果集6.释放资源
jdbc编程步骤
jdbc编程6步:
1.注册驱动
2.获取连接
3.获取数据库操作对象
4.执行sql
5.处理查询结果集
6.释放资源
1.注册驱动
注册驱动的作用:告诉jdbc程序,我们即将连接的是哪一种数据库 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190804140737931.png)
package ghh1.jdbc编程6步;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 第一步:注册驱动
* 注册驱动的作用:告诉jdbc程序,我们即将连接的是哪一种数据库
*/
public class JDBCTest01 {
public static void main(String[] args)
{
try {
//1.注册驱动
/*
左边的是jdbc接口Driver
右边是Mysql数据库中jar包中的实现类(对java.sql.Driver接口的实现)
利用了向上转型
*/
//1.1注册驱动对象
//java.sql.Driver driver = new com.mysql.jdbc.Driver();
//可以将左边的java.sql.Driver包导进来
Driver driver = new com.mysql.jdbc.Driver();
//1.2创建驱动对象
DriverManager.registerDriver(driver);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.获取数据库的连接
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190804142146770.png)
package ghh1.jdbc编程6步;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 第二步:获取数据库连接对象
* 程序执行到此步表JVM已经和3366接口服务建立连接,通道打开
*/
public class JDBCTest02 {
public static void main(String[] args)
{
try {
//1.注册驱动
//1.1注册驱动对象
Driver driver = new com.mysql.jdbc.Driver();
//1.2创建驱动对象
DriverManager.registerDriver(driver);
//2.获取数据库连接
String url = "jdbc:mysql://localhost:3366/bjpowernode";
String user= "root";
String password = "123";
/*
什么是url:
统一资源定位符
URL代表网络中的某个资源的绝对路径
通过URL可以定位网络中的资源
比如:http://www.baidu.com
url由哪几部分组成:
协议,IP,端口号,资源名称
jdbc:mysql://localhost:3366/bjpowernode
jdbc:mysql:// 协议
localhost IP地址
3366 端口号
bjpowernode 数据库实例名
协议的作用:协议是通讯数据格式,提前制定好的规范,
按照这个中特定的格式发送数据包对方接收到数据包之后
按照这种规范解析数据包,获取有价值的数据
IP地址的作用:定位计算机
端口号的作用:定位服务
*/
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
/*
* 打印的结果:com.mysql.jdbc.JDBC4Connection@25f38edc
* 打印的是Mysql驱动对java.sql.Connection接口的实现类的完整类名
* 相当于Connection conn =com.mysql.jdbc.JDBC4Connection();
* 左边是jdbc接口Connection即java.sql.Connection接口
* 右边是Mysql驱动对java.sql.Connection接口的实现类的完整类名
* 这里利用了向上转型
*
* 但是jdbc程序员不需要关系Mysql具体的连接实现类
* 只需要关心面向java.sql.Connection接口中的方法
*/
/*
* 重点:
* Connection对象是一个重量级的对象
* 连接对象不能随便创建,最后使用完毕,必须手动关闭资源
* Mysql支持的最多连接数量是100个
*/
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3.获取数据库操作对象
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190804150616535.png)
package ghh1.jdbc编程6步;
import java.sql.*;
public class JDBCTest03 {
public static void main(String[] args) {
try {
//1.注册驱动
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
//2.获取连接
String url = "jdbc:mysql://localhost:3366/bjpowernode";
String user = "root";
String password= "123";
Connection conn = DriverManager.getConnection(url,user,password);
//3.获取数据库操作对象
Statement stmt = conn.createStatement();
System.out.println(stmt);
//一个连接对象可创建多个数据库操作对象
Statement stmt2 = conn.createStatement();
System.out.println(stmt2);
/**
* 打印的结果是Mysql驱动对java.sql.Statement接口的实现类的完整类名
* com.mysql.jdbc.StatementImpl@506c589e
* com.mysql.jdbc.StatementImpl@69d0a921
* 相当于
* Statement stmt1 = new com.mysql.jdbc.StatementImpl();
* Statement stmt2 = new com.mysql.jdbc.StatementImpl();
* 左边的是java.sql.Statement接口
* 右边的是Mysql驱动对java.sql.Statement接口的实现类的完整类名
* 这里利用了向上转型
*
* 但是程序员只需要关心java.sql.Statement接口中的方法即可
* 不需要关心具体实现类
*/
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4.执行sql语句
下面程序主要执行DML语句:insert update delete ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190804153214971.png)
package ghh1.jdbc编程6步;
import java.sql.*;
public class JDBCTest04 {
public static void main(String[] args) {
try {
//1.注册驱动
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
//2.获取连接
String url = "jdbc:mysql://localhost:3366/bjpowernode";
String user = "root";
String password="123";
Connection conn = DriverManager.getConnection(url,user,password);
//3.获取数据库执行对象
Statement stmt = conn.createStatement();
//执行sql语句
String sql = "insert into dept_bak(deptno,dname,loc) values(50,'销售部','北京')";
//程序执行到此处,发送sql语句给数据库管理系统
//数据库管理系统会将这条sql语句编译并且执行
//该方法的返回值类型是int类型,表示影响底层数据库表中的记录总数
int count = stmt.executeUpdate(sql);
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
将sql语句改为:
String sql = "update dept_bak set dname='市场部',loc='天津' where deptno=50";
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190804154404787.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNzY0NDY4,size_16,color_FFFFFF,t_70)
String sql = "delete from dept_bak where deptno=50";
以上的增删改DML比较简单,比较复杂的是查询语句,因为查询需要处理结果集
5.处理查询结果集
如果第四步执行的SQL语句是DQL语句,那么第五步需要处理查询结果集 如果不是的话,可以直接释放资源 根据查询结果集中字段的下标获取: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190804163854643.png)
package ghh1.jdbc编程6步;
import java.sql.*;
public class JDBCTest05 {
public static void main(String[] args) {
try {
//1.注册驱动
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
//2.获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3366/bjpowernode","root","123");
//3.获取数据库操作对象
Statement stmt = conn.createStatement();
//执行sql语句
String sql = "select empno,ename,sal from emp";
//程序执行到此处,发送SQL语句给数据库管理系统
//数据库管理系统执行DQL语句
//将执行之后的查询结果放到ResultSet这个结果集对象中了
ResultSet rs = stmt.executeQuery(sql);
//5.处理查询查询结果集
/**
* rs查询结果集中就封装了以下信息:
+-------+--------+---------+
| empno | ename | sal |
+-------+--------+---------+
| 7369 | SIMITH | 800.00 |
| 7499 | ALLEN | 1600.00 |
| 7521 | WARD | 1250.00 |
| 7566 | JONES | 2975.00 |
| 7654 | MARTIN | 1250.00 |
| 7698 | BLAKE | 2850.00 |
| 7782 | CLARK | 2450.00 |
| 7788 | SCOTT | 3000.00 |
| 7839 | KING | 5000.00 |
| 7844 | TURNER | 1500.00 |
| 7876 | ADAMS | 1100.00 |
| 7900 | JAMES | 950.00 |
| 7902 | FORD | 3000.00 |
| 7934 | MILLER | 1300.00 |
+-------+--------+---------+
*/
/**
* boolean hasMore = re.next();
* next()方法的作用:
* 1.将光标向前移动一行
* 2.指向的当前行有记录,返回true
* 3.指向的当前行没有记录,返回false
*/
while(rs.next())
{
//取当前光标指向的行中的数据
//无论数据库表中字段的数据类型是什么,都以字符串的形式取出
//以下根据查询结果集中字段的下标获取
String empno = rs.getString(1);//jdbc中所有的下标都是从1开始的
String ename = rs.getString(2);
String sal = rs.getString(3);
System.out.println(empno+"..."+ename+"..."+sal);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
根据查询结果集中字段的名称获取: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190804164004657.png)
//以下是根据查询结果集中的字段名称获取
String empno = rs.getString("empno");
String ename = rs.getString("ename");
String sal = rs.getString("sal");
System.out.println(empno+"..."+ename+"..."+sal);
注意:是查询结果集中字段的下标,比如对查询结果集中字段重命名
package ghh1.jdbc编程6步;
import java.sql.*;
public class JDBCTest07 {
public static void main(String[] args) {
try {
//1.注册驱动
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
//2.获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3366/bjpowernode","root","123");
//3.获取数据库操作对象
Statement stmt = conn.createStatement();
//执行sql语句,将字段重命名
String sql = "select empno a,ename b,sal c from emp";
//将执行之后的查询结果放到ResultSet这个结果集对象中了
ResultSet rs = stmt.executeQuery(sql);
//5.处理查询查询结果集
while(rs.next())
{
String empno = rs.getString("a");
String ename = rs.getString("b");
String sal = rs.getString("c");
System.out.println(empno+"..."+ename+"..."+sal);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
以字段特定的类型获取查询结果集:
//以特定的数据类型取出数据
//empno是int类型
//ename是String类型
//sal是double类型
int empno = rs.getInt("a");
String ename = rs.getString("b");
double sal = rs.getDouble("c");
System.out.println((empno+1)+"..."+ename+"..."+sal);
6.释放资源
释放资源的注意事项:
为了保证资源的释放,将释放资源的代码写到finally语句块中需要关闭ResultSet,Statement,Connection一个Connection可以创建多个Statement,一个Statement可以得出多个ResultSet,所以关闭的时候先关闭ResultSet,再关闭Statement,最后关闭Connection
package ghh1.jdbc编程6步;
import javax.swing.plaf.nimbus.State;
import java.sql.*;
public class JDBCTest09 {
public static void main(String[] args) {
Connection conn=null;
Statement stmt=null;
ResultSet rs = null;
try {
//1.注册驱动
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
//2.获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3366/bjpowernode","root","123");
//3.获取数据库操作对象
stmt = conn.createStatement();
//执行sql语句
String sql = "selelct * from dept";
rs = stmt.executeQuery(sql);
//处理查询结果集
while(rs.next()){
String deptno = rs.getString("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println(deptno+"..."+dname+"..."+"loc");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
|