后端笔记(2)--JDBC
创始人
2024-11-20 20:06:26
0

1.JDBC简介

*JDBC(Java DataBase Connectivity)就是使用java语言操作关系型数据库的一套API

在这里插入图片描述

*JDBC本质:(可以使用同一套代码,操作不同的关系型数据库

​ *官方定义的一套操作所有关系型数据库的规则,即接口

​ *各个数据厂商去实现这套接口,提供数据库驱动jar包

​ *我们可以使用这套接口编程,真正执行的代码是驱动jar包中的实现类

1.用java写jdbc(快速入门)

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/db1";         String username = "root";         String password = "1234";         Connection conn = DriverManager.getConnection(url,username,password);                  //3.定义sql         String sql = "update account set money = 2000 where id = 1";                  //4.获取执行sql的对象 Statement         Statement stmt = conn.createStatement();                  //5.执行sql         int count = stmt.executeUpdate(sql);//返回受影响的行数                  //6.处理结果     System.out.println(count);                  //7.释放资源         stmt.close();     	conn.close();     } } 

2.JDBC API详解

1.DriverManager

​ *驱动管理类

​ *作用:1.注册驱动 2.获取数据库连接

在这里插入图片描述
在这里插入图片描述

2.Connection

1.获取执行SQL的对象

​ *普通执行SQL对象

Statement createStatement() 

​ *预编译SQL的执行SQL对象:防止SQL注入

PreparedStatement prepareStatement(sql) 

​ *执行存储过程的对象

CallableStatement prepareCall(sql) 
2.事务管理

​ *MySQL 事务管理

开启事务:BEGIN;/ START TRANSACTION; 提交事务:COMMIT; 回滚事务:ROLLBACK;  MySQL默认自动提交事务 

​ *JDBC事务管理:Connection接口中定义了3个对应的方法

开启事务:setAutoCommit(boolent autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务 提交事务:commit() 回滚事务:rollback() 

3.Statement

​ *作用:执行SQL语句

​ *执行SQL语句

int executeUpdate(sql):执行DML、DDL语句 *返回值:(1)DML语句影响的行数 (2)DDL语句执行后,执行成功也可能返回0 
ResultSet: executeQuery(sql):执行DQL语句 *返回值:ResultSet结果集对象 
//1.注册驱动(可不写) //Class.forName("com.mysql.jdbc.Driver");  //2.获取连接:如果连接的是本机Mysql并且端口是默认的3306可以简化书写 String url = "jdbc:mysql:///db1?useSSL=false"; String username = "root"; String password = "1234"; Connection conn = DriverManager.getConnection(url,username,password);  //3.定义sql String sql = "update account set money = 3000 where id = 1";//DML语句 "create database db2";//DDL语句  //4.获取执行sql的对象 Statement Statement stmt = conn.createStatement();  //5.执行sql int count = stmt.executeUpdate(sql);//执行完DML语句,受影响的行数  //6.处理结果 System.out.println(count);  //7.释放资源 stmt.close(); conn.close(); 

4.ResultSet

​ *(结果集对象)作用: 1.封装了DQL查询语句的结果

ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象 

​ *获取查询结果

boolean next():(1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行 *返回值:     *true:有效行,当前行有数据     *false:无效行,当前行没有数据 
xxx getXxx(参数):获取数据 * xxx:数据类型;如:int getInt(参数);String getString(参数) *参数:     *int:列的编号,从1喀什     *String:列的名称 
//1.获取连接 String url = "jdbc:mysql:///db1?useSSL=false"; String username = "root"; String password = "1234"; Connection conn = DriverManager.getConnection(url, username, password);  //2.定义sql String sql = "select * from account";  //3.获取statement对象 Statement stmt = conn.createStatement();  //4.执行sql ResultSet rs = stmt.executeQuery(sql);  //创建集合 List list = new ArrayList<>();  //5.处理结果,遍历rs中的所有数据 //5.1光标向下移动一行,并且判断当前行是否有数据 while(rs.next){     Account account = new Account();               //5.2获取数据 getXxx(第几列)     int id = rs.getInt(1);     String name = rs.getString(2);     double money = rs.getDouble(3);          //赋值     account.setId(id);     account.setName(name);     account.setMoney(money);          //存入集合     list.add(account);          System.out.println(id);     System.out.println(name);     System.out.println(money);          System.out.println("-----") }  	//6.释放资源 	rs.close();	 	stmt.close(); 	conn.close();  

5.PreparedStatement

​ *预编译SQL语句并执行:预防SQL注入问题(将铭感字符进行转移)

​ *SQL注入:通过操作输入来修改实现定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

public void testResultSet() throws Exception {     //2.获取连接:如果连接的是本机mysql并且端口是默认的3306可以简化书写     String url = "jbdc:mysql:///db1?useSSL=false";     String username = "root";     String password = "1234";     Connection conn = DriverManager.getConnection(url,username,password);          //接收用户输入 用户名和密码     String name = "zhangsan";     String pwd = "123";          String sql = "select * from tb_user where username = '"+name+"' and password = '"+pwd+"'";          //获取stmt对象     Statement stmt = conn.createStatement();          //执行sql     ResultSet rs = stmt.executeQuery(sql);          //判断登录是否成功     if(rs.next()){         System.out.println("登陆成功");     }else{         System.out.println("登录失败");     }          //7.释放资源     /*rs.close();     stmt.close();     conn.close();*/ } 

1.获取PreparedStatement对象

//SQL语句中的参数值,使用?占位符替代 String sql = "select * from user where username = ? and password = ?";  //通过Connection对象获取,并传入对应的sql语句 PreparedStatement pstmt = conn.prepareStatement(sql); 

2.设置参数值

PreparedStatement对象:setXxx(参数1,参数2):给?赋值 *Xxx:数据类型;如setInt(参数1,参数2) *参数: 	-参数1:?的位置编号,从1开始     -参数2:?的值          eg: pstmt:setString(1,name); pstmt.setString(2,pwd); //替代问号占位符位置的值 

3.执行SQL

executeUpdate();/executeQuery():不需要再传递sql 

3.数据库连接池

1.简介

​ *数据库连接池是个容器,负责分配、管理数据库连接(Connection)

​ *它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

​ *释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

​ *好处:

​ --资源重用

​ --提升系统响应速度

​ --避免数据库连接遗漏

2.数据库连接池实现

​ *标准接口:DataSource

​ *官方提供的数据库连接池标准接口,由第三方组织实现此接口

​ *功能:获取连接

Connection getConnection() 

​ *常见的数据库连接池:

​ *DBCP

​ *C3P0

​ *Druid

​ *Druid(德鲁伊)

​ *Druid连接池是阿里巴巴开源的数据库连接池项目,好用

//1.带入jar包  //2.定义配置文件  //3.加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("src/druid.properties"));  //4.获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);  //5.获取数据库连接 Connection Connection connection = dataSource.getConnection();  System.out.println(connection); 

相关内容

热门资讯

透视了解!wpk透视辅助下载,... 透视了解!wpk透视辅助下载,wpk模拟器多开,2025版教程(果然是真的有挂)1、这是跨平台的wp...
透视苹果版!wepoker可以... 透视苹果版!wepoker可以透视码,wepoker私人局辅助(一直真的是有挂);进入游戏-大厅左侧...
透视免费!aapoker公共底... 透视免费!aapoker公共底牌,aapoker透视方法,教你攻略(有挂揭秘)1、下载好aapoke...
透视辅助!wpk德州局怎么透视... 透视辅助!wpk德州局怎么透视,wpk私人局有透视吗,细节揭秘(一直是有挂)1)wpk德州局怎么透视...
透视ai!wepoker可以开... 透视ai!wepoker可以开透视吗,wepoker透视有没有(都是存在有挂)1、打开软件启动之后找...
透视透视!aapoker透视插... 透视透视!aapoker透视插件,aapoker俱乐部靠谱吗,细节揭秘(有挂教程)1、任何aapok...
透视透视!wpk俱乐部辅助器,... 透视透视!wpk俱乐部辅助器,wpk辅助,玩家教程(总是有挂)1、wpk俱乐部辅助器ai辅助优化,w...
透视规律!wepoker俱乐部... 透视规律!wepoker俱乐部辅助,wepoker分析(原来真的是有挂)该软件可以轻松地帮助玩家将w...
透视实锤!aa poker透视... 透视实锤!aa poker透视软件,aapoker安装包怎么使用,揭秘教程(有挂攻略);1、游戏颠覆...
透视新版!wpk模拟器是什么,... 透视新版!wpk模拟器是什么,wpk有作弊吗,德州教程(好像是真的有挂)1、wpk模拟器是什么透视辅...