发表于: 2019-10-26 23:35:10
1 935
今天完成的事情:
今天看了下静态static 这么重要的东西
之前居然没看过
静态变量 :
可以通过类名.变量名(静态) 直接调用
静态方法:
可以通过类名.方法名(); 直接调用 均无需创造对象
静态初始块:
静态初始化块只在类加载时执行 (最先被执行)吧,且只会执行一次
同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
写jdbc
之前的只是大概了解了流程 按别人的代码跑了一遍 简单的连接和关闭
不管怎么变 jdbctemplate 和 mybatis都是 以jdbc为基础 演变的
今天又重新自己写了一遍 都添加了注释
让自己对jdbc整体流程 原理 更熟悉了
文件配置: 一个实体类 一个工具类 一个实现类
实体类 里面是学生实体+set get方法
工具类
里面是jdbc连接和关闭的方法
package Util;
import java.sql.*;
//定义一个 只加载驱动 且连接数据库的工具类
public class StudentUtil {
//定义4个静态成员变量
public static final String url = "jdbc:mysql://localhost:3306/student?serverTimezone=UTC";
public static final String user = "root";
public static final String Password = "451976";
private static Connection conn = null;
//创建一个静态方法 返回conn结果 方便其他类调用 连接数据库
public static Connection getConnection() {
try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//连接数据库
conn = DriverManager.getConnection(url, user, Password);
//抛出加载驱动错误
} catch (ClassNotFoundException e) {
e.printStackTrace();
//抛出数据库连接错误
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//创建一个静态方法 用来关闭链接, 方便其他类调用 关闭数据库连接
//以此判断三个变量不为空 就关闭
public static void closest(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
增删查改实现
在前面new了一个student的对象
方便其他类调用调用studentd的set get方法, 给 占位符 赋值
扩展: 如果我使用jdbctemplate 在配置文件里让注入student 到此类中,就不用new对象了
直接使用即可
public class StudentDao {
Student s= new Student();
@Ignore
//增加数据
public void add() throws SQLException {
//创建一个conn变量 得到StudentUtil类的 静态方法 返回的结果
Connection conn = StudentUtil.getConnection();
//sql语句
String sql = "insert into bj (name,qq,type,time,stunum,daily,wish,senior) values(?,?,?,?,?,?,?,?)";
//使用preparedStatement读取sql语句 (预编译,减少sql执行
PreparedStatement ps = conn.prepareStatement(sql);
//preparedStatement调用自身set方法 向sql传入参数
// s.getxx 为调用实体类student中的get方法
//传入参数
ps.setString(1, s.getname());
ps.setInt(2, s.getqq());
ps.setString(3, s.getType());
ps.setString(4, s.getTime());
ps.setInt(5, s.getstunum());
ps.setString(6, s.getdaily());
ps.setString(7, s.getWish());
ps.setString(8, s.getSenior());
//执行sql语句
ps.execute();
}
@Ignore
//删除数据
public void delete() throws SQLException {
Connection conn = StudentUtil.getConnection();
String sql = "delete from bj where id = ?";PreparedStatement ps = conn.prepareStatement(sql);
//传入参数
ps.setInt(1, s.getid());
//执行sql语句
ps.execute();
}
@Test
//删除数据
public void selectId() throws SQLException {
Connection conn = StudentUtil.getConnection();
String sql = "select * from bj where id = ?";PreparedStatement ps = conn.prepareStatement(sql);
//传入参数
ps.setInt(1, s.getid());
// 执行sql语句
ResultSet rs = ps.executeQuery();
//使用结果集的 next()方法将光标移至下一行
//使用getxxx方法获得所在行指定列的值
while (rs.next()) {
System.out.print(rs.getInt("id"));
System.out.print(rs.getString("name"));
System.out.println(rs.getInt("qq"));
System.out.println(rs.getString("type"));
System.out.println(rs.getString("time"));
System.out.println(rs.getInt("stunum"));
System.out.println(rs.getString("daily"));
System.out.println(rs.getString("wish"));
System.out.println(rs.getString("senior"));
}
}
@Test
//更改数据
public void update()throws SQLException{
//获取连接
Connection conn= StudentUtil.getConnection();
//sql语句
String sql ="update bj set name= ? where id=?";
//执行并查询语句
PreparedStatement ps = conn.prepareStatement(sql);
//传入参数 这里直接给占位符赋值 没有用student的get方法
ps.setString(1,"我改名啦哈哈哈哈哈");
ps.setInt(2,7);
//执行sql语句
ps.executeUpdate();
System.out.println("更改完毕");
}
}
明天计划的事情:
后面所有计划都列完了
按这个来
遇到的问题:
很细致,但进度很慢
收获:
已经慢慢查资料
把不懂得点搞明白了
评论