我发现要学习一个新的知识,首先要搞懂它是什么?能做什么?怎么去做?学习了数据库的DDL、DML了的基本操作,备操作的数据库要和java代码产生连接,我们就必须学会JDBC编程。
目录
java中JDBC的定义
JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供 了一个标准的API,可以为多种关系数据库提供统一访问。即JDBC是一个连接java程序的数据库的一个标准,在代码中的表现是一组 interface。
JDBC使用步骤
创建数据库连接Connection
1.加载JDBC驱动:
Class.forName("com.mysql.jdbc.Driver");
这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法区,并执行该类的静态方法块、静态属性。
2.创建数据库连接:
String url = "jdbc:mysql://127.0.0.1:3306/people?
useSSL=false&characterEncoding=utf8";
String user = "root"; // 连接 mysql 的用户名
String password = ""; // 连接 mysql 的密码
Connection connection = DriverManager.getConnection(
url, user, password
);
jdbc:mysql:// :在jdbc中使用mysql的固定协议
127.0.0.1:本机的IP地址(localhost or 本地的域名)
3306:mysql服务器的标准端口
people:默认的数据库
useSSl:是否使用安全的套接字
characterEncoding=utf8:采用utf-8编码方式进行编码
因此可以得出其固定格式是:
jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
创建操作命令Statement
Statement statement = connection.createStatement();
使用操作命令来执行SQL
增:
String sql = "INSERT INTO users (id, name) VALUES (1, '东东')";
statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
删:
String sql = "DELETE FROM users WHERE id = 1";
statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
改:
String sql = "UPDATE users SET name = '西西' WHERE id = 1";
statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
查:
{
Statement statement = connection.createStatement();
String sql = "SELECT id, name FROM users";
ResultSet resultSet = statement.executeQuery(sql);
List<String> nameList = new ArrayList<>();
while (resultSet.next()) {
int id = resultSet.getInt(1); // 下标是从 1 开始的,不是从 0 开始的
int id = resultSet.getInt("id"); // 通过字段名称获取
// 结果集马上需要销毁,所以通过 List 保存结果
nameList.add(name);
System.out.println(id + ", " + name);
}
resultSet.close();
statement.close();
}
-需要拿到结果集对象,从结果集对象中遍历获取数据,销毁结果集对象[反向销毁]
-不同的类型调用不同的方法
int r = resultSet.getInt();
long r = resultSet.getLong();
String r = resultSet.getString();
-获取属性的两种方法
int id = resultSet.getInt(1);
String name = resultSet.getString("name");
注意下标是从1开始的。
处理结果集ResultSet
while (resultSet.next()) {
int id = resultSet.getInt(1); // 下标是从 1 开始的,不是从 0 开始的
int id = resultSet.getInt("id"); // 通过字段名称获取
// 结果集马上需要销毁,所以通过 List 保存结果
nameList.add(name);
System.out.println(id + ", " + name);
}
next()的作用:1.返回false或true 2.判断是否还有数据
释放资源
resultSet.close();
statement.close();
完整代码
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:mysql://127.0.0.1:3306/people?useSSL=false&characterEncoding=utf8";
String user = "root"; // 连接 mysql 的用户名
String password = ""; // 连接 mysql 的密码
Connection connection = DriverManager.getConnection(
url, user, password
);
/*
Statement statement = connection.createStatement();
String sql = "INSERT INTO users (id, name) VALUES (1, '东东') ,(2,'西西'),(3,'南南'),(4,'北北')";
statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
statement.close();
*/
/*
String sql = "UPDATE users SET name = '西西' WHERE id = 1";
statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
*/
/*
String sql = "DELETE FROM users WHERE id = 1";
statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
*/
{
Statement statement = connection.createStatement();
String sql = "SELECT id, name FROM users";
ResultSet resultSet = statement.executeQuery(sql);
List<String> nameList = new ArrayList<>();
while (resultSet.next()) {
/*
需要不同的类型,调用不同的方法
int r = resultSet.getInt();
long r = resultSet.getLong();
String r = resultSet.getString();
*/
/*
int id = resultSet.getInt(1); // 下标是从 1 开始的,不是从 0 开始的
int id = resultSet.getInt("id"); // 通过字段名称获取
*/
int id = resultSet.getInt(1);
String name = resultSet.getString("name");
// 结果集马上需要销毁,所以通过 List 保存结果
nameList.add(name);
System.out.println(id + ", " + name);
}
resultSet.close();
statement.close();
}
}
}
一般来说Driver注册只需要一次,Connection也只需要一次(特殊情况需要多个连接)。获取多个Statement,每个statement最好只执行一条sql。
JDBC常用接口和类
数据库连接Connection
Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
一种是通过DriverManager(驱动管理类)的静态方法获取:
//加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
//创建数据库连接
Connectionconnection=DriverManager.getConnection(url);
一种是通过DataSource(数据源)对象获取:
DataSourceds=newMysqlDataSource();
((MysqlDataSource)ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource)ds).setUser("root");
((MysqlDataSource)ds).setPassword("root");
Connectionconnection=ds.getConnection();
Statement对象
Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。
Statement:用于执行不带参数的简单sql语句
PreparedStatement:用于执行带或者不带参数的sql语句,sql语句会预编译在数据库系统,执行速度快于Statement对象
CallableStatement :用于执行数据库存储过程的调用
主要的方法:
executeQuery() 方法执行后返回单个结果集的,通常用于select语句
ResultSet对象
ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。