JDBC
即使用java语言操作关系型数据库的一套API。
本质:
- 官方定义的一套操作所有关系型数据库的规则,即接口;
- 各个数据库厂商去实现这套接口,提供数据库驱动jar包;
- 可以使用这套接口(JDBC)去编程,但是真正执行代码的是驱动jar包中的实现类。
好处:
- 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;
- 可以随时更换底层数据库,访问数据库的java代码基本不变。
大体步骤
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/bank_175?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8";
String username="root";
String password="123456";
Connection conn= DriverManager.getConnection(url,username,password);
String sql="update account_175 set balance=500.0 where account_number='A_101' ";
Statement stmt=conn.createStatement();
int count=stmt.executeUpdate(sql);
System.out.println("受影响的行:"+count);
stmt.close();
conn.close();
JDBC API
DriverManager
驱动管理类的作用:
1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
但是对于MYSQL 5 之后的驱动包,可以省略注册驱动的步骤。自动加载jar包中如下的驱动类:
然后你发现和上述代码中的字符串一模一样()

2.获取连接
static Connection | getConnection(String url,String user,String password)
user 和password 没啥好说的,即自己数据库用户账密(一般用的都是root)。所以主要就是url。
url ,我们在计网中学过,它叫统一资源定位符。在这里,url 是连接数据库的路径。
- 语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2... - 示例:
jdbc:mysql://127.0.0.1:3306 - 细节:
jdbc:mysql:// 表明是JDBC 的mysql 的协议。- 如果连接的是本机的
mysql 服务器,并且mysql 服务器默认端口是3306(或许你自己改了,一般没改就是这个捏),那么可以简写成jdbc:mysql:///数据库名称?参数键值对1&参数键值对2... - 配置
useSSL=false 参数,禁用安全连接方式,解决警告提示。
Connection
数据库连接对象的作用:
1.获取执行SQL的对象
Statement createStatement()
PreparedStatement prepareStatement(sql)
CallableStatement prepareCall(sql)
2.事务管理
MYSQL 的事务管理:
begin;start transaction;
commit;
rollback;
JDBC 的事务管理:
setAutoCommit(boolean autoCommit);
setAutoCommit(false);
commit();
rollback();
Statement
Statement 的作用:执行SQL语句。
1.执行SQL语句
int executeUpdate(sql);
ResultSet executeQuery(sql);
ResultSet
结果集对象的作用:
1.封装DQL查询语句的结果
ResultSet stmt.executeQuery(sql);
boolean next();
xxx getXxx(params);
while(re.next()){
rs.getXxx();
}
这里可以将每一行的数据载入ArrayList。
通过定义一个类:装载所有的schema捏。
PreparedStatement
PreparedStatement作用:
SQL注入:通过操作输入事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
String sql="select * from user where username = ? and password =?";
PreparedStatement pstmt=conn.prepareStatement(sql);
executeUpdate();
executeQuery();
1.预编译SQL
useSeverPrepStmts=true
鹅鹅鹅,下面这个可能不需要捏。
加入MYSQL的日志my.ini (重启完成)
log-out=FILE
general-log=1
general_log_file="D:\mysql.log"
slow-query-log=1
slow-query-log-file="D:\mysql_slow.log"
long_query_time=2
数据库连接池
数据库连接池:是个容器,负责分配、管理数据库连接(Connection )。
- 它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;
- 释放空间时间超过最大空闲时间的数据库连接来避免因为没有释放数据库而引起的数据库连接遗漏。
好处
实现
标准接口:DataSource
Connection getConnection();
常见的数据库连接池:
- DBCP
- C3P0
- Druid(One of Best)
使用步骤
- 导入jar包 druid-1.1.10.jar
- 定义配置文件
- 加载配置文件
- 获取数据库连接池对象
- 获取连接
捣鼓半天,成功了。
 urce`
Connection getConnection();
常见的数据库连接池:
- DBCP
- C3P0
- Druid(One of Best)
使用步骤
- 导入jar包 druid-1.1.10.jar
- 定义配置文件
- 加载配置文件
- 获取数据库连接池对象
- 获取连接
捣鼓半天,成功了。

|