什么是JDBC?
JDBC: Java DataBase Connectivity 的缩写。Java数据库连接操作。JDBC是Java的操作数据库的接口。就是Java操作数据库的一套规范:
为什么会有JDBC?
由于各个数据库的差异性,所以对数据库进行操作,需要大量的开发工作,基于这样的情况,指定数据库操作规范,这套规范,便于Java开发者进行数据库操作,且可以屏蔽数据的差异性,提高了Java程序的维护性。
如何使用JDBC?
Connection 管理连接
Statement 管理指令
PraperStatement
ResultSet 管理数据结果
ResetSetMateData 结果中的元信息
1. JDBC的使用步骤
- 根据IP端口、账户信息创建数据库连接,创建连接对象
数据库连接,不同的数据库存在不同的差异,JDBC本身不具备创建连接能力。根据数据库类型、版本引入相关的数据库厂商提供操作数据库的具体的实现API(驱动程序)。
根据IP、认证信息创建连接。 - 定义指令、根据连接创建相应的指令对象、发送指令
在数据库规范中,规定数据库操作的统一指令,使用SQL指令。定义SQL执行。
创建指令操作对象,发送指令 - 接收返回的数据信息
代码示例:
package com.demo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
/**
* @ClassName: JdbcDemo01
* @Description: Jdbc数据库操作示例
* @author: james
* @date: 2020年7月12日 上午
*/
public class JdbcDemo01 {
//数据库连接地址 : ip : 端口 /数据库 ?附属信息---> 数据库软件 ---> 数据库
//服务器时区 数据的字符集 连接安全认证 附属信息
private static String url = "jdbc:mysql://127.0.0.1:3306/ld-stmng?useUnicode=true&characterEncoding=utf8&useSSL=true";
//数据库的用户信息
private static String user = "root";
//数据库密码
private static String password = "root";
public static void main(String[] args) throws Exception {
//1.引入第三方的数据库相关 jar包
//加载驱动:在JDK8 之后 Java程序中已经不需要这一步
//JDK环境会根据url进行自动的适配
//在Javaweb项目中需要加载驱动这个代码
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
//安全认证
Connection connection = DriverManager.getConnection(url, user, password);
//3.创建指令对象
//1.sql指令
String sql = "select id,name,age,sex,classes_id as cId from student";
//2.指令对象
PreparedStatement statement = connection.prepareStatement(sql);
//4.数据结果集
ResultSet rs = statement.executeQuery();
//在结果集中 默认的数据指针其实数据元信息哪行
//数据元信息 注意: 数据元信息进行了封装 跟数据指针没有必然关系
ResultSetMetaData metaData = rs.getMetaData();
//数据部分
//数据部分需要移动数据指针 next() 向下移动
//返回值 向下移动是否成功 如果成功 则数据指针在下一行
//如果失败 说明没有下一行 当前行是最后一行
boolean next = rs.next();
//判断指针
if(next) {
//columnName 列名
//columnLabel 列的标签名
//columnIndex 列的索引 列的索引从1 开始
Object id = rs.getObject(1);//id
String name = rs.getString(2);//根据列索引 获取指定的类型
int age = rs.getInt("age");//根据列别名获取
String sex = rs.getString("sex");//根据列别名获取指定类型
//班级ID 列名:classes_id 列别名: cId
//int classesId = rs.getInt("classes_id");//根据列名获取
int cId = rs.getInt("cId");//根据列别名获取
System.out.println(id +" "+name +" "+age + " "+sex +" "+cId);
}
//5.释放资源
rs.close();
statement.close();
connection.close();
}
}
2.列名和列标签名
接收数据库的操作结果。
注意:默认的列的标签名和列名一致。
3.JDBC元信息
package com.demo01;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import com.bjsxt.util.JdbcUtil;
/**
* @ClassName: JdbcDemo02
* @Description: 数据元信息
* @author: james
* @date: 2020年7月12日 上午
*/
public class JdbcDemo02 {
public static void main(String[] args) {
//获取连接
Connection conn = JdbcUtil.getConnection();
//创建指令对象
//1.定义指令
String sql = "select id,name,age,sex,classes_id as cId from student";
//2.创建指令对象
PreparedStatement prep = null;
//3.接收查询结果
ResultSet rs = null;
try {
prep = conn.prepareStatement(sql);
//接收查询结果
rs = prep.executeQuery();
//获取数据元信息 : 列名 列别名 列类型
ResultSetMetaData metaData = rs.getMetaData();
//获取结果中列个数
int columnCount = metaData.getColumnCount();
System.out.println("列个数:" + columnCount); //5
//根据列索引 获取列名称 索引值从 1 开始
String columnName1 = metaData.getColumnName(1);
String columnName5 = metaData.getColumnName(5);
System.out.println("列1 名称:"+columnName1);//id
System.out.println("列5 名称:"+columnName5);//classes_id
String columnLabel1 = metaData.getColumnLabel(1);//id
String columnLabel2 = metaData.getColumnLabel(5);//cId
System.out.println("列1 别名:"+columnLabel1);
System.out.println("列5 别名:"+columnLabel2);
//列类型
int columnType = metaData.getColumnType(1);
//类型在Java中对应的类型的类名称
String columnClassName = metaData.getColumnClassName(1);
System.out.println(columnType +" "+ columnClassName);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtil.close(conn, prep, rs);
}
}
}