JDBC学习(一)—JDBC的概念/JDBC相关类/如何使用JDBC
01 JDBC概念
JDBC:Java Data Base Connectivity,Java数据库连接
SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC。
应用程序必须要通过相应的数据库驱动程序与数据库进行交互。
因此,开发人员想要操作数据,需要通过jdbc加载具体的驱动。
02 JDBC相关类
-
DriverManager类
DriverManager用于加载驱动,并创建与数据库的链接。
常用方法:
- DriverManager.registerDriver(new Driver());在实际开发中并不推荐采用registerDriver方法注册驱动。此方式会导致驱动程序注册两次,在内存中会有两个Driver对象;程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。推荐方式:Class.forName(“com.mysql.jdbc.Driver”);采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
- DriverManager.getConnection(url, user, password);获取数据库连接
- 注意url的书写格式:协议 :子协议 : //主机:端口 + 数据库 + 参数
- 常用数据库URL地址的写法:
- Oracle写法:jdbc:oracle:thin:@localhost:1521:数据表名称
- SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=数据表名称
- MySql写法:jdbc:mysql://localhost:3306/数据表名称,如果连接的是本地的Mysql数据库,并且连接使用的端口是3306,那么的url地址可以简写为: jdbc:mysql:///数据库
-
Connection类
用于代表数据库的链接,客户端与数据库所有交互都是通过connection对象完成的.
注意:Connection对象,是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机
常用方法:
createStatement():创建向数据库发送sql的statement对象。 prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。 prepareCall(sql):创建执行存储过程的callableStatement对象。 setAutoCommit(boolean autoCommit):设置事务是否自动提交。 commit() :在链接上提交事务。 rollback() :在此链接上回滚事务。
-
Statement类
用于向数据库发送SQL语句
注意:该对象需要释放资源
常用方法:
executeQuery(String sql) :用于向数据发送查询语句。 executeUpdate(String sql):用于向数据库发送insert、update或delete语句 execute(String sql):用于向数据库发送任意sql语句 addBatch(String sql) :把多条sql语句放到一个批处理中。 executeBatch():向数据库发送一批sql语句执行。
-
ResultSet类
用于封装Sql语句的执行结果。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一
行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行
的数据。可以理解为迭代器。注意:该对象需要释放资源
常用方法:
//滚动方法: next():移动到下一行 Previous():移动到前一行 absolute(int row):移动到指定行 beforeFirst():移动resultSet的最前面。 afterLast() :移动到resultSet的最后面。 //可以通过get获取任意类型的数据,如 : getObject(int index) getObject(string columnName) getString(int index) getString(String columnName)
示例:
while (resultSet.next()){ System.out.println(resultSet.getObject("columnName1")); System.out.println(resultSet.getObject("columnName2")); System.out.println(resultSet.getObject("columnName3")); System.out.println(resultSet.getObject("columnName4")); }
03 如何使用JDBC
-
准备步骤
-
下载驱动:通过下载地址https://mvnrepository.com/artifact/mysql/mysql-connector-java下载jar包
-
导jar包,可以参考文章https://blog.csdn.net/yinyanyao1747/article/details/90751024详细步骤
-
搭建实验环境
- 在mysql中创建一个库,并创建数据表,插入数据。以下列数据库为例:
create database jdbcStudy character set utf8 collate utf8_general_ci; use jdbcStudy; create table users( id int primary key, name varchar(40), password varchar(40), email varchar(60), birthday date ); insert into users(id,name,password,email,birthday) values(1,'zhansan','123456','zs@sina.com','1980-12-04'); insert into users(id,name,password,email,birthday) values(2,'lisi','123456','lisi@sina.com','1981-12-04'); insert into users(id,name,password,email,birthday) values(3,'wangwu','123456','wangwu@sina.com','1979-12-04');
-
-
使用JDBC
package com.hooi.demo1;
import java.sql.*;
public class JDBCTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//step1:加载驱动
Class.forName("com.mysql.jdbc.Driver");
//step2:获取连接
String username ="root";
String passwd = "123456";
String url ="jdbc:mysql://localhost:3306/jdbcstudy";
Connection connection = DriverManager.getConnection(url, username, passwd);
//step3:获取用于向数据库发送sql语句的statement对象
Statement statement = connection.createStatement();
//step4:用string包装sql语句
String sql ="select id,name,password,email FROM users";
//step5:执行sql语句
ResultSet resultSet = statement.executeQuery(sql);
//step6:获取执行结果
while (resultSet.next()){
System.out.println(resultSet.getObject("id"));
System.out.println(resultSet.getObject("name"));
System.out.println(resultSet.getObject("password"));
System.out.println(resultSet.getObject("email"));
}
//step7:释放资源,关闭连接
resultSet.close();
statement.close();
connection.close();
}
}