JDBC学习笔记
概念:
JDBC就是Java语言操作关系型数据库的一套API
快速入门:
public class exercise02 {
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/db1";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
//3.书写sql语句
String sql = " insert into tb_user(id,username,password) values (3,'zhangwen','123456');";
//4.获取执行对象
Statement stat = conn.createStatement();
//5.执行sql语句
stat.executeUpdate(sql);
//6.释放资源
stat.close();
conn.close();
}
}
API详解:
DriverManger工具管理类
作用:
(1)注册驱动
(2)获取连接
Connection类
作用:
(1)获取执行sql的对象
(2)管理事务:开启事务,回滚事务,提交事务
public class exercise02 {
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/db1";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
//3.书写sql语句
String sql1 = " insert into tb_user(id,username,password) values (3,'zhangwen','123456');";
String sql2 = " insert into tb_user(id,username,password) values (3,'zhangwen','123456');";
//4.获取执行对象
Statement stat = conn.createStatement();
//开启事务
conn.setAutoCommit(false);
//5.执行sql语句
try {
stat.executeUpdate(sql1);
stat.executeUpdate(sql2);
//提交事务
conn.commit();
} catch (Exception throwables) {
//回滚事务
conn.rollback();
throwables.printStackTrace();
}
//6.释放资源
stat.close();
conn.close();
}
}
Statement类
作用:
(1)执行sql语句
executeUpdate(sql):执行DML,DDL语句
返回值:(1)DML影响的行数(2)DDL执行成功也可能返回0
ResultSet语句
executeQuery(sql):执行DQL语句
返回值:ResultSet结果集对象
ResultSet类 结果集对象
作用:
(1)封装了DOL查询语句的结果
ResultSet stmt.excuteQuery(sql);执行DQL语句,返回ResultSet对象
获取查询结果方法
next();
getXXX(参数);XXX数据类型
案例:
需求:将数据库信息,封装为对象,并且存储到ArrayLIst集合当中去
public class exercise05 {
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/db1";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
//3.定义Sql语句
String sql = "select * from tb_user ";
//4.获取sql对象
Statement stat = conn.createStatement();
//5.执行sql语句
ResultSet rs = stat.executeQuery(sql);
//6.处理结果
ArrayList<Object> list = new ArrayList<>();
while (rs.next()) {
Account account = new Account();
int id = rs.getInt(1);
String name = rs.getString(2);
String pass = rs.getString(3);
account.setId(id);
account.setName(name);
account.setPassword(pass);
list.add(account);
}
System.out.println(list);
//7.释放资源
rs.close();
stat.close();
conn.close();
}
}
PrepareStatement
进行预编译的sql执行对象,可以防止sql注入
好处:
(1)预编译SQL,性能更好
(2)防止SQL注入:将敏感字符进行转义
登录案例
public class exercise06 {
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/db1";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
//接收用户输入的用户名密码
String name = "zhangwen";
String word = "123";
Scanner scanner = new Scanner(System.in);
//3.书写sql语句
String sql = "select * from tb_user where username= ? and password = ?";
//4.获取sql执行对象
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.setString(2,word);
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
}
}
开启预编译的方法:ServerPreparestats=true(放在url中)
数据库连接池:
(1)数据库连接池是个容器,负责分配、管理数据库连接
(2)它允许应用程序重复使用一个现有的数据库连接,而不是再建立一个
(3)释放空闲事件的数据库连接来避免因为没有释放数据库连接而引起的数据库练级遗漏
好处:
(1)资源重用
(2)提升系统相应速度
(3)避免数据库连接遗漏
总结
JDBC简单来说就是一套API。多练习使用就可以掌握,万丈高楼平地起,学习要慢慢的来,基础越牢,后期学习就越轻松!