Java JDBC连接MySQL数据库和功能类详解
JDBC快速入门
- ① 导入
mysql-connector-java.jar
包 - ② 注册驱动
- ③ 获取数据库连接
- ④ 获取执行者对象
- ⑤ 执行
sql
语句,并接收结果 - ⑥ 处理结果
- ⑦ 释放资源
代码演示
-
① 导入
mysql-connector-java.jar
包在工程里创建一个
lib
文件夹,将jar
包文件放到里面去,然后选中jar
包右键点击Add as Library...
然后点击
OK
-
② 注册驱动
Class.forName("com.mysql.jdbc.Driver");
-
③ 获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_book", "root", "root");
-
④ 获取执行者对象
Statement st = conn.createStatement();
-
⑤ 执行
sql
语句,并接收结果String sql = "SELECT * FROM book"; ResultSet rs = st.executeQuery(sql);
-
⑥ 处理结果
while(rs.next()){ System.out.println(rs.getInt("book_id") + "\t" + rs.getString("book_name") + "\t" + rs.getString("book_author") + "\t" + rs.getString("book_publisher")); }
-
⑦ 释放资源
rs.close(); st.close(); con.close();
功能类详解
DriverManger 驱动管理对象
-
a. 注册驱动
-
注册给定驱动程序: static void registerDriver(Driver driver);
-
注册驱动时使用:
Class.forName("com.mysql.jdbc.Driver");
-
为什么不直接调用
registerDriver
去注册驱动呢?因为在
com.mysql.jdbc.Driver
类中存在着静态代码块static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } }
这个代码块中已经调用了
registerDriver
方法去注册驱动了,如果我们直接调用registerDriver
方法去注册驱动,将会重复调用两次registerDriver
方法。而通过Class.forName("com.mysql.jdbc.Driver")
这种方式将Driver
类使用一下,而这个类一旦被使用到,里面的静态代码块将会被执行,从而完成驱动的注册 -
mysql5
之后的版本可以省略注册驱动步骤,因为在jar包中,存在一个java.sql.Driver
配置文件,文件中指定了com.mysql.jdbc.Driver
-
-
b. 获取数据库连接
- 获取数据库对象:
static Connection getConnection(String url, String user, String password);
- 返回值:
Connection
数据库连接对象 - 参数:
- url:指定连接的路径。语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称
- user:用户名
- password:密码
- url:指定连接的路径。语法:
- 获取数据库对象:
Connection 数据库连接对象
- a. 获取执行者对象
- 获取普通执行者对象:
createStatement();
,返回一个Statement
对象 - 获取预编译执行者对象:
prepareStatement(String sql)
,返回一个PreparedStatement
对象
- 获取普通执行者对象:
- b. 管理事务
- 开启事务:
setAutoCommit(boolean autoCommit);
参数为 false 则开启事务 - 提交事务:
commit();
- 回滚事务:
rollback()
- 开启事务:
- c. 释放资源
- 释放资源:
void close();
- 释放资源:
Statement 执行sql语句对象
- a. 执行DML语句(增删改操作):
int executeUpte(String sql);
- 返回值类型为 int :返回影响的行数
- 参数sql:可以执行
insert
、update
、delete
语句
- b. 执行DQL语句(查询操作):
ResultSet executeQuery(String sql);
- 返回值类型为 ResultSet :封装查询的结果
- 参数 sql :可以执行的
select
语句
- c. 释放资源
- 释放资源:
void close();
- 释放资源:
ResultSet 结果集对象
- a. 判断结果集中是否还有数据:
boolean next()
- 有数据返回 true ,并将索引向下移动一行
- 没有数据返回 false
- b. 获取结果集中的数据:
XXX getXxx("列名");
- XXX 代表着数据类型(获取某一列对应的类型),例如
String getString("name"); int getInt("age");
- XXX 代表着数据类型(获取某一列对应的类型),例如
- c. 释放资源
- 释放资源:
void close();
- 释放资源: