jdbc连接数据库
(Java DataBase Connectivity) 用于使用统一的api对数据库数据进行操作
jdbc是java用于操作数据库的根本技术,之后所有的只要是涉及到java与数据库连接的框架、技术都基于jdbc
jdbc是由sun公司提供的对于数据库操作的统一的接口,由不同的数据库厂商进行实现,从而达成根据不同数据库使用相同的方法进行数据库数据的操作。
jdbc连接数据库步骤
1、加载驱动
使用Class.forName加载存放连接数据库的驱动类
2、获取连接
使用DriverManager对象静态方法输入连接地址、账号、密码获取连接对象
3、创建sql声明对象
连接对象创建声明对象方法创建一个sql的执行声明对象
4、将要执行的sql交由sql执行对象执行
根据sql的种类使用不同的执行方法返回相应结果
5、根据执行不同sql
如果执行的ddl 、dml语句则不处理,如果执行的是dql语句需要额外处理结果集对象
6、关闭连接释放资源
如果不是dql则直接关闭连接,否则需要额外关闭结果集对象
————————————————
自定义框架的步骤 8步
1 生成注解包 annotation
package com.kgc.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Id {
}
2 实体类包 pojo
package com.kgc.pojo;
import com.kgc.annotation.Id;
public class Sclass {
@Id
private Integer id;
private String className;
private Integer GradeID;
public Sclass() {
super();
}
public Sclass(Integer id, String className, Integer gradeID) {
super();
this.id = id;
this.className = className;
GradeID = gradeID;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public Integer getGradeID() {
return GradeID;
}
public void setGradeID(Integer gradeID) {
GradeID = gradeID;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((GradeID == null) ? 0 : GradeID.hashCode());
result = prime * result + ((className == null) ? 0 : className.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Sclass other = (Sclass) obj;
if (GradeID == null) {
if (other.GradeID != null)
return false;
} else if (!GradeID.equals(other.GradeID))
return false;
if (className == null) {
if (other.className != null)
return false;
} else if (!className.equals(other.className))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Sclass [id=" + id + ", className=" + className + ", GradeID=" + GradeID + "]";
}
}
3 连接池包 pool
package com.kgc.pool;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Vector;
public class Mycpool {
// 池 固定连接数 如果说你的连接无限制的开会怎么样 就报错
// 开关问题 总是开关也浪费资源 设想 用到我们就创建 不用我们就留着 不关
// 自定义连接池
// 第一步 定义连接池大小
private static final int MAX_SIZE = 50;
// 第二步 创建单例模式 饿汉式
// 1.生成私有的无参构造
private Mycpool() {
}
// 2.创建对象
private static final Mycpool mycpool = new Mycpool();
// 3.调用方法 返回对象
public static Mycpool getMycpool() {
return mycpool;
}
// 第三步 创建Vector集合 存放Connection连接类 充当连接池
private static Vector<Connection> lists = new Vector<>();
public static int