DriverManager——Connection——Statement——ResultSet 不够完善的版本
1.连接,封装成类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class DBConnection {
String url="jdbc:mysql://localhost:3306/yinhang?charaterEncoding=UTF-8";
String user="root";
String password="";
//将Connection作为属性处理:Connection用做tcp建立,如果放在每个方法中,
//每次调用一个方法一次,就会使得每次访问都会进行一次tcp连接,效率低
private Connection conn=null;
//注册数据库的驱动
//加载驱动只需要加载一次——写作静态代码块
//每次新建一个MyDBConnecton类就只运行一次
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//构造函数
//创建连接和数据库连接对象
//每new一次连接一次,即每次新建一个connection时就有一次tcp连接
public DBConnection() {
try {//try/catch积极处理数据库连接不上的问题
//获取数据库连接
this.conn=DriverManager.getConnection(url, user, password);
System.out.println("数据库连接成功................");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//executeUpdate实现DML增删改查
//形参String sql,即sql语句
public int executeUpdate(String sql) {
//Statement是平台与数据库的桥梁——在cs之间传送命令,取回结果
//Statement 接口提供了执行语句和获取结果的基本方法
Statement stmt=null;
int m=0;
try {
stmt=conn.createStatement();
m=stmt.executeUpdate(sql);//executeUpdate(sql)的返回值是更新的条数
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if(stmt!=null)
stmt.close();//释放资源
//Statement 对象将由 Java 垃圾收集程序自动关闭
//而作为一种好的编程风格,应在不需要 Statement对象时显式地关闭它们。
//这将立即释放 DBMS 资源,有助于避免潜在的内存问题。
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return m;
}
//executeQuery用于产生单个结果集的语句,例如 SELECT 语句。
//返回ResultSet
//不足:如果资源释放了,就不能返回ResultSet,
//因为ResultSet依赖Statement,如果Statement释放掉了,resultset就不能返回
public ResultSet executeQuery(String sql) {
Statement stmt=null;
ResultSet rs=null;//创建一个ResultSet对象,用来返回SQL查询结果
//ResultSet:由字节流转化成二维表。结果是一个二维表
try {//try catch 防止sql语句写错
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
}
return rs;
}
//可以做到资源释放
//但是这个arraylist要自己非常了解数据库信息
//针对性,没有普遍性
public ArrayList
2、DBIO接口
import java.sql.ResultSet;
public interface DBIO
{
String toSQL();//生成sql语句——各表类继承该接口,可以生成各自表的增删改查语句
Object toObject(ResultSet rs);//orm 将resultset转换成object
}
3、表封装成Student类
import java.sql.ResultSet;
import java.sql.SQLException;
public class Student implements DBIO
{
private String sno;
private String sname;
private String sex;
private String dept;
private String birth;
private Integer age;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
//重写Student表的插入sql语句
@Override
public String toSQL() {
StringBuffer sql=new StringBuffer(500);
sql.append("insert into student(sno,sname,sex,dept,birth,age)values('");
sql.append(this.sno).append("','").append(this.sname).append("','");
sql.append(this.sex).append("','").append(this.dept).append("','");
sql.append(this.birth).append("',").append(this.age);
sql.append(")");
return sql.toString();
}
@Override
public Object toObject(ResultSet rs) {
Student stu=null;
if(rs==null)
return null;
stu=new Student();
try {
stu.setSno(rs.getString("sno"));
stu.setSname(rs.getString("sname"));
stu.setSex(rs.getString("sex"));
stu.setDept(rs.getString("dept"));
stu.setBirth(rs.getString("birth"));
stu.setAge(rs.getInt("age"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stu;
}
}
4、App_insert
public class AppStu {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stu=new Student();
stu.setSno("s018");
stu.setSname("bbb");
stu.setSex("男");
stu.setDept("外语系");
stu.setBirth("2021-10-17");
stu.setAge(0);
System.out.println(stu.toSQL());
DBConnection dbcon=new DBConnection();//连接数据库
dbcon.insert(stu);//保存插入
}
}
5、App_query
public class AppQuery {
public static void main(String[] args) {
// TODO Auto-generated method stub
DBConnection dbcon=new DBConnection();
String sql="select * from student";
ArrayList lists=dbcon.executeQuery3(sql,new Student());
if(lists==null)
for(int i=0;i



