Java SQL 连接(初级)

实训Day3 记实

实训第三天,今天是头脑风暴的第二天,课程将SQL与Java(idea)代码结合,这是一项具有挑战性的代码课程。课程将两个应用结合起来,展现了Java代码的跨平台性,展现了Java语言的封装性、继承性、多态性的三大特性。接下来是具体内容展示:

  • 封装性、继承性、多态性
  1. 封装性

封装性是指将对象的属性和行为(方法)包装在一个类中,隐藏对象内部的实现细节,只暴露必要的接口给外部使用。

◎- private:将类的属性声明为私有,只能在本类中访问,外部无法直接访问。

  1. 继承性

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

“equal()” && “==”

“==” 是拿两个对象的地址进行比较

“equal()”

1.类未覆盖equals()方法,等价于”==“
2.类覆盖了equals()方法,需要看类的具体实现了;一般来说,都是覆盖了equals()来使两个对象的内容相等即返回true

  1. 多态性

多态性是指不同类的对象可以通过相同的接口实现不同的行为。

接口(interface):定义一组方法的规范,实现类需要实现接口中的所有方法。

二、标准的JAVABEAN格式

  • 原生的JDBC(数据库连接)

这部分是今天学习的主要内容,也是重点内容,后续要尽快熟悉原生JDBC的原理:(JDBC(Java Database Connectivity,Java数据库连接)是Java语言中用于规范客户端程序如何访问数据库的应用程序接口(API)。它为Java开发者提供了一种标准的方法来连接和操作各种关系型数据库。JDBC API包含了一组类和接口,这些类和接口使得Java程序能够连接到数据库,执行SQL语句,并处理结果。)

  1. 注册驱动 + 加载驱动(DriverManager):JDBC驱动管理负责加载和   注册JDBC驱动。当程序需要连接到数据库时,DriverManager会根据所提供的连接信息(如URL、用户名和密码)自动选择合适的驱动程序。

  1. 数据库连接(Connection):通过DriverManager的getConnection方法,程序可以建立与数据库的连接。连接对象(Connection)代表了与数据库的一个会话,可以用来创建Statement、PreparedStatement和CallableStatement等对象。

  1. SQL语句执行:JDBC提供了三种执行SQL语句的方法:Statement、PreparedStatement和CallableStatement。

 **  Statement:用于执行静态SQL语句。每次执行都会解析、编译和执行SQL语句,效率较低,但灵活性高。

 **  PreparedStatement:用于执行预编译的SQL语句。预编译的SQL语句只需要解析、编译一次,之后可以多次执行,提高了执行效率。适用于需要多次执行相同或类似SQL语句的场景。

 **  CallableStatement:用于执行存储过程和函数。它可以接收参数、返回结果集和处理输出参数。

4资源管理(关闭资源):conn.close();

以下是具体代码及结果:

JDBCTEST

package Day03.tedu;import com.mysql.jdbc.Driver;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.Statement;public class JDBCTEST {public static void main(String[] args) throws Exception {//1.注册驱动DriverManager.registerDriver(new Driver());//2.加载驱动Class.forName("com.mysql.jdbc.Driver");System.out.println("驱动加载成功");//3.获取与数据库的链接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db11", "root", "root");//url :协议名称(协议 + 子协议 + 本机ip地址127.0.0.1 + 端口号 3306 + 数据库名称)System.out.println("获取连接成功");//获取执行sql的对象//        Statement stat = conn.createStatement();PreparedStatement ps =  conn.prepareStatement("INSERT INTO students1 VALUES (null , ? , ? , ? , ?);");//5.编写一条sql语句//        String sql = "INSERT INTO students1 VALUES (NULL , 'xx' , 18 , '男' , 500);";Student ww = new Student(1 , "wangwu", 88, 360 ,"女");ps.setInt(2,ww.getAge());ps.setString(2,ww.getName());ps.setString(3,ww.getGender());ps.setInt(4,ww.getScore());//6.执行sql语句//        stat.execute(sql);System.out.println("执行完毕");//7.关闭资源//        stat.close();conn.close();}}

JBDC_DELETE

package Day03.tedu;import Day03.utils.JDBCUtiles;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;public class jdbc_Delete {public static void main(String[] args) throws Exception {Connection conn = JDBCUtiles.getConn();PreparedStatement ps = conn.prepareStatement("DELETE  FROM students1 WHERE name = ?; ");ps.setString(1 ,"LS");ps.execute();System.out.println("删除成功");JDBCUtiles.closeAll(ps , conn);}}

JBDC_SELECT

package tedu;import Day03.tedu.Student;import Day03.utils.JDBCUtiles;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;public class JDBC_Select {public static void main(String[] args)  throws Exception{Connection conn = JDBCUtiles.getConn();PreparedStatement ps = conn.prepareStatement("select *from students1");ResultSet res = ps.executeQuery();Student student = new Student();while (res.next()) {student.setId((Integer) res.getObject(1));//            student.setName();//            student.setAge();//            student.setScore();//            student.setGender();System.out.println(res.getObject(1));System.out.println(res.getObject(2));System.out.println(res.getObject(3));System.out.println(res.getObject(4));System.out.println(res.getObject(5));//}res.close();conn.close();}}

JBDC_UPDATE

package Day03.tedu;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;public class JDBC_Update {public static void main(String[] args) throws Exception {new Student(0,"",18,330,"男");Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db11","root","root");//sql语句预编译PreparedStatement ps = conn.prepareStatement( "UPDATE students1 SET NAME = ? , gender = ? WHERE    id = ?;");ps.setString(1 , "爱困");ps.setString(2 ,"女" );ps.setInt(3 , 11);ps.executeUpdate();ps.close();conn.close();}}

JAVABEAN

 package Day03.tedu;public class Student {private int id;private String name;public Student(){}public Student(int id) {this.id = id;}public Student(int id, String name, int age, int score, String gender) {this.id = id;this.name = name;this.age = age;this.score = score;this.gender = gender;}private int age;private int score;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}private String gender;
}

实现效果:

解析PreparedStatement ps = conn.prepareStatement( "UPDATE students1 SET NAME = ? , gender = ? WHERE    id = ?;"); 的SQL语句

这行代码首先使用数据库连接对象`conn`的`prepareStatement`方法准备一个SQL预处理语句。预处理语句是一种特殊的SQL语句,其中的参数用问号(`?`)代替,以便稍后绑定实际值。这样可以防止SQL注入攻击,并提高性能,因为预处理语句可以被数据库重复使用。

   在这个例子中,预处理语句是一个`UPDATE`语句,用于更新`students1`表中的一行数据。它有三个参数:第一个参数将设置`NAME`字段的值,第二个参数将设置`gender`字段的值,第三个参数是`WHERE`子句的条件,用于指定要更新哪一行数据(基于`id`字段的值)。

四、心得

第三天的实训经历让我深刻体会到了编程的不易与乐趣。

实训过程中,我们遇到了许多挑战。代码时常报错,让我们倍感沮丧。我们不得不反复修改代码,仔细检查每一行,甚至重新构建无数次package,导入无数次包,处理各种异常(throws exception)。在这个过程中,我们学会了耐心和细心,也锻炼了我们的意志力和毅力。

然而,正是这些挑战让我们品味到了编程的乐趣。当我们成功解决了问题,克服了困难,那种喜悦难以言表。最让我感到兴奋的是,我们将昨天创建的SQL表格与Java代码相结合,让数据动态化。看着原本静态的数据在Java代码的控制下变得栩栩如生,我们体会到了编程的巨大成就感。

这次实训让我们认识到,编程并非易事,但只要我们勇敢面对挑战,坚持不懈地努力,就一定能够取得成功。同时,我们也体会到了团队合作的重要性。在这个过程中,我们互相学习、互相支持,共同成长。

总的来说,今天的实训虽然辛苦,但却充满了快乐。我们收获了宝贵的经验,也让我们更加坚定了走编程之路的决心。我相信,在未来的学习和工作中,我们会更加自信地面对挑战,创造出更多的精彩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cesium中实现全球体积云效果的一种方案

原生 Cesium 提供了一种积云的效果,云的物理特征和渲染性能都还不错,这种方案适合表达小范围相对离散的云朵,但是用来实现全球范围下相对连续、柔和渐变的云层比较困难。本文在体渲染的基础上,参考了开源社区中 shadertoy 和 thre…

c#调用c++ dll库报错System.BadImageFormatException

System.BadImageFormatException:“试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)” 1. dll需要选择release模式进行编译 2.选择相同位数,比如x64平台,c#也需要x64 3.不要设置c#不支持的函数供调用 比如: c可以输出到控制台…

Meta发布Llama 2驱动的AI代码生成器:Code Llama,开源来袭!

Meta 刚刚了号称是编程领域 “最先进的大语言模型”—— Code Llama ,可根据 代码和自然语言提示 生成代码和有关代码的自然语言,支持多种主流编程语言, 包括 Python、C、Java、PHP、Typescript (Javascript)、C# 和 Bash 。 Code Llama 完全…

拆分盘究竟是什么?一篇文章带你了解!

拆分盘是一种特殊的理财产品或投资模式,它通常被描述为“只涨不跌”的投资方式,多指股票,但实质上与传统股市中的股票有本质区别。以下是对拆分盘的详细解析: 一、拆分盘的定义 拆分盘可以理解为一种只涨不跌的理财股票。其特点在…

OpenGL3.3_C++_Windows(29)

Demo exposure 0.1f exposure 5.0f HDR色调映射 问题:有多个亮光源使这些数值总和超过了1.0,颜色值会被约束在1.0,从而导致场景混成一片,难以分辨:色调映射:用更大范围的颜色值渲染从而获取大范围的黑暗…

怎么将3张照片合并成一张?这几种拼接方法很实用!

怎么将3张照片合并成一张?在我们丰富多彩的日常生活里,是否总爱捕捉那些稍纵即逝的美好瞬间,将它们定格为一张张珍贵的图片?然而,随着时间的推移,这些满载回忆的宝藏却可能逐渐演变成一项管理挑战&#xff…

鸿蒙语言基础类库:【@ohos.util (util工具函数)】

util工具函数 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 该模块…

Linux系统之lscpu命令的基本使用

Linux系统之lscpu命令的基本使用 一、lscpu命令介绍二、lscpu命令的使用帮助2.1 命令格式2.2 命令选项2.3 使用帮助 三、lscpu命令的基本使用3.1 查看lscpu版本3.2 直接使用lspcu命令3.3 可解析的格式打印cpu信息3.4 可扩展格式打印cpu信息 四、lscpu命令使用注意事项 一、lscp…

【题目/算法训练】:单调队列单调栈

🚀 前言: 【算法】单调队列&&单调栈 可以在看完这篇文章后,再来写下面的题目 一、绝对差不超过限制的最长连续子数组 思路: 1) 就相当于滑动窗口,维护滑动窗口内的两个值,一个是最大值…

Linux常用选项和指令

目录 Linux指令使用注意 用户创建与删除 ls指令 ls指令介绍 ls常见选项 ls选项组合使用 pwd指令 Linux文件系统结构 多叉树结构文件系统介绍 多叉树结构文件系统的特点 cd指令 绝对路径 相对路径 cd指令介绍 家户目录 最近访问的目录 touch指令 ​编辑mkdir指…

3D模型格式转换工具HOOPS Exchange如何访问产品制造信息(PMI)?

在当今的制造和设计领域,产品制造信息(PMI)在确保零件和产品满足精确规格方面发挥着至关重要的作用。PMI,特别是几何尺寸和公差(GD&T),提供了制造过程中必须遵循的详细指导。 随着技术的进…

js ES6 part2

forEach遍历 forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数 主要使用场景: 遍历数组的每个元素 语法 被遍历的数组.forEach(function(当前数组元素,当前元素索引号){ //函数体 }) 1. forEach 主要是遍历数组 2. 参数当前…

Milvus核心组件(1)- Architecture

目录 cluster 模式 数据请求处理流程 总流程 逻辑channel 到物理channel 数据维护流程 cluster 模式 上一篇其实已经说过 standalone 模式,其实集群模式大同小异,只是在不同机子间使用Kafka或者其他消息中间件保证数据及逻辑的一致性。 Log Broker…

Mac 上安转文字转 SQL 利器 WrenAI

WrenAI 是一个开源的 Text-SQL 的工具,通过导入数据库结构,通过提问的方式生成 SQL。本文将讲述如何在 MacOS 上安装 WrenAI。要运行WrenAI,首先需要安装 Docker 桌面版。 下载 WrenAI https://github.com/Canner/WrenAI/releases/tag/0.7.…

java数组之线性查找、二分法查找

一、线性查找 思想:如果想在一个数组中查找是否有某个元素,最容易想到的办法就是遍历数组,将数组中元素与想要查找的元素逐个对比,如果相等表示找到了,如果不等,则表示没找到。这就是线性查找的思想。 案例…

算法导论 总结索引 | 第四部分 第十七章:摊还分析

1、数据结构的一个操作序列中 所执行的 所有操作的平均时间,来评估该操作的代价。摊还分析 不同于平均情况分析,它并不涉及概率,它可以保证最坏情况下每个操作的平均性能 它是一种平均情况下的 性能分析方法,用于 评估一系列操作的…

开源流程表单设计器都有哪些值得一提的优势?

如果需要提质、增效、降本,不妨来了解下低代码技术平台、开源流程表单设计器的功能和优势特点。想要实现流程化办公,低代码技术平台是助力增效的理想工具。功能灵活、操作方便、好维修、可视化操作等优势都是其深受行业喜爱的优势特点。通过本文&#xf…

Errno2:No such file or directory,在当前文件确实没有该图片,怎么解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

常用网络概念

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ​​ 目录 了解组织 局域网技术 …

高深宽比刻蚀和纳米级图形化推进存储器的路线图

随着市场需求推动存储器技术向更高密度、更优性能、新材料、3D堆栈、高深宽比 (HAR) 刻蚀和极紫外 (EUV) 光刻发展,泛林集团正在探索未来三到五年生产可能面临的挑战,以经济的成本为晶圆厂提供解决方案。 …