实训Day3 记实
实训第三天,今天是头脑风暴的第二天,课程将SQL与Java(idea)代码结合,这是一项具有挑战性的代码课程。课程将两个应用结合起来,展现了Java代码的跨平台性,展现了Java语言的封装性、继承性、多态性的三大特性。接下来是具体内容展示:
- 封装性、继承性、多态性
- 封装性
封装性是指将对象的属性和行为(方法)包装在一个类中,隐藏对象内部的实现细节,只暴露必要的接口给外部使用。
◎- private:将类的属性声明为私有,只能在本类中访问,外部无法直接访问。
- 继承性
◎方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
◎“equal()” && “==”
“==” 是拿两个对象的地址进行比较
“equal()”
1.类未覆盖equals()方法,等价于”==“
2.类覆盖了equals()方法,需要看类的具体实现了;一般来说,都是覆盖了equals()来使两个对象的内容相等即返回true
- 多态性
多态性是指不同类的对象可以通过相同的接口实现不同的行为。
接口(interface):定义一组方法的规范,实现类需要实现接口中的所有方法。
二、标准的JAVABEAN格式
- 原生的JDBC(数据库连接)
这部分是今天学习的主要内容,也是重点内容,后续要尽快熟悉原生JDBC的原理:(JDBC(Java Database Connectivity,Java数据库连接)是Java语言中用于规范客户端程序如何访问数据库的应用程序接口(API)。它为Java开发者提供了一种标准的方法来连接和操作各种关系型数据库。JDBC API包含了一组类和接口,这些类和接口使得Java程序能够连接到数据库,执行SQL语句,并处理结果。)
- 注册驱动 + 加载驱动(DriverManager):JDBC驱动管理负责加载和 注册JDBC驱动。当程序需要连接到数据库时,DriverManager会根据所提供的连接信息(如URL、用户名和密码)自动选择合适的驱动程序。
- 数据库连接(Connection):通过DriverManager的getConnection方法,程序可以建立与数据库的连接。连接对象(Connection)代表了与数据库的一个会话,可以用来创建Statement、PreparedStatement和CallableStatement等对象。
- 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代码的控制下变得栩栩如生,我们体会到了编程的巨大成就感。
这次实训让我们认识到,编程并非易事,但只要我们勇敢面对挑战,坚持不懈地努力,就一定能够取得成功。同时,我们也体会到了团队合作的重要性。在这个过程中,我们互相学习、互相支持,共同成长。
总的来说,今天的实训虽然辛苦,但却充满了快乐。我们收获了宝贵的经验,也让我们更加坚定了走编程之路的决心。我相信,在未来的学习和工作中,我们会更加自信地面对挑战,创造出更多的精彩。