发表于: 2019-10-26 23:35:10

1 933


今天完成的事情:

今天看了下静态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("更改完毕");
   }
}




明天计划的事情:

后面所有计划都列完了  

按这个来  

遇到的问题:

很细致,但进度很慢

收获:

已经慢慢查资料

把不懂得点搞明白了




返回列表 返回列表
评论

    分享到