JDBC的概念:
JDBC就是使用java语言操作关系数据库的一套API,全称为(java DataBase Connectivity)-----java数据库连接.
JDBC的本质:
是由sun公司定义的一套操作所有关系型数据库的规则,即接口,各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
JDBC好处:
各数据库厂商使用相同的接口,java代码不需要针对不同数据库分别开发
可随时替换底层数据库,访问数据库的java代码基本不变
同一套java代码,操作不同的关系型数据库:
使用JDBC的步骤:
a:创建工程,导入驱动jar包
创建新工程,对工程进行配置:
创建新模块:
用于存放jar包:
将下载好的jar包直接复制到lib下:
注意,jar一定要放在src下面,别放错啦
编写代码:
package MyJDBC; import java.sql.*; public class myjdbc { public static void main(String[] args) throws ClassNotFoundException, SQLException { //注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接 String url="jdbc:mysql://localhost:3306/已创建好的数据库名"; String username="root"; String password="你的数据库密码"; Connection connection= DriverManager.getConnection(url,username,password); //定义SQL String sql="update person set age=19 where id=2"; //获取执行SQL的对象Statement Statement statement=connection.createStatement(); //执行sql int count_row=statement.executeUpdate(sql); //释放资源 statement.close(); connection.close(); } }
执行完代码之后,在mysql中查询数据的变化情况:
注意:数据库以及表的创建等工作,一定要提前在mysql中完成
注意:
注册驱动 Class.forName("com.mysql.cj.jdbc.Driver");//mysql5以上的版本,该行代码可以不写,也
原因是下述文件已经为我们写了该驱动,因此可以自动加载驱动类:
JDBC API:
DriverManager:
注册驱动 Class.forName("com.mysql.cj.jdbc.Driver");
查看Driver源码:
获取连接:
//url:连接路径,user:用户名,password:密码 static Connection getConnection(String url,String user,String password);
url:
语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...
举例:
//localhost:表示本机 3306:是mysql服务器默认的端口号 person:数据库名称 jdbc:mysql://localhost:3306/person
注意:
如果连接的是本机mysql服务器,并且mysql服务器默认端口为3306,则URL可以简写为:jdbc:mysql:///数据库名称?参数键值对
配置useSSL=false参数,表示禁用安全连接方式,解决警告提示
Connection:
获取执行SQL的对象:
普通执行SQL对象:
Statement createStatement();
预编译SQL的执行SQL对象:
防止SQL注入
PreparedStatement prepareStatement(sql)
执行存储过程的对象:
CallableStatement prepareCall(sql)
事务管理:
MySQL事务管理:
开启事务:begin;/start transaction;
提交事务:commit;
回滚事务:rollback;
mysql默认自动提交事务
JDBC事务管理:Connection接口中定义了三个对应的方法
开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务:roolback();
package MyJDBC; import java.sql.*; public class myjdbc { public static void main(String[] args) throws ClassNotFoundException, SQLException { //获取连接 String url="jdbc:mysql://localhost:3306/MyJDBC"; String username="root"; String password="xxx"; Connection connection= DriverManager.getConnection(url,username,password); //定义SQL String sql1="update person set age=24 where id=1"; String sql2="update person set age=22 where id=2"; //获取执行SQL的对象Statement Statement statement=connection.createStatement(); //执行sql try { //开启事务 connection.setAutoCommit(false); int count_row1=statement.executeUpdate(sql1); System.out.println(count_row1); int count_row2=statement.executeUpdate(sql2); System.out.println(count_row2); //提交事务 connection.commit();//未出现异常则提交事务否则事务回滚 } catch (Exception throwables ) { //回滚事务 connection.rollback(); throwables.printStackTrace(); } //释放资源 statement.close(); connection.close(); } }
ide输出:
mysql数据库中:
数据发生更新!
当发生异常时:
idea输出:
mysql中的数据情况:
数据并没有更新!
Statement:
statement的作用:
执行SQL语句
int executeUpdate(sql):执行DML,DDL语句 //返回值: (1)DML语句影响的行数 (2)DDL语句执行后,执行成功也可能返回0
注:
DML数据操纵语言:对数据库中的数据进行一些简单操作,如insert、delete、update、select等。DML操作是可以手动控制事务的开启、提交和回滚的
DDL数据定义语言:对数据库中的某些对象(例如database、table)进行管理,如create、alter和drop,DDL操作是隐性提交的,不能rollback