当前位置: 首页 > news >正文

【JavaWeb学习Day11】

java程序操作数据库(JDBC)

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

本质:

1.sun公司官方定义的一套操作所有关系型数据库的规范、即接口。

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

3.我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

01.入门程序:

1.需求:基于JDBC程序,执行update语句(update user set age = 25 where id = 1)

2.步骤:

准备工作:创建一个maven项目,引入依赖;并准备数据库表user

代码实现:编写JDBC程序,操作数据库

public void testUpdate() throws Exception {//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取数据库连接//标准的 JDBC URL 格式:jdbc:mysql://hostname:port/databasenameString url="jdbc:mysql://localhost:3306/web01";//连接时一定注意这些数据不能错String username = "root";String password = "1234";Connection connection = DriverManager.getConnection(url, username, password);//3.获取SQL语句执行对象Statement statement = connection.createStatement();//4.执行SQL
​int i = statement.executeUpdate("update user set age = 25 where id = 1");//DMLSystem.out.println("SQL执行完毕影响的记录数为:" + i);//5.释放资源statement.close();connection.close();
}
02.JDBC-查询数据:

1.需求:基于JDBC执行如下select语句,将查询结果封装到User对象中。

2.SQL:select * from user where username = 'daoqiao' and password = '123456'

3.ResultSet(结果集对象):ResultSet re = statement.executeQuery(),next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为Boolean,返回值为true表示有效行,当前行有数据,false为无效行,当前行没有数据。getXxx():获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)。

@Testpublic void testSelect(){String URL = "jdbc:mysql://127.0.0.1:3306/web01";String USER  = "root";String PASSWORD  = "1234";
​Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;//封装查询返回的结果try{//1.注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.打开链接conn = DriverManager.getConnection(URL,USER,PASSWORD);//3.执行查询String sql = "select id,username,password,name,age from user where username = ? AND password = ?";//预编译SQLstmt = conn.prepareStatement(sql);stmt.setString(1,"daqiao");stmt.setString(2,"123456");rs = stmt.executeQuery();//4.处理结果集while (rs.next()){User user = new User(rs.getInt("id"),rs.getString("username"),rs.getString("password"),rs.getString("name"),rs.getInt("age"));System.out.println(user);
​}
​} catch (Exception e) {e.printStackTrace();} finally {//5.关闭资源try{if(rs!=null) rs.close();if(stmt!=null) stmt.close();if (conn!=null) conn.close();} catch (SQLException se){se.printStackTrace();}}
​}
​
03.预编译SQL

优势一:可以防止SQL注入,更安全。

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

优势二:性能更高。

http://www.lryc.cn/news/519581.html

相关文章:

  • rom定制系列------小米max3安卓12 miui14批量线刷 默认开启usb功能选项 插电自启等
  • CES 2025|美格智能高算力AI模组助力“通天晓”人形机器人震撼发布
  • 汽车电子相关的协议UDS、DOIP、CAN
  • k8s笔记29--使用kyverno提高运维效率
  • Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)
  • libc.so.6不兼容
  • 树的模拟实现
  • AsyncOperation.allowSceneActivation导致异步加载卡死
  • 如何搭建 Vue.js 开源项目的 CI/CD 流水线
  • 单通道串口服务器(三格电子)
  • 【Excel/WPS】根据平均值,生成两列/多列指定范围的随机数/随机凑出两列数据
  • 使用网页版Jupyter Notebook和VScode打开.ipynb文件
  • 记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据
  • CDA数据分析师一级经典错题知识点总结(5)
  • 服务器、电脑和移动手机操作系统
  • 深入解析 Flink 与 Spark 的性能差异
  • 如何在 Linux、MacOS 以及 Windows 中打开控制面板
  • 微信小程序中 隐藏scroll-view 滚动条 网页中隐藏滚动条
  • Java 实现 Elasticsearch 查询当前索引全部数据
  • android刷机
  • 【25考研】西南交通大学计算机复试重点及经验分享!
  • OpenCV相机标定与3D重建(49)将视差图(disparity map)重投影到三维空间中函数reprojectImageTo3D()的使用
  • 学习HTTP Range
  • 大语言模型训练的数据集从哪里来?
  • Webpack和Vite的区别
  • 【再谈设计模式】模板方法模式 - 算法骨架的构建者
  • Bytebase 3.1.1 - 可定制的快捷访问首页
  • Java阶段四04
  • B2C API安全警示:爬虫之外,潜藏更大风险挑战
  • OCR文字识别—基于PP-OCR模型实现ONNX C++推理部署