一、JDBC简介
1.什么是jdbc
JDBC全称:java database connectivity,简称jdbc, 翻译就是 Java 数据库连接。
2.jdbc有什么作用:
是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。可以通过jdbc代码实现对数据库的操作。包括DDL,DML,DQL等。
二、JDBC执行步骤
1.导入驱动jar包
链接:https://pan.baidu.com/s/1mP3Nb4wKd1VrBrGmbD3QDg
提取码:t0kh
导入jar包步骤
- 1.在你的web-INF目录下创建一个lib包,专门放置jar包
- 2.将jar包复制到lib路径下
- 3.右键单击,选择add as library
- 4.将level改成module library 点击OK
如果你的lib路径下的jar包有以下小箭头,就添加成功了
2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
3.获取连接
Connection connection = DriverManager.getConnection(url, username, password);
4.定义SQL语句
String sql = "sql语句";
5.获取执行SQl对象
Statement statement = connection.createStatement();
6.执行sql语句
statement.executeUpdate(sql);
7.处理结果
8.释放资源
statement.close();
connection.close();
package com.example.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class jdbcdemo {
public static void main(String[] args) throws Exception {
// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获取连接
String url = "jdbc:mysql://127.0.0.1:3306/dbcsdn";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);
// 3.定义sql语句,这里以创建一个work_user表为例
String sql1 = "use dbcsdn";
String sql2 = "create table work_user(" +
"id int(5) primary key auto_increment," +
"username varchar(20) unique," +
"password varchar(20))";
// 4.获取sql对象
Statement statement = connection.createStatement();
// 5.执行sql
int l1 = statement.executeUpdate(sql1);
int l2 = statement.executeUpdate(sql2);
// 6.处理结果
System.out.println("sql1受影响条数"+l1);
System.out.println("sql2受影响条数"+l2);
// 7.释放资源
statement.close();
connection.close();
}
}
三、执行步骤中类的简介
1、DriverManager类
DriverManager类下面提供的全是静态方法,只需要用类名点方法就可以调用,不需要实例化。它的作用主要有两个:
1.注册驱动: registerDriver()
Class.forName("com.mysql.jdbc.Driver");
其中的Driver类里面有一个静态代码块,有一句DriverManager. registerDriver()完成驱动的注册
2.获取连接:getConnection(url, username, password);
这个方法可以通过mysql的URL地址、数据库用户名、密码获取连接。传入的参数就是对应的URL地址:形如jdbc.mysql://ip地址:端口号/数据库名称。如果是本机连接,IP地址可以写成127.0.0.1或者localhost。如果端口号是默认的3306,可以写成缩写格式:jdbc.mysql:///数据库名
Connection connection = DriverManager.getConnection(url, username, password);
2.Connection类
connection类主要有两个作用:一是可以获取执行sql的对象,二是管理事务的功能。我们都知道数据库里面的数据局一旦改变就是永久的,所以需要一个管理事务功能验证sql语句的正确性。在mysql中事务管理通过begin开启事务,rollback回滚事务,commit提交事务。在jdbc里面通过connection类的特定方法也可以实现这三个功能。
-
获取执行sql的对象用到的方法。
第一个就是普通执行sql对象:connection.createStatement()方法,返回一个Statement对象。Statement statement = connection.createStatement();
statement类下面有两个对数据进行操作的方法,分别是excuteUpdate(),excuteQuery()。excuteUpdate()这个方法主要是实现DML(操作数据),DDL(操作数据库,操作表)的代码。执行成功之后会返回一个值,这个值就是受影响的行数。但是DDL中就算执行成功之后有可能是0,因为创建一个新的表这样的sql代码受影响行数是0。excuteQuery()主要是实现DQL(查询语句),这个方法会返回一个resultSet对象,这个对象主要用于接受查询到的内容。
演示excuteUpdate()方法。
package com.example.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class jdbcdemo {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://127.0.0.1:3306/dbcsdn";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);
String sql = "insert into work_user values " +
"(1,'name1','password1')," +
"(2,'name2','password2');";
Statement statement = connection.createStatement();
int i = statement.executeUpdate(sql);
System.out.println("受影响的行数是:"+i+"行");
statement.close();
connection.close();
}
}
第二个是防止sql注入的prepareStatement()方法,其中传入sql语句,可以防止sql注入,最终返回一个PrepareStatement对象。
2.jdbc事务管理用法举例
package com.example.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class jdbcdemo {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://127.0.0.1:3306/dbcsdn";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);
String sql1 = "insert into work_user values " +
"(5,'name5','password5')," +
"(6,'name6','password6');";
String sql2 = "update work_user set username = 'name002' where id = 2;";
Statement statement = connection.createStatement();
try {
// 开启事务
connection.setAutoCommit(false);
int l1 = statement.executeUpdate(sql1);
System.out.println("sql1受影响的行数是:"+l1+"行");
int l2 = statement.executeUpdate(sql2);
System.out.println("sql2受影响行数是:"+ l2+ "行");
// 提交事务
connection.commit();
} catch (Exception e) {
//回滚事务
connection.rollback();
e.printStackTrace();
}
statement.close();
connection.close();
}
}
3、ResultSet类
作用:对DQL查询语句进行封装,返回一个resultset对象,并且可以通过特定方法获取查询结果。
-
对DQL查询语句封装
ResultSet resultSet = statement.executeQuery(sql);
-
通过特定方法获取查询结果
next()方法。返回Boolean类型,主要用于判断当前行是否有有效数据,若有就返回true,否则返回false。
getXXX()方法。通过resultSet获取数据,对应数据类型定义对应方法。传参可以为字段名,也可以是列对应的编号。
package com.example.jdbc;
import java.sql.*;
public class jdbcdemo {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://127.0.0.1:3306/dbcsdn";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);
String sql = "select * from work_user";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("username");
String psd = resultSet.getString("password");
System.out.print("id:"+id+"\t");
System.out.print("username:"+name+"\t");
System.out.println("password:"+psd);
System.out.println("---------------");
}
resultSet.close();
statement.close();
connection.close();
}
}