JDBC数据库连接与增删改查

package cn.yunhe.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;

/**
 *jdbc连接数据库
 *步骤:
 *1,关联数据库驱动包(导入驱动jar包)
 *2,注册驱动
 *3,连接数据库获取连接对象(登陆操作,选择数据库操作)
 *4,执行的SQL语句
 *----4.1先获取执行sql语句的对象
 *----4.2再通过对象调用executeQuery(sql)方法来执行编译好的sql语句,参数传编译好的sql语句,
 *----返回的是一个结果集 ResultSet类型
 *5,处理结果集(执行完SQL语句以后会返回一个结果集)
 *---5.1使用while循环遍历结果集,先使用next()方法判断是否有下一条数据,有的话就开始遍历
 *---每次循环一次是遍历表中的一行数据,
 *---5.2,获取要查询的字段名,参数传的的字段名要和上边定义的sql语句需要查询的字段名相同
 *---(参数也可以传字段下标,下标的位置是从1开始,下标要和上边定义的sql语句中的字段位置相对应)
 *---5.3输出获取到的字段
 *6,关闭数据库连接对象
 *---6.1数据库对象要倒着关
 *---6.2因为有异常需要捕获,建议关闭数据库对象写在finally代码块中(最终必然会执行的代码块)
 *---6.3由于代码块限制变量的作用域问题,所以要将关闭的对象定义成成员变量,并且赋值为null;
 *---6.4关闭之前先判断对象是否为空,不为空就关闭
 *关键字:
 *【Class.forName(className) 注册驱动
 className--参数传Driver的class路径(字符串类型的)路径在导入的驱动com.mysql.jdbc包下面】
 
 *【DriverManager.getConnection(url, user, password)获取数据库连接对象,
 url---数据库的地址,名称   user---登录数据库用户名  password----登录密码】(参数都是字符串类型的)
 
 *  【通过连接数据库对象调用createStatement()方法来获取执行sql语句的对象,Statement类型(导sql下的包)】 
 *  【通过执行sql语句对象调用executeQuery(sql)方法来执行sql语句(此方法是获取查询结果的方法),返回的是一个
 结果集(ResultSet类型)】
 */
public class JdbcDemo {

	public static void main(String[] args) {

		//调用查询方法
		queryMethod();
	}
	/**
	 *jdbc连接与查询
	 */
	public static void queryMethod() {
		Connection conn=null;
		 Statement stt=null;
		 ResultSet res=null;
		
		try {
			//注册驱动 
			Class.forName("com.mysql.cj.jdbc.Driver");
			//连接数据库进行登录操作,获取数据库连接对象,返回的是Connection类型
			 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ur?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
			//执行的sql语句(编译sql需要执行语句 字符串类型)
			String sql="select eno,ename,datebirth,phone from emp";
			//执行编译好的sql语句 1,先获取执行sql语句的对象,返回的是Statement类型 导sql下的包
			 stt=conn.createStatement();
			//执行编译好的sql语句,2,通过对象调用executeQuery(sql)方法来执行,返回的是一个ResultSet类型(结果集)
			 res=stt.executeQuery(sql);
			//遍历结果集
			while(res.next()) {//判断结果集中是否有下一条数据,每次循环遍历是表中的一行数据
				//获取eno字段,调用getInt()方法,参数传字段名,返回的是int类型,也可以传字段位置下表(从1开始)
				int eno=res.getInt("eno");
				//获取ename字段,调用getString()方法,参数传字段名,返回的是字符串类型
				String ename=res.getString("ename");
				//获取datebirth字段,调用getDate()方法,参数传字段名,返回的是日期类型(导util下的包)
				Date datebirth=res.getDate("datebirth");
				//获取phone字段,调用getString()方法,参数传字段名,返回的是字符串类型
				String phone=res.getString("phone");
				System.out.println(eno+"--"+ename+"--"+datebirth+"---"+phone);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			
			try {
				//关闭数据库连接对象---倒着关
			//先判断对象是否为空,不为空就关闭
				if(res!=null) {
					res.close();
				} 
				if(stt!=null) {
					stt.close();
				}
				if(conn!=null) {
					conn.close();
				}
			}catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 添加数据
	 */
	public static void insertMethod() {
		Connection conn=null;
		Statement stt=null;
		try {
			//注册驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//连接数据库,登录
			 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ur?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
			//编译执行的sql语句
			String sql="insert into emp(eno,ename,phone,country) values(14,'小兄黑','18823238899','王锁国')";
			//获取执行sql语句的对象
			 stt=conn.createStatement();
			//通过对象调用执行sql语句的方法(调用修改方法(添加,删除,修改)都属于修改)
			int res=stt.executeUpdate(sql);//返回的是int类型,0代表失败,正数代表成功
			//输出结果
			System.out.println(res);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
				try {
					//关闭数据库---倒着关
					if(stt!=null) {
					stt.close();
					}
					if(conn!=null) {
						conn.close();
					}
			}catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}
	/**
	 * 修改数据
	 */
	public static void updateMethod() {
		Connection conn=null;
		Statement stt=null;
		try {
			//注册驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//连接数据库,登录
			 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ur?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
			//编译执行的sql语句
			String sql="update emp set ename='白xiao白' where eno=12;";
			//获取执行sql语句的对象
			 stt=conn.createStatement();
			//通过对象调用执行sql语句的方法(调用修改方法(添加,删除,修改)都属于修改)
			int res=stt.executeUpdate(sql);//返回的是int类型,0代表失败,正数代表成功
			//输出结果
			System.out.println(res);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
				try {
					//关闭数据库---倒着关
					if(stt!=null) {
					stt.close();
					}
					if(conn!=null) {
						conn.close();
					}
			}catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}
	/**
	 * 删除数据
	 */
	public static void deleteMethod() {
		Connection conn=null;
		Statement stt=null;
		try {
			//注册驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//连接数据库,登录
			 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ur?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
			//编译执行的sql语句
			String sql="delete from emp where eno=13";
			//获取执行sql语句的对象
			 stt=conn.createStatement();
			//通过对象调用执行sql语句的方法(调用修改方法(添加,删除,修改)都属于修改)
			int res=stt.executeUpdate(sql);//返回的是int类型,0代表失败,正数代表成功
			//输出结果
			System.out.println(res);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
				try {
					//关闭数据库---倒着关
					if(stt!=null) {
					stt.close();
					}
					if(conn!=null) {
						conn.close();
					}
			}catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}

}

 

你可能感兴趣的:(java,java)