其他分享
首页 > 其他分享> > 小白对JDBC的一点认识

小白对JDBC的一点认识

作者:互联网

对JDBC的一点粗浅认识

what:jdbc是什么

jdbc是一种规范,是连接数据库与java项目的桥梁
之前没有jdbc的时候,程序员要想连接数据库,都要自己手写一遍连接流程,而市面上有多种数据库,不同的数据库,连接操作的流程是不一样的,这个过程很繁琐。
最早的时候sun的天才们想要出一套可以连接市面上数据库的api(万能数据线,可类比成现在的三头数据线),但是发现各个数据库的操作都不相同,差别太大,工程量太大了。(相当于要每一头数据线要让jdbc自己使用厂家那边的技术来制造,工程量过大)
所以它跟厂家们约定了一套规范,它的那头它自己造,多头的那一侧就由各个厂家自己造。
各个厂家提供的驱动就是他们造的专属数据线的头。

在这里插入图片描述

why :为什么要使用jdbc

不同的数据库,java程序连接修改数据的代码不一样,使用JDBC后更换数据库只需要更换驱动和导入相应的数据库jar包即可,不必修改代码,这样显然更方便

How 怎么使用jdbc

一:加载驱动
Class.forName(“com.mysql.jdbc.Driver”);

二:获得连接

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123");

括号中的三个位置分别对应(url,username,password)
关于url的解释 : 协议(jdbc):数据库类型://ip:端口/数据库
三:预编译(传sql语句)

	String sql = "INSERT INTO person(user_name, sex)values(?,?)";
        //预编译
        PreparedStatement ps= conn.prepareStatement(sql); //预编译SQL,减少sql执行

四:接收结果集并进行操作

//查询
rs = ps.executeQuery();
while(rs.next()) {
					Person per= new Person();		
					per.setName(rs.getString("user_name"));
					per.setSex(rs.getString("sex"));
					return per;
				}

五:关闭资源

public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs) {
		try {
			if(rs != null) rs.close();
			if(ps != null) ps.close();
			if(conn != null) conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

附上老师写的jdbc代码

例子

public class JDBCUtil {
	private static DataSource ds;
	private static Properties p = new Properties();
	private static Connection conn;
	private static PreparedStatement ps;
	private static ResultSet rs;
	
	static {
		try(InputStream is = JDBCUtil.class.getResourceAsStream("/jdbc.properties")){
			p.load(is);
			//这个jdbc.properties配置文件里面只放着,url ,username ,password,驱动名称
			//最后会附上一张图来说明
//			加载驱动
			Class.forName(p.getProperty("driverClassName"));
			
//			创建数据源
			ds = DruidDataSourceFactory.createDataSource(p);
		} catch (Exception e) {
			e.printStackTrace();
		}	

	}
	
	//提供连接数据库的方法
	public static Connection getConnection() {
		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	//把连接放回连接池
	public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs) {
		try {
			if(rs != null) rs.close();
			if(ps != null) ps.close();
			if(conn != null) conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static PreparedStatement getPs() {
		return ps;
	}

	public static ResultSet getRs() {
		return rs;
	}

	//统一查询 省略很多的代码
	public static ResultSet executeQuery(String sql, Object... strs) {
		try {
			conn = getConnection();
			//创建preparestatement对象
			ps = conn.prepareStatement(sql);
			//给参数设值
			if(strs != null) {
				for(int i = 0;i < strs.length;i++) {
					ps.setObject(i+1, strs[i]);
				}
			}
			
			System.out.println("执行sql:" + ps);
			
			//执行查询 
			rs = ps.executeQuery();
			return rs;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static Connection getConn() {
		return conn;
	}

	public static void setConn(Connection conn) {
		JDBCUtil.conn = conn;
	}

	public static void setPs(PreparedStatement ps) {
		JDBCUtil.ps = ps;
	}

	public static void setRs(ResultSet rs) {
		JDBCUtil.rs = rs;
	}

	//统一执行增删改的操作
	public static void executeOrUpdate(String sql, Object[] args) {
		try {
	        conn = getConnection();
			//创建preparestatement对象
			ps = conn.prepareStatement(sql);
			
			System.out.println("执行sql:" + ps);
			//给参数设值
			if(args != null) {
				for(int i = 0;i < args.length;i++) {
					ps.setObject(i+1, args[i]);
				}
			}
			//执行 
			ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
}

在这里插入图片描述
在这里插入图片描述
Dao层:对数据库中的内容进行增删改查

public class DeptDaoImpl implements DeptDao{
	

		@Override
		public void save(Dept dept) {
			String sql="insert into dept_inf(name,remark)values(?,?)";
			Object[] strs= {dept.getName(),dept.getRemark()};
			
			try {
				JDBCUtil.executeOrUpdate(sql, strs);
			}catch(Exception e){
				e.printStackTrace();
			}finally {
				JDBCUtil.closeConn(JDBCUtil.getConnection(), JDBCUtil.getPs(), null);
			}
		}

		@Override
		public void del(Integer[] id) {
			String sql="delete from dept_inf where id=?";
			Object[] strs= {id};
			
			try {
				JDBCUtil.executeOrUpdate(sql, strs);
			}catch(Exception e){
				e.printStackTrace();
			}finally {
				JDBCUtil.closeConn(JDBCUtil.getConnection(), JDBCUtil.getPs(), null);
			}
		}

		@Override
		public Dept getDeptById(Integer id) {
			String sql = "select * from dept_inf where id=?";
			
			//准备参数
			Object[] strs = {id};
			
			ResultSet rs = null;
			try {
				//调用JDBCUtil.executeQuery(sql,strs) 返回结果集
				rs = JDBCUtil.executeQuery(sql, strs);
				//循环  创建部门对象 
				while(rs.next()) {
					Dept dept = new Dept();
				
					dept.setName(rs.getString("name"));
					dept.setRemark(rs.getString("remark"));
					dept.setId(rs.getInt("id"));
					return dept;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				JDBCUtil.closeConn(JDBCUtil.getConn(), JDBCUtil.getPs(), rs);
			}
			
			//返回null
			return null;
		}

		@Override
		public void update(Dept dept) {
			
					String sql="update dept_inf set name=?,remark=? where id=?";
					Object [] strs= {dept.getName(),dept.getRemark(),dept.getId()};
					try {
						JDBCUtil.executeOrUpdate(sql, strs);
						
					}catch(Exception e){
						e.printStackTrace();
					}finally {
						JDBCUtil.closeConn(JDBCUtil.getConnection(), JDBCUtil.getPs(), null);
					}
		}

		//删除单个部门
		@Override
		public void delete(Integer id) {
			String sql="delete from dept_inf where id=?";
			Object[] strs= {id};
			
			try {
				JDBCUtil.executeOrUpdate(sql, strs);
			}catch(Exception e){
				e.printStackTrace();
			}finally {
				JDBCUtil.closeConn(JDBCUtil.getConnection(), JDBCUtil.getPs(), null);
			}
		}

		@Override
		public List<Dept> findAllDept() {
			String sql="select * from dept_inf";
			List<Dept> depts=new ArrayList<>();
			ResultSet rs=null;
			
			try {
				rs=JDBCUtil.executeQuery(sql, null);
				while(rs.next()) {
					Dept dept=new Dept();
					dept.setId(rs.getInt("id"));
					dept.setName(rs.getString("name"));
		            dept.setRemark(rs.getString("remark"));
		            dept.setState(rs.getInt("state"));
		            depts.add(dept);
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
	            JDBCUtil.closeConn(JDBCUtil.getConn(), JDBCUtil.getPs(), rs);
	        }

			return depts;
		}


		
}

啊哈哈哈,最后那个例子没有时间改了,你们凑合看一下,等我有时间了就来修改

标签:ps,JDBC,rs,认识,dept,小白,sql,JDBCUtil,public
来源: https://blog.csdn.net/clm137100/article/details/113806788