JAVA-JDBC

一、第一个类 DB :在该类中定义通用的数据库相关操作:加载驱动、获取链接、关闭资源

package com.sdgy.db;

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

/**
 * 这个类实现通用的数据库操作:加载驱动、获取链接、关闭资源
 */
public class DB {
	private static final String DRIVER ="com.mysql.jdbc.Driver";
	// ?characterEncoding=utf-8 :解决中文问题,如果没有这个,插入汉字时会出现异常,中文会显示为?
	private static final String URL = "jdbc:mysql://localhost:3306/db?characterEncoding=utf-8"; 
	private static final String USER = "root";
	private static final String PWD = "1234";
	
	//1.加载驱动
	static {
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//2.获取链接对象(已简化编写)
	public static Connection getConn() throws SQLException {
		return DriverManager.getConnection(URL,USER,PWD);
	}
	
	//3.关闭所有的资源
	public static void closeAll(ResultSet rs,PreparedStatement pst,Connection conn) {
		try {
			if(rs != null) {
				rs.close();
			}
			if(pst != null) {
				pst.close();
			}
			if(conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

二、第二个类 BaseDao :在该类中定义通用的 增删改查的方法(增删改共用一个方法,查询用一个方法)

package com.sdgy.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.sdgy.db.DB;

/**
 * 这是一个通用的增删改查的类
 */
public class BaseDao {
	Connection conn;
	PreparedStatement pstm;
	ResultSet rs;
	
	//1.通用的 增、删、改
	public boolean zsg(String sql,Object...obs) {
		try {
			conn = DB.getConn(); //获取连接对象
			pstm = conn.prepareStatement(sql);  //调用连接对象conn的prepareStatement方法,获取管理sql语句的对象
			if(obs != null) {    //根据可变参数,判断sql字符串中的问号,并对其进行赋值
				for (int i = 0; i < obs.length; i++) {
					pstm.setObject(i+1, obs[i]);   //对sql语句中的问号进行赋值处理
				}
			}
			int jg = pstm.executeUpdate(); //真正的执行数据库的操作,返回影响的记录行数
			return jg>0;   // 如果记录行数大于0,则返回 true
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			DB.closeAll(rs, pstm, conn); //关闭所有的资源
		}
		return false;
	}
	
	//2.通用的 查询
	public ResultSet cx(String sql,Object...obs){
		try {
			conn = DB.getConn(); //获取连接对象
			pstm = conn.prepareStatement(sql); 
			if(obs != null) {
				for (int i = 0; i < obs.length; i++) {
					pstm.setObject(i+1, obs[i]);
				}
			}
			return pstm.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		//注意:此时不还能关闭所有的资源!因为 rs 并没有包含所有的数据,而是指向了数据库中的第一行数据的前面,是一个指针。
		return rs;
	}
}

三、对于以上通用类的使用:
以操作学生表为例,需要编写一个操作学生表的类,这个类只需要继承 上面的 BaseDao 类即可
一般情况,会编写一个实体类与数据库的表记录的列一一对应,方便用该实体类的对象 保存数据库的一个记录
1、实体类:Student

package com.sdgy.pojo;

public class Student {
	private int id;
	private String name;
	private int age;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	
}

2、操作学生表的类,继承通用的 BaseDao 类

package com.sdgy.dao;

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

import com.sdgy.db.DB;
import com.sdgy.pojo.Student;

public class DoStudent extends BaseDao{

	//插入一个学生记录 调用通用的增删改方法 zsg
	public boolean addStudent(Student stu) {
		String sql = "insert into student values(?,?,?)";
		return zsg(sql, stu.getId(),stu.getName(),stu.getAge());
	}
	
	//删除一个学生记录 调用通用的增删改方法 zsg
	public boolean deleteStudent(int id) {
		String sql = "delete from student where id=?";
		return zsg(sql, id);
	}
	
	
	//查询所有学生记录,将查询到的结果放入List集合中
	public List<Student> listAllStudent(){
		List<Student> list = new ArrayList<Student>();
		String sql  = "select * from student";
		rs = cx(sql);  //调用通用的查询方法
		try {
			while(rs.next()) {
				Student s = new Student();
					s.setId(rs.getInt("id"));
					s.setName(rs.getString("name"));
					s.setAge(rs.getInt("age"));
				list.add(s);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			DB.closeAll(rs, pstm, conn);  //对于查询,需要在这里进行关闭资源
		}
		return list;
	}
}

四、测试: 在MyTest 中进行测试

package com.sdgy.ui;

import java.util.List;

import com.sdgy.dao.DoStudent;
import com.sdgy.pojo.Student;

public class MyTest {

	public static void main(String[] args) {
		
		DoStudent ds = new DoStudent();
//测试往数据库中插入数据
//		Student s = new Student();
//		s.setId(109);
//		s.setName("bbb");
//		s.setAge(10);
//		boolean ad =ds.addStudent(s);
//		if(ad) {
//			System.out.println("往数据表中插入数据成功!");
//		}

//测试删除一个数据
//		boolean bo = ds.deleteStudent(101);
//		if(bo) {
//			System.out.println("删除成功!");
//		}

//测试查询:
		List<Student> ls = ds.listAllStudent();
		for (int i = 0; i < ls.size(); i++) {
			System.out.println(ls.get(i));
		}
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值