文章目录
前言
jdbc编程步骤:
1)注册驱动 DriverManager.registerDriver(new Driver());
2)获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名","用户名","密码");
3)获取发送sql语句对象 PreparedStatement pst = conn.preparedStatement("select * from 表名 where username=?")
优点:1)防止sql注入 2)效率高
4)发送sql
查询:ResultSet rs = pst.executeQuery();
增删改:int i = pst.executeUpdate(); 影响行记录数
5)处理结果集
while(rs.next()){
rs.getInt(第几列或者字段名或者别名)
}
6)释放资源
数据库连接池:
优化连接。初始化连接池的时候先从数据库服务器获取一部分连接放到连接池中,当用户访问的时候直接从连接池中获取,使用完之后再将连接放回到数据库连接池中。
常用的连接池实现组件有以下这些
1. 阿里巴巴-德鲁伊Druid连接池:Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。
该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求。
2. C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
C3P0有自动回收空闲连接功能。
3. DBCP(DataBase Connection Pool)数据库连接池,是Apache上的一个Java连接池项目。
dbcp没有自动回收空闲连接的功能。
Druid(德鲁伊)数据库连接池
1)导入jar包
2)获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(Properties p);
3)从连接池中获取连接对象
Connection conn = ds.getConnection();
一、JDBC核心API的介绍
1、JDBC会用到的包
1. java.sql:JDBC访问数据库的基础包,在JavaSE中的包。如:java.sql.Connection
2. javax.sql: JDBC访问数据库的扩展包
3. 数据库的驱动,各大数据库厂商来实现。如:MySQL的驱动:com.mysql.jdbc.Driver
2、JDBC四个核心对象
这几个类都是在java.sql包中
1. DriverManager(类):
2. 数据库驱动管理类。这个类的作用:
3. 1)注册驱动;
4. 2)创建java代码和数据库之间的连接,即获取Connection接口;
5. Connection(接口):
6. 是一个接口, 建立数据库连接的一个接口。
7. 作用:建立数据库和java代码之间的连接。表示与数据库创建的连接
8. Statement(接口)、PreparedStatement(接口) (解决安全隐患问题,比如sql注入的问题):
9. 数据库操作,向数据库发送sql语句。执行SQL语句的对象
10. ResultSet:
11. 结果集或一张虚拟表。
12. Statement 发送sql语句,得到的结果 封装在 ResultSet 中。
3、JDBC访问数据库的步骤
1. 由DriverManager注册驱动程序
2. 创建和数据库的连接对象Connection
3. 由客户端发送SQL语句给服务器执行,SQL语句封装成Statement对象
4. 查询到的结果集封装成ResultSet对象
5. 在客户端可以从ResultSet中取出数据,处理结果集
6. 释放资源,关闭连接对象
二、JDBC注册驱动
API介绍
java.sql.DriverManager
类用于注册驱动。提供如下方法注册驱动
static void registerDriver(Driver driver)
向 DriverManager 注册给定驱动程序。
说明:
1)执行完上述语句之后,DriverManager就可以管理mysql驱动了。
2)当前的DriverManager.registerDriver(Driver driver);方法的参数是Driver,这是jdbc的一个接口,所以我们需要给定实现该接口的实现类。如果我们连接的是mysql数据库,那么需要导入mysql数据库提供的包,也就是com.mysql.jdbc.Driver; 下的Driver类。如果我们连接的是oracle数据库,那么需要导入oracle数据库提供的包。
案例代码
public class Demo01 {
public static void main(String[] args) throws Exception {
// 注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
}
}
说明:这里的new Driver()的类Driver就是来自mysql数据库。
通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”将自己进行注册
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
// 自己自动注册
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
public Driver() throws SQLException {
}
}
注意:使用
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
,存在以下方面不足
- 驱动被注册两次
使用Class.forName("com.mysql.jdbc.Driver");
加载驱动,这样驱动只会注册一次
public class Demo01 {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver"); // 后期可以将"com.mysql.jdbc.Driver"字符串写在文件中.
}
}
通常开发我们使用Class.forName() 加载驱动。Class.forName("com.mysql.jdbc.Driver");
会走Driver类的静态代码块。在静态代码块中注册一次驱动。
小结:
1、注册MySQL驱动使用
Class.forName("com.mysql.jdbc.Driver");
2、从jdk4.0开始,对于我们java开发工程师,第一步不用书写了,底层帮助我们使用com.mysql.jdbc.Driver类先注册驱动了.
驱动必须注册,只是不用我们书写代码注册了。
三、 获取连接
API介绍
java.sql.DriverManager
类中有如下方法获取数据库连接
static Connection getConnection(String url, String user, String password)
连接到给定数据库 URL ,并返回连接。
参数说明
String url:连接数据库的URL,用于说明连接数据库的位置
String user:数据库的账号
String password:数据库的密码
连接数据库的URL地址格式:协议名:子协议://服务器名或IP地址:端口号/数据库名?参数=参数值
MySQL写法:jdbc:mysql://localhost:3306/test_db
(或者jdbc:mysql://127.0.0.1:3306/test_db
)
如果是本地服务器,端口号是默认的3306,则可以简写:jdbc:mysql:///test_db
注意事项
如果数据出现乱码需要加上参数: ?useUnicode=true&characterEncoding=utf8,表示让数据库以UTF8编码来处理数据。
如: jdbc:mysql://localhost:3306/day04_db?useUnicode=true&characterEncoding=utf8
案例代码
public class Demo01 {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
// 连接到MySQL
// url: 连接数据库的URL
// user: 数据库的账号
// password: 数据库的密码
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test_db", "root", "root");
System.out.println(conn);
}
}
小结
- JDBC获取数据库连接使用哪个API?
DriverManager.getConnection(数据库url, 账号, 密码)
- 通过JDBC连接mysql的URL写法?
jdbc:mysql://服务器ip地址:3306/数据库
3.如果连接mysql服务器在本地,那么url可以简写:
jdbc:mysql:///数据库
JDBC实现对单表数据增、删、改、查
API介绍
获取Statement对象
在java.sql.Connection
接口中有如下方法获取到Statement
对象
Statement createStatement()
创建一个 Statement 对象来将 SQL 语句发送到数据库
Statement的API介绍
int executeUpdate(String sql)
根据执行的DML(INSERT、UPDATE、DELETE)语句,返回受影响的行数
ResultSet executeQuery(String sql)
根据查询语句返回结果集,只能执行SELECT语句
注意:在MySQL中,只要不是查询就是修改。
executeUpdate:用于执行增删改
executeQuery:用于执行查询
使用步骤
- 注册驱动
- 获取连接
- 获取Statement对象
- 使用Statement对象执行SQL语句
- 释放资源
案例代码
public class Demo03 {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///test4_db", "root", "root");
System.out.println(conn);
// 从连接中拿到一个Statement对象
Statement stmt = conn.createStatement();
// 1.插入记录
String sql = "insert into user values(null, 'zhangsan', '123abc')";
int i = stmt.executeUpdate(sql);
System.out.println("影响的行数:" + i);
// 2.修改记录
sql = "update user set username='lisi' where username='wangwu'";
i = stmt.executeUpdate(sql);
System.out.println("影响的行数:" + i);
// 3.删除记录
sql = "delete from user where id = 2";
i = stmt.executeUpdate(sql);
System.out.println("影响的行数:" + i);
// 释放资源
stmt.close();
conn.close();
}
}
总结
本篇是对JDBC篇章的基本了解,初步的实现数据库的连接。
如有错误,请联系:1375909085@qq.com
欢迎指正!