JDBC(一)
DriverManager 驱动管理者
Connection 连接(代表数据库)
Statement 要发送的SQL对象(不安全)
PreparedStatement 要发送的SQL对象(安全,预编译)
ResultSet 结果集
配置信息【此处为高版本MySQL】,因为在加载驱动时需要jdbc,连接数据库时需要url,username,password这3个参数,故直接定义在固定步骤前面。
jdbc= com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
username=root
password=123456
JDBC固定步骤(一)
1.加载驱动
2.连接数据库,代表数据库
3.向数据库发送SQL的对象Statement :CRUD
4.编写SQL(根据业务,不同的SQL)
5.执行SQL
6.关闭连接
【说明】:
1、2、3、6都是不变的。
4、5可根据业务变化。
查询:执行时使用 statement.executeQuery(sql);
增删改:执行时使用 statement.executeUpdate(sql);
示例1 :Statement执行查询语句 ----> executeQuery(sql)
public class TestJDBC {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//配置信息
String url = "jdbc:mysql://localhost:3306/jdbc?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false";
String username = "root";
String password = "123456";
String jdbc = "com.mysql.cj.jdbc.Driver";
//1.加载驱动
Class.forName(jdbc);
//2.连接数据库,代表数据库 DrierManager驱动管理者
Connection connection = DriverManager.getConnection(url, username, password);
//3.向数据库发送SQL的对象--Statement(不安全)、PrepareStatement(安全,预编译):CRUD
Statement statement = connection.createStatement();
//4.编写SQL
String sql = "select * from users";
//5.执行查询SQL,返回一个ResultSet:结果集
ResultSet rs = statement.executeQuery(sql);
while(rs.next()){
System.out.println("id="+rs.getObject("id"));
System.out.println("name="+rs.getObject("name"));
System.out.println("password="+rs.getObject("password"));
System.out.println("email="+rs.getObject("email"));
System.out.println("birthday="+rs.getObject("birthday"));
}
//6.关闭连接,释放资源(一定要做)先开后关
rs.close();
statement.close();
connection.close();
}
}
JDBC固定步骤(二):预编译
1.加载驱动
2.连接数据库,代表数据库
3.编写SQL(根据业务,不同的SQL)
4.向数据库发送能预编译SQL的PreparedStatement对象:CRUD
5.执行SQL
6.关闭连接
【说明】:
固定步骤二和一的区别就在于向数据库发送SQL的对象不同,一个为Statement (不安全),另一个为PreparedStatement(安全),二者均能执行CRUD。因为PreparedStatement需要预编译SQL,所以固定步骤中,调整了3、4的位置,先编写SQL,后发送。
同理--》
查询:执行时使用 ps.executeQuery(sql);
增删改:执行时使用 ps.executeUpdate(sql);
其实二者均还有 execute() 方法,只是用专门负责查询和专门负责增删改的方法,效率更高。
示例2:PreparedStatement 执行查询语句 ----> executeQuery()
public class TestJDBC2 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//配置信息
String url = "jdbc:mysql://localhost:3306/jdbc?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false";
String username = "root";
String password = "123456";
String jdbc = "com.mysql.cj.jdbc.Driver";
//1.加载驱动
Class.forName(jdbc);
//2.连接数据库,代表数据库 DrierManager驱动管理者
Connection connection = DriverManager.getConnection(url, username, password);
//3.编写SQL
String sql = "select * from users";
//4.向数据库发送能预编译SQL的PreparedStatement对象(安全)
PreparedStatement ps = connection.prepareStatement(sql);
//5.执行SQL
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println("id="+rs.getObject("id"));
System.out.println("name="+rs.getObject("name"));
System.out.println("password="+rs.getObject("password"));
System.out.println("email="+rs.getObject("email"));
System.out.println("birthday="+rs.getObject("birthday"));
}
//6.关闭连接,释放资源(一定要做)先开后关
rs.close();
ps.close();
connection.close();
}
}
示例3:Statement执行修改语句 ---> executeUpdate(sql)
public class TestJDBC3 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//配置信息
String url = "jdbc:mysql://localhost:3306/jdbc?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false";
String username = "root";
String password = "123456";
String jdbc = "com.mysql.cj.jdbc.Driver";
//1.加载驱动
Class.forName(jdbc);
//2.连接数据库,代表数据库 DrierManager驱动管理者
Connection connection = DriverManager.getConnection(url, username, password);
//3.向数据库发送SQL的对象--Statement(不安全)、PrepareStatement(安全,预编译):CRUD
Statement statement = connection.createStatement();
//4.编写SQL
String sql = "update users set name = '小明' where id=1";
//5.执行SQL 返回受影响的行数
int count = statement.executeUpdate(sql);
if(count > 0){
System.out.println("修改成功@");
}
//6.关闭连接,释放资源(一定要做)先开后关
statement.close();
connection.close();
}
}