JDBC : 定义了一套 java 操作所有关系型数据库的规则(接口)
JDBC 本质:sun公司定义的一套关系型数据的接口,然后各个数据库厂商去实现这个接口,提供数据库去驱动jar包,我们可以使用这套接口编程,真正执行的代码是驱动Jar 包中的实现类
快速入门
1. 导入驱动Jar包
2. 注册驱动
3. 获取数据库连接对象 connection
4. 定义sql
5. 获取执行sql语句的对象 statement
6. 执行sql,接受返回结果
7. 处理结果
8. 释放资源
代码实现:
Public class JDBCDemo01{
Public static void main(String[] args) throws Exception{
//1、导入驱动Jar包
//复制Jar包到libs文件夹下
//右键文件夹AddasLibaray
//2、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3、获取数据库连接对象
Connectionconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
//4、定义sql语句
Stringsql="update account set balance=500 where id=1";//注意不要加分号
//5、获取执行sql的对象
Statementstate=conn.createStatement();
//6、执行sql语句
Int count=state.executeUpdate(sql);
//7、处理结果
System.out.println(count);
//8、释放资源
state.close();
conn.close();
}
}
各个对象的解释:
1. DiverManager 驱动管理对象
• 注册驱动 告诉我们的程序该使用哪一个数据库驱动Jar,mysql5之后可以不用写
1. static void registerDriver(Driver driver, DriverAction da)
2. 代码执行: Class.forname("com.mysql.jdbc.Driver");
3. 通过源码发现,"com.mysql.jdbc.Driver" 有静态代码块
• 获取数据库连接
方法 public static Connection getConnection(String url,String user, String password)
参数:
url: 指定连接的路径
1. 语法:jdbc:mysql://ip地址(域名):端口/数据库名称
2. 例子: jdbc:mysql://localhost:3306/db3
3. 如果是本地的,则可以简写成 jdbc:mysql:///db3
User: 用户名
Password: 密码
2、Connection 数据库连接对象
1、获取执行sql 的对象:
方法:
Statement createConnection()
Statement preparedConnection(String sql)
2、 管理事务
开启事务: void setAutoCommit(boolean autoCommit) :设置为false ,即开启事务
提交事务:commit()
回滚事务:rollback()
4、Statement 执行sql 的对象
执行sql:
Boolean execute(String sql)
Int executeUpdate(String sql) 执行DDL ,DML 语句,返回值是影响的行数
ResultSet executeQuery(String sql) 执行DQL 语言
5、ResultSet 结果集对象,封装查询结果
Boolean next( ) : 返回布尔数据,判断是否有数据,如果有数据返回true,否则返回false
Next() 游标移动到下一行
getXXX(参数): 获取数据 :
参数 1、int 代表列的编号,从1开始 getString(1)
2、String 列的名称,
注意:使用步骤:
1、游标向下移动一行
2、判断是够有数据
3、获取数据
6、PreparedStatement 执行sql 的对象
(1)Sql 注入问题 在sql 语句拼接的时候,造成的安全性问题
1、随便输入用户名,密码为 a' or 'a'='a
(2) 解决sql 注入问题
使用preparedStatement( ) 预编译的 对象
(3) 预编译的sql,使用?作为占位符
步骤:
1、导入驱动Jar包
2、注册驱动
3、获取数据库连接对象 connection
4、定义sql(这里sql 的参数使用 ?作为占位符)
5、获取执行sql语句的对象 PreparedStatement= connection.prepareStatement(String sql)
6、给? 赋值
方法:setXXX( 参数1,参数2):
参数1:? 的位置编号,从1开始
参数2:? 的值
7、执行sql,接受返回结果
8、处理结果
9、释放资源
以后尽量使用这个方法进行数据库的操作
1、防止SQL的注入
2、效率更高
JDBC 工具类:
简化书写:
1、注册驱动
2、抽取一个方法获取连接对象
JDBC 控制事务:
1.事务:包含多个步骤的业务操作,要么同时成功,要么同时失败
2.事务操作
1.开启事务
2.提交事务
3.回滚事务
3.使用connection 对象管理事务
* 开启事务: void setAutoCommit(boolean autoCommit) :设置为false ,即开启事务
执行sql 之前开启事务
* 提交事务:commit()
当所有sql执行完提交事务
* 回滚事务:rollback()
在catch中回滚事务