实训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代码的控制下变得栩栩如生,我们体会到了编程的巨大成就感。
这次实训让我们认识到,编程并非易事,但只要我们勇敢面对挑战,坚持不懈地努力,就一定能够取得成功。同时,我们也体会到了团队合作的重要性。在这个过程中,我们互相学习、互相支持,共同成长。
总的来说,今天的实训虽然辛苦,但却充满了快乐。我们收获了宝贵的经验,也让我们更加坚定了走编程之路的决心。我相信,在未来的学习和工作中,我们会更加自信地面对挑战,创造出更多的精彩。