Java SQL 连接(初级)

news2024/11/15 15:32:17

实训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.coloradmin.cn/o/1915582.html

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

相关文章

关于数组的常见算法

一、案例一 案例说明 案例:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,总和,平均值,并输出出来 要求:所有随机数都是两…

Windows环境人大金仓数据库命令常规操作

Windows环境人大金仓数据库命令常规操作 下文将介绍人大金仓数据库常见命令操作,包括具体使用命令如创建数据库、创建用户、授权等相关操作。 1、打开命令提示符窗口 找到数据库安装目录进入server/bin目录,输入cmd,打开命令提示符窗口,如…

如何批量更改很多个文件夹里的文件名中包含文件夹名?

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

【论文速读】《面向深度学习的联合消息传递与自编码器》

这篇文章来自华为的渥太华无线先进系统能力中心和无线技术实验室,作者中有大名鼎鼎的童文。 一、自编码架构的全局收发机面临的主要问题 文章对我比较有启发的地方,是提到自编码架构的全局收发机面临的主要问题: 问题一:基于随…

Nature Renderer 2022(植被渲染工具插件)

渲染大量详细的植被。 自然渲染器通过替换Unity的默认地形细节和树系统来提高植被渲染的质量。一切都适用于现有数据:使用相同的草地、植被和树木,并保留现有地形。我们只是升级您的渲染器。 Unity验证的解决方案 Nature Renderer受到25000多名开发人员的信任,是Unity验证的…

洛谷P1498 南蛮图腾[递归好题]

南蛮图腾 题目背景 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独…

鼠标哪款好用?2024年选这几款鼠标不会出错

鼠标可是我们电脑的好伙伴,它能大大提高我们的工作效率。现在,无线鼠标变得越来越受欢迎,因为没有乱七八糟的线缆,用起来既方便又省空间。对于爱玩游戏的朋友们来说,挑选一个称心如意的鼠标可是件头疼的事。别急&#…

蓝牙控制小车

demo.main.c motor.c uart.c motor.h uart.h 实物图

c++:面向对象的继承特性

什么是继承 (1)继承是C源生支持的一种语法特性,是C面向对象的一种表现 (2)继承特性可以让派生类“瞬间”拥有基类的所有(当然还得考虑权限)属性和方法 (3)继承特性本质上是为了代码复用 (4)类在C编译器的内部可以理解为结构体,派…

初学SpringMVC之 RestFul 风格、重定向和转发

RestFul 风格改变 URL 形式 比如之前是:http://localhost:8080/add?a1&b2 现在是:http://localhost:8080/add/a/b(全是斜杠) package com.demo.controller;import org.springframework.stereotype.Controller; import org…

鸿蒙系统创建签名文件及使用创建签名文件打包并安装

* 第一步 第二步:创建.p12文件,点击New如果有的话就Choose Existing 填好下面信息 点击Next进入到下面界面 开始生成csr文件如下图 点击OK–>Finish 文件保存在了下面目录 第三步 1.访问华为开发者平台,登录开发者账号,进…

应急响应-ELK日志分析系统

🎼个人主页:金灰 😎作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 🍊易编橙终身成长社群&#…

昇思25天学习打卡营第15天|基于 MindSpore 实现 BERT 对话情绪识别

文章目录 昇思MindSpore应用实践1、基于 MindSpore 实现 BERT 对话情绪识别BERT 模型简介数据集数据加载和数据预处理 2、模型训练模型验证 3、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 1、基于 MindSpore 实现 BERT…

尚品汇-(十六)

商品详情功能开发 (1)搭建service-item 点击service,选择New–>Module,操作如下 修改配置pom.xml 添加配置文件bootstrap.properties spring.application.nameservice-item spring.profiles.activedev spring.cloud.nacos.discovery.se…

centOS79中安装nginx12.15

##red## 🔴 大家好,我是雄雄,欢迎关注微信公众号,雄雄的小课堂。 前言 装了这么多,发现Nginx是最简单的,一次性就搞定了。下面我们来看看如何安装 安装Nginx 安装gcc-c编译器 分开运行: yum…

医疗机器人中的具身智能进展——自主超声策略模型的任务编码和局部探索

医疗机器人一直是具身智能的研究热点。医学图像、医疗触诊、血压血氧、心率脉搏和生物电信号等多模态生物医学信息,不断丰富着医疗机器人的感知范畴。 自主超声 “自主超声”属于具身智能医疗机器人领域中话题度较高的研究方向。作为临床检查的重要手段之一&#…

27. 738.单调递增的数字,968.监控二叉树,贪心算法总结

class Solution { public:int monotoneIncreasingDigits(int n) {string strNum to_string(n);// flag用来标记赋值9从哪里开始// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行int flag strNum.size();for(int i strNum.size() - 1; i &…

FOLANNIC FD31 UPS工作原理介绍

1.1简介 FOLANNIC FD31系列UPS系工业级电厂型不间断电源,是为重要负载提供不受电网干扰、稳压、稳频的电力供应的电源设备,在市电掉电后,UPS可给负载继续提供一段时间供电,此系列UPS采用带输出隔离变压器的高频双变换结…

多头注意力的公式理解

多头注意力 (Multihead Attention) 多头注意力是一种通过并行使用多个注意力机制来增强模型能力的方法。每个注意力机制被称为一个“头”(head)。这种机制使得模型可以在不同的子空间中并行计算注意力,从而捕捉输入数据中不同范围的依赖关系…

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int fun main(args: Array<String>) {var any1: Any?any1 nullval n1 any1 as? Int ?: -2024println(n1)kotlin.runCatching {var any2: Any?any2 nullval n2 any2 as Intprintln(…