基本步骤
- 构建连接(搭桥)
- 注册驱动,寻找材质,class.forName(),即选择连接到哪种数据库
- 确定对岸目标,建桥Connection,连接到具体数据库
- 执行操作(派人过桥提篮子拿数据)
- Satement(执行者)
- ResultSet(结果集)
- 释放连接(拆桥)
- connection.close()
Statement
- Statement执行者类
- 使用executeQuery()执行select语句,返回结果放在ResultSet
- 使用executeUpdate()执行insert/update/delete,返回修改的行数(int)
- 一个Statement对象一次只能执行一个命令
- ResultSet结果对象
- next()判断是否还有下一条记录
- getInt()/getString()/getDouble()…,括号里可以是索引位置(初始1),可以是列名
代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Collection {
public static void main(String[] args) {
try {
// MySQL5用的驱动url是com.mysql.jdbc.Driver,MySQL6以后用的是com.mysql.cj.jdbc.Driver
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("注册驱动成功!");
} catch (ClassNotFoundException e) {
System.out.println("注册驱动失败!");
e.printStackTrace();
return;
}
// 连接字符串格式 jdbc:mysql://localhost:3306/databasename,连接MySQL6需要指定时区serverTimezone
String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
Connection conn = null;
try {
// root&password是数据库的登录名密码
conn = DriverManager.getConnection(url, "root", "password");
Statement stmt = conn.createStatement();
System.out.println("创建执行者成功!");
ResultSet rs = stmt.executeQuery("select * from tbook;");
while (rs.next()) {
// 数据库中列元素下标从1开始
System.out.println(rs.getString(1) + ',' + rs.getString("bookname"));
}
rs.close();
stmt.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
表格数据
运行结果
注意事项
- ResultSet最好不要超过百条,否则及其影响性能
- ResultSet不是一口气加载所有的select结果数据
- Connection很昂贵,需要及时close
- Connection所用jar包和数据库要匹配