学习内容:
css权重,css的引入方式
直播课—-JDBC封装第一天
代码练习:
/*
如果像以下这样写的代码 会有JDBC连接过程的代码冗余 而除去Query,增加,修改,删除,他们差的只有SQL语句和预处理?的值
思考:那么我可以将这两个作为参数 封装一个方法 然后增加 修改 删除 只需要调这个方法,三遍只需要写一遍流程
从而代码得到优化
*/
未优化的代码:
//===================================================================================//
package dao;
import domain.Atm;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class AtmDao {
/**
*写一些连接数据库时需要用到的参数
/
/**Driver类加载地址*/
private String driver="com.mysql.cj.jdbc.Driver";
/**连接需要的参数url user password*/
private String url = "jdbc:mysql://localhost:3306/atm?serverTimezone=CST&characterEncoding=utf-8";
private String user = "root";
private String password = "at123123";
/**
* 由于新增一条记录 删除一条记录 修改一条记录 代码中除了sql语句和预处理?的值不同,其他的代码都一样
* 如果进行优化的话 参数问题??--->因为只有sql不同,那么参数需要传一条sql 预处理用动态参数列表
* 若这样封装可以省2次的代码
* 返回值-->可有可无 可以是修改的行数 或者 无
* */
//查询一条记录
public Atm queryOne(String uname){
Atm atm = null;
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "SELECT UNAME,UPASSWORD,UBAL FROM USER WHERE UNAME=?";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setString(1,uname);
ResultSet rst = pstat.executeQuery();
while (rst.next()){
atm = new Atm();
atm.setUname(rst.getString("UNAME"));
atm.setUpassword(rst.getString("UPASSWORD"));
atm.setUbal(rst.getFloat("UBAL"));
}
rst.close();
pstat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return atm;
}
//更新一条记录
public void update(Atm atm){
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "UPDATE USER SET UPASSWORD=?,UBAL=? WHERE UNAME=?";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setString(1,atm.getUpassword());
pstat.setFloat(2,atm.getUbal());
pstat.setString(3,atm.getUname());
pstat.executeUpdate();
pstat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//增加一条记录
public void insert(Atm atm){
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "INSERT INTO USER VALUES(?,?,?)";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setString(1,atm.getUname());
pstat.setString(2,atm.getUpassword());
pstat.setFloat(3,atm.getUbal());
pstat.executeUpdate();
pstat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//删除一条记录
public void delete(String uname){
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "DELETE FROM USER WHERE UNAME=?";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setString(1,uname);
pstat.executeUpdate();
pstat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//===================================================================================//
通过直播课的学习———->优化后的代码
//===================================================================================//
package dao;
import domain.Atm;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class AtmDao {
/**
*写一些连接数据库时需要用到的参数
**/
//Driver类加载地址
private String driver="com.mysql.cj.jdbc.Driver";
//连接需要的参数url user password
private String url = "jdbc:mysql://localhost:3306/atm?serverTimezone=CST&characterEncoding=utf-8";
private String user = "root";
private String password = "at123123";
/**
* 由于新增一条记录 删除一条记录 修改一条记录 代码中除了sql语句和预处理?的值不同,其他的代码都一样
* 如果进行优化的话 参数问题??--->因为只有sql不同,那么参数需要传一条sql 预处理用动态参数列表
* 若这样封装可以省2次的代码
* 返回值-->可有可无 可以是修改的行数 或者 无
* */
private void superUpdate(String sql,Object... objs){
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstat = conn.prepareStatement(sql);
for (int i = 0; i <objs.length ; i++) {
pstat.setObject(i+1,objs[i]);
}
pstat.executeUpdate();
pstat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//查询一条记录
public Atm queryOne(String uname){
Atm atm = null;
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "SELECT UNAME,UPASSWORD,UBAL FROM USER WHERE UNAME=?";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setString(1,uname);
ResultSet rst = pstat.executeQuery();
while (rst.next()){
atm = new Atm();
atm.setUname(rst.getString("UNAME"));
atm.setUpassword(rst.getString("UPASSWORD"));
atm.setUbal(rst.getFloat("UBAL"));
}
rst.close();
pstat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return atm;
}
//更新一条记录
public void update(Atm atm){
String sql = "UPDATE USER SET UPASSWORD=?,UBAL=? WHERE UNAME=?";
this.superUpdate(sql,atm.getUpassword(),atm.getUbal(),atm.getUname());
}
//增加一条记录
public void insert(Atm atm){
String sql = "INSERT INTO USER VALUES(?,?,?)";
this.superUpdate(sql,atm.getUname(),atm.getUpassword(),atm.getUbal());
}
//删除一条记录
public void delete(String uname){
String sql = "DELETE FROM USER WHERE UNAME=?";
this.superUpdate(sql,uname);
}
}
}
学习总结:
学懂的:
通过今天的学习 3种CSS的引入格式,每种引入的格式的优先级都不一样,若他们同时出现
最重要的(是会通过一层一层的去计算他们的权重值)
通过晚上JDBC的封装课程,直播课完全可以听懂的,自己多加练习,总结为:在几个方法的
代码基本一样的时候,应该去思考他们不一样的地方,思考是再写一个类还是再写一个方法
把不一样的内容当作参数,而这个参数的设计每种情况需要思考的不一样,再而他们的返回值
问题,需要多练习这种环境该如何设计。
而不是像使用Mybaits一样只知道注解那么写,一把梭。
有问题的地方:
直播课程没有没听懂的….
CSS我没有去专门背每个选择器的权重值,等我先把前端复习过完,Web框架完了之后再去背这个。