JDBC----笔记
- JDBC
概念:java DataBase Connectivity Java数据库链接,Java语言操作数据库
本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
快速入门
1.导入驱动jar包 pom依赖
2.注册驱动
3.获取数据库链接对象 Connection
4.定义sql
5.获取执行sql语句对象Statement
6.执行sql,接收返回结果
7.处理结果
8.释放资源
准备
String driver = "com.mysql.cj.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/db_1?useUnicode=true&characterEncoding=UTF-8"; String username = "dog"; String password = "cat";
1、导入驱动依赖
最新:https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/
1 <dependency> 2 <groupId>mysql</groupId> 3 <artifactId>mysql-connector-java</artifactId> 4 <version>8.0.18</version> 5 </dependency>
2.注册驱动
Class.forName(driver);
3.获取数据库链接对象 Connection
Connection connection = DriverManager.getConnection(url, "dog", "cat");
4.定义sql
String sql = "select username,password from user";
5.获取执行sql语句对象Statement
Statement statement = connection.createStatement();
6.执行sql,接收返回结果
ResultSet resultSet = statement.executeQuery(sql);
7.处理结果
while (resultSet.next()) { System.out.print("username: " + resultSet.getString("username")); System.out.println("\t\tpassword: " + resultSet.getString("password")); }while (resultSet.next()) { System.out.print("username: " + resultSet.getString("username")); System.out.println("\t\tpassword: " + resultSet.getString("password")); }
8.释放资源
resultSet.close();
connection.close();
DriverManager 驱动管理对象
1.注册驱动
static void registerDriver(Driver driver) 注册与给定的驱动程序 DriverManager
写代码使用 Class.forName("com.mysql.cj.jdbc.Driver") 此段代码可以不写,程序会默认调用此方法
/**
*com.mysql.cj.jdbc.Driver包中,有此静态代码块
**/
static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } }
2.获取数据库连接
public static Connection getConnection(String url, String user, String password)
Connection 数据库连接对象
1.获取执行sql的对象
Statement createStatement() throws SQLException;
PreparedStatement prepareStatement(String sql) throws SQLException;
2.管理事务
* 开启事务 setAutoCommit(boolean autoCommit); false为开启事务 true为关闭事务
* 提交事务 commit();
* 回滚事务 rollback();
Statement sql执行对象
boolean execute(String sql) 可以执行任意的sql
int executeUpdate(String sql) 执行DML(insert、update、delete)语句,DDL(create、alter、drop)语句
* 返回值影响的行数
ResultSet executeQuery(String sql) 执行DQL(select)语句
存在SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串拼接,会造成安全问题
ResultSet 结果集对象
next() 游标下移一位
getXX() XX可以用getInt(),getString()
PreparedStatement sql执行对象 Statement的子类
解决了sql注入问题
预编译的sql:参数使用 ? 作为占位符
效率更高
JDBC控制事务
1、事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败
2、操作
- 开启事务 setAutoCommit(false);
- 提交事务 commit();
- 回滚事务 rollback
3、使用Connection对象来管理事务
数据库连接池
1.概念 :其实就是一个容器(集合),存放数据库连接的容器
当系统初始化之后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器
2.好处
节约资源
用户访问效高
3.实现
标准接口 DataSource javax.sql包下的
方法
获取连接 getConnection()
归还连接 Connection.close(); 如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会关闭连接了,而是归还连接
一般由数据库厂商来实现
C3P0:数据库连接池技术
Druid:数据库连接池技术,由阿里巴巴提供
浙公网安备 33010602011771号