jdbc
JDBC就是使用JAVA语言操作关系型数据库的一套API 全称是Java数据库连接
-
JDBC本质
- sun公司定义的一套操作所有关系型数据库的规则,即接口。
- 各数据库厂商去实现这套接口,提供数据库驱动jar包。
- 我们可以使用这套接口编程,真正执行代码的是驱动jar包中的实现类。
-
JDBC的好处
- 同一套Java代码,操作不同的关系型数据库。
- 各数据库厂商使用相同的接口,JAVA代码不需要针对不同的数据库分别开发。
- 可随时替换底层的数据库,访问数据库的java代码基本不变。
//1.注册驱动 MYSQL5之后的版本可以省略注册驱动的步骤 自动加载jar包中的META-INF/services/java.sql.Driver文件中的驱动类 Class.forName("com.mysql.cj.jdbc.Driver"); //2. 获取连接对象 connection String url = "jdbc:mysql://127.0.0.1:3306/cyt?useSSL=false"; String username = "root"; String password = "1234"; Connection connection = DriverManager.getConnection(url, username, password); //3.定义SQL语句 String sql = "select * from tb_account"; //4.获取执行SQL的对象 statement Statement statement = connection.createStatement(); //5.执行SQL语句 ResultSet resultSet = statement.executeQuery(sql); //循环打印获取到的数据 while (resultSet.next()){ String Name = resultSet.getString(1); double Money = resultSet.getDouble(2); System.out.println(Name); System.out.println(Money); System.out.println("---------------"); } //依次释放打开的资源 从最后打开的资源依次释放 resultSet.close(); statement.close(); connection.close(); }
1. JDBC API详解
-
DriverManager
-
DriverManager(驱动管理类)作用:
-
注册驱动
//com.mysql.cj.jdbc.Driver内的源码 DriverManager.registerDriver(new Driver());
-
获取数据库链接
public static Connection getConnection(String url, String user, String password)
- url :
- 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
- 实例:jdbc:mysql://127.0.0.1:3306/cyt?useSSL=false
- 细节:如果连接的是本机mysql服务器,并且mysql默认端口是3360,则url可以简写为:jdbc:mysql:///数据库名称/…
- useSSL=false参数。禁用安全连接方式,解决警告提示。
- user:用户名
- password:密码
- url :
-
-
Connection
- 获取执行SQL的对象
-
普通执行SQL对象
Statement createStatement()
-
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement preparedStatement(sql)
-
执行存储过程的对象
CallableStatement prepareCall(sql)
- 事务管理
-
MYSQL事务管理
-
开启事务:BEGIN;/START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
MYSQL默认自动提交事务
-
JDBC事务管理:Connection接口中定义了3各对应的方法
-
开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务。
提交事务:commit()
回滚事务:rollback()
-
Statement
-
作用:
-
执行SQL语句
int executeUpdate(sql) //执行DML 、DDL语句 //返回值:DML语句影响的行数。DDL语句执行后,执行成功也可能返回0.
ResultSet executeQuery(sql) //执行DQL语句 //返回值:ResultSet结果集对象
-
-
-
ResultSet
-
ResultSet(结果集对象)作用:
-
封装了DQL查询语句的结果
ResultSet statement.executeQuery(sql) 执行DQL语句 ,返回ResultSet对象
-
获取查询结果
-
boolean next() : (1) 将光标从当前位置向前移动一行 (2)判断当前行是否为有效行
返回值:
true:有效行,当前行有数据
false:无效行,当前行没有数据
是
xxx getxxx(参数):获取参数
xxx :数据类型; 如int getint(参数)
int : 列的编号,从1开始
String :列的名称
-
-
while (resultSet.next()){
String Name = resultSet.getString(1);
double Money = resultSet.getDouble(2);
System.out.println(Name);
System.out.println(Money);
System.out.println("---------------");
}
-
PreparedStatement
-
作用:
-
预编译SQL语句并执行:预防SQL注入问题
-
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法
-
String sql = "select * from sys_user where username = ? and password = ?"; String name= "zhangsan"; // String pwd = "'or'1'='1"; //模仿SQL注入 String pwd = "123"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1,name); preparedStatement.setString(2,pwd); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { System.out.println("登录成功"); }else { System.out.println("登录失败"); } resultSet.close(); preparedStatement.close(); connection.close();
-
-