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类对象,连接具体的数据库,进行各种操作