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代码的控制下变得栩栩如生,我们体会到了编程的巨大成就感。

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

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

上一篇:vue3 学习笔记02 -- 配置路由router+导航守卫


下一篇:适合selenium的防自动化检测的方法