2018/08/01总结 jdbc

jdbc(java database connection)
接口是一种约束,不用管内部的实现,只需要调用其方法
特点:面向接口编程(api接口 statement),面向数据库编程

jdbc连接数据库的步骤
第一步 加载数据库的驱动包(通过反射来加载)
第二步 获取数据库的连接
第三步 执行相应的操作
第四步 关闭资源

三层架构:对应的设计模式:mvc (model view controller)
好处:分层思想 使代码结构更加清晰化,便于修改,有利于后期项目的扩展,避免冗余代码
缺点:代码量增大

dao(用于连接数据库)
service(用于逻辑控制)
jsp(视图的显示)

具体的的操作如下:
创建一个方法类 :BaseDao
班级对象类:Grade
接口类:GradeDao
接口实现类:GradeDaoImpl

1.BaseDao:

package com.offcn.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//连接数据库基类 (方法类)
public class BaseDao {

private     String driver="com.mysql.jdbc.Driver";
private     String url="jdbc:mysql://localhost:3306/student";
//url构造=jdbc: +数据库类型+://+ip地址+:端口号+/数据库名
private     String user="root";
private     String password="123456";
private     Connection conn ;   

//获取连接
public Connection getConnection(){
try {
Class.forName(driver);
conn = DriverManager.getConnection(url,user,password);

    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
return conn;
}

//SQL语句 delete form student where id =?;

//增删改

    public   int  exceUpdate(String sql,Object[] objects){
        //sql为数据库命令
        PreparedStatement  ps=null;
        int  num =-1;
        try {
            //获取连接对象
            conn  = getConnection();


        //执行静态sql语句,并返回结果的对象
          ps = conn.prepareStatement(sql);

            //填充参数
            if(objects !=null && objects.length>0){
                for (int i = 0; i < objects.length; i++) {
                    //替代占位符
                    ps.setObject((i+1), objects[i]);
                    //(i+1)是问好点索引,objects[i]是问好具体点值

                }
            }
            //执行修改等操作
            num =  ps.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            close(conn, ps, null);
        }
        return num;


    }



    //查询
    public ResultSet getResultSet(String sql,Object[] object ){
        ResultSet rs=null;

        conn=getConnection();
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            if(object!=null&&object.length>0){
            for (int i = 0; i < object.length; i++) {
                ps.setObject((i+1), object[i]);

            }


            }
            rs=ps.executeQuery();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rs;

    }


    //关闭资源    从后往前关

public void close(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) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

2.Grade:

package com.offfcn.entity;

import java.io.Serializable;
//表格对象类
public class Grade implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int gradeId;
private String gradeName;

public int getGradeId() {
    return gradeId;
}
public void setGradeId(int gradeId) {
    this.gradeId = gradeId;
}
public String getGradeName() {
    return gradeName;
}
public void setGradeName(String gradeName) {
    this.gradeName = gradeName;
}
@Override
public String toString() {
    return "Grade [gradeId=" + gradeId + ", gradeName=" + gradeName + "]";
}

}

3.GradeDao :

package com.offcn.dao;

import java.util.List;

import com.offfcn.entity.Grade;

//创建一个接口类,定义一个查询方法

public interface GradeDao {

//接口中都是抽象方法,没有方法体


//根据id查询
 public List<Grade> selectAllByIdGrade();

//根据id删除


//根据id修改
 public int updateByIdGrade(Grade grade);

//增加
public int addGrade(Grade grade);


//获取总记录数
int selectCount();

}

4.GradeDaoImpl:

package com.offfcn.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.offcn.dao.BaseDao;
import com.offcn.dao.GradeDao;
import com.offfcn.entity.Grade;

//具体实现层
public class GradeDaoImpl extends BaseDao implements GradeDao{

@Override
public List<Grade> selectAllByIdGrade() {
    ArrayList<Grade> gradesList = new ArrayList<Grade>();

String sql = " select * from grade";

ResultSet rs = this.getResultSet(sql, null);
try {
    while(rs.next()){
        Grade grade = new Grade();
        grade.setGradeId(rs.getInt("gradeID"));
        grade.setGradeName(rs.getString("gradeName"));
        gradesList.add(grade);

    }
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}





    return gradesList;
}

@Override
public int updateByIdGrade(Grade grade) {
    String sql = "update grade set gradeName = ? where gradeID= ?";
    Object[] objects= {grade.getGradeName(),grade.getGradeId()};
    int num = this.exceUpdate(sql, objects);

    return num;
}

@Override
public int addGrade(Grade grade) {
    String sql="insert into grade values(?,?)";
    Object[] objects={grade.getGradeId(),grade.getGradeName()};
    int num = this.exceUpdate(sql, objects);

    return num;
}

@Override
public int selectCount() {
    int row=-10;
    try {
        String sql = "select * from grade";
        ResultSet re = this.getResultSet(sql, null);
        re.last();
        row = re.getRow();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return row;

}

}

然后需要对数据库表格进行操作时,就可以创建GradeDaoImpl类对象,连接具体的数据库,进行各种操作

猜你喜欢

转载自blog.csdn.net/weixin_42844971/article/details/81335895