/*
* JDBC全称Java数据库连接,它是一套用于执行SQL语句的API,应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库的查询、新增、更新和删除
* 如果直接使用数据库厂商提供的访问接口操作数据库,应用程序的可移植性会很差,例如当前程序使用的是MySQL提供的接口操作数据库,如果换成Oracle,则需要重新使用
* Oracle数据库提供的接口,这样代码的改动量很大,而JDBC就解决了这个问题,在程序中由JDBC和具体的数据库驱动联系,用户就不必直接与底层的数据库交互。
* JDBC API主要位于java.sql包中,该包定义了一系列访问数据库的类和接口。
*/
//实现第一个JDBC程序。JDBC的使用可以按照以下几个步骤进行
//(1)加载并注册数据库驱动
// DriverManager.registerDriver(Driver driver);
// 和Class.forName("DriverName");作用一样
//(2)通过DriverManager获取数据库连接(String url,String user,String pwd)分别表示数据库的地址,登录数据库的用户名和密码。
// Connection conn = DriverManager.getConnection(String url,String user,String pwd);
//其地址的书写格式如下
// jdbc:mysql://hostname:port/databasename
// jdbc:mysql:是固定写法,mysql指的是MySQL数据库。
// hostname指的是主机的名称,(如果数据库在本机上,hostname可以为localhost或127.0.0.1;如果要连接的数据库在其他计算机上,hostname为所要连接的计算机IP)
// port指的是连接数据库的端口号(MySQL端口号默认为3306)
// databasename指的是MySQL中相应数据库的名称
//(3)通过Connection对象获取Statement对象。Connection创建Statement有三种方式
// createStatement():创建基本的Statement对象
// prepareStatement():创建PreparedStatement对象
// prepareCall():创建CallableStatement对象
// 以创建基本的Statement对象为例,创建方式如下:
// Statement stmt = conn.createStatement();
//(4)使用Statement执行SQL语句
// 所有的Statement都有如下3种执行SQL语句的方法
// execute():可以执行任何SQL语句
// executeQuery():通常执行查询语句,执行后返回代表结果集的ResultSet对象
// executeUpdata():主要用于执行DML和DDL语句。执行DML语句,如INSERT、UPDATE或DELETE时,返回受SQL语句影响的行数,执行DDL语句返回0
// 执行SQL语句,获取结果集ResultSet
// ResultSet rs = stmt.executeQuery(sql);
//(5)操作ResultSet结果集
// 如果执行的SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句的查询的结果。程序可以通过ResultSet对象来取出查询结果
//(6)关闭连接,释放资源
// 每次操作数据库结束后都要关闭数据库连接,释放资源,包括关闭ResultSet、Statement和Connection等资源
// 该程序从users表中读取数据,并将结果打印在控制台。
// 1.搭建数据库环境
// 在MySQL中创建一个名称为jdbc的数据库,然后在该数据库中创建一个users表,创建数据库和表的SQL语句。
/*
create DATABASE jdbc;
USE jdbc;
create TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(40),
password VARCHAR(40),
email VARVHAR(60),
birthday DATE
);
*/
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class Test1 {
public static void main(String[] args) throws SQLException {
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
//1.加载并注册数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
//2.通过DriverManager获取数据库连接
String url = "jdbc:mysql://localhost:3306/jdbc?useSSL=false";//jdbc:mysql:是固定格式,localhost代表数据库在本机,3306是端口号,jdbc是数据库
String username = "root";//用户名root
String password = "root";//密码root
conn = DriverManager.getConnection(url,username,password);//通过DriverManager获取数据库连接(String url,String user,String pwd)分别表示数据库的地址,登录数据库的用户名和密码。
//3.通过Connection对象获取Statement对象
stmt = conn.createStatement();
//4.使用Statement执行SQL语句
String sql = "select * from users";
rs = stmt.executeQuery(sql);//executeQuery(sql)执行查询语句,执行后返回代表结果集的ResultSet对象
//5.操作ResultSet结果集
System.out.println("id | name | password"+"| email | birthday");
while(rs.next()) {
int id = rs.getInt("id");//通过列名获取指定字段的值
String name = rs.getString("name");
String psw = rs.getString("password");
String email = rs.getString("email");
Date birthday = rs.getDate("birthday");
System.out.println(id+" | "+ name+" | "+ password+" | "+email+" |"+ birthday);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
//6.回收数据库资源
if(rs != null) {
try {
rs.close();
}catch(SQLException e) {
e.printStackTrace();
}
rs = null;
}
if(stmt != null) {
try {
stmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if(conn != null) {
try {
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
conn = null;
}
}