jdbc(java数据库连接)

1、jdbc概述

全称:java datebse connectivity

作用:一种标准java应用编程接口(API),用来连接java编程语言和广泛的数据库。可以通过jdbc代码实现对数据库的操作。DML,DQL等进行数据库的增删改查

jdbc步骤:

1.加载驱动,通过反射机制

2.获得连接

3.执行sql语句处理结果

4.关闭资源

public class StudentDao {
//数据交互层(持久层)
//实现实体类和数据看库表映射,进行增删改查
//想student表中添加一条记录
	
//参数列表student对象
//返回类型boolean
	public boolean addStudent(Student stu) {
		Connection conn=null;
		Statement sm=null;
		try {           
		//			1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");//mysql 5.x版本适用
//			Class.forName("com.mysql.cj.jdbc.Driver");//mysql 8.x版本适用
		//			2.获得连接
			conn=DriverManager.getConnection(
//					"url",
//					"username",
//					"password"
					"jdbc:mysql://localhost:3306/"
					+ "day20?useUnicode=true&charcterEncoding=utf8",
					"root",
					"root"
					);// url资源路径 ,username 数据库名称 passuseUnicode=true&word密码
//			3.执行sql语句处理结果
			String sql="insert into student values("
					+stu.getStuId()+",'"
				    +stu.getStuName()+"',"+stu.getStuAge()+")";
//			获取语句对象
			sm=conn.createStatement();
//			1.DNL语句int executeUpdate()返回受作用的行数
//			2.ResultSet DQL语句executeQuery()返回包含结果的结果集
			int result =sm.executeUpdate(sql);
			if(result>0) {
				return true;
			}
			return false;
			
//			4.关闭资源
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	
		finally {
			
				try {
					if(sm!=null)
					sm.close();	
					if(conn!=null)conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		
		}

		
	}
//	删除
	public boolean deleteStudent(int stuId) {
		Connection conn=null;
		Statement sm=null;
		//		1.加载驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn=DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/"
							+ "day20?useUnicode=true&charcterEncoding=utf8",
							"root",
							"root"
					);
//			3.执行sql语句
			String sql="delete from student where stu_id="+stuId;
			sm=conn.createStatement();
			int result=sm.executeUpdate(sql);
			if(result>0) {
				return true;
			}
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		finally{
			if(sm!=null) {
				try {
					sm.close();
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
		
	}
//	改
	public boolean updateStudent(Student stu) {
		Connection conn=null;
		Statement sm=null;
		//		1.加载驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn=DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/"
							+ "day20?useUnicode=true&charcterEncoding=utf8",
							"root",
							"root"
					);
//			3.执行sql语句
			String sql="update student set stu_name='"+stu.getStuName()+"',stu_age="
					+ stu.getStuAge()+" where stu_id="+stu.getStuId();
	
			sm=conn.createStatement();
			int result=sm.executeUpdate(sql);
			if(result>0) {
				return true;
			}
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		finally{
			if(sm!=null) {
				try {
					sm.close();
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
						}
		}
		
	}
	//查询——根据学生编号(某个条件)查询结果(单条数据)
//	参数stuId
//	返回类型Student对象
	public Student getStuById(int stuId) {
	Connection conn=null;
	Statement sm=null;
	ResultSet rs=null;
	try {           
		Class.forName("com.mysql.jdbc.Driver");
		conn=DriverManager.getConnection(				
				"jdbc:mysql://localhost:3306/"
				+ "day20?useUnicode=true&charcterEncoding=utf8",
				"root",
					"root"
				);
		sm=conn.createStatement();
		String sql="select*from student where stu_id="+stuId;
				//		ResultSet结果集
		rs=sm.executeQuery(sql);
//	rs.nex();判断是否含有下一条数据
//	rs.getxxx(列字段)根据字段获取对于的java类型数据
//		rs.getxxx(列索引)根据字段的顺序获取对应列的java类型数据		
		if(rs.next()) {
		String stuName=rs.getString("stu_name");//查询结果的字段顺序
		int stuAge=rs.getInt(3);
		Student stu=new Student(stuId, stuName, stuAge);
		return stu;
		}
		return null;
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		return null;
	}
	finally {
		try {
				if(rs!=null)rs.close();	
				if(sm!=null)sm.close();
				if(conn!=null)conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	
	}	
}
//	一览
//	无参
//	返回结果集合list,存取一致,允许重复
	public List<Student> showAllStu(){
		Connection conn=null;
		Statement sm=null;
		ResultSet rs=null;
		List<Student> list=new ArrayList<Student>();
	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn=DriverManager.getConnection(				
				"jdbc:mysql://localhost:3306/"
				+ "day20?useUnicode=true&charcterEncoding=utf8",
				"root",
					"root"
				);
		sm=conn.createStatement();
		String sql="select*from student";
		rs=sm.executeQuery(sql);
		while(rs.next()) {
			int stuId=rs.getInt(1);
			String stuName=rs.getNString(2);
			int stuAge=rs.getInt(3);
			Student stu=new Student(stuId, stuName, stuAge);
		list.add(stu);
		}
		return list;
	}catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
		return null;
	} 
	finally {
		// TODO: handle finally clause
		
			try {
				if(rs!=null)
				rs.close();
				if(sm!=null)sm.close();
				if(conn!=null)conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}
	}
	
}

sql类型对应的java类型

sqljava
bit,boolboolean
Integerint
bigintlong
float,doubledouble
char,varcharstring
DECIMALBigDecimal
DATEDATE

预处理语句对象:

PerparedStatement ps=conn.prepareStatement();

使用预处理语句对象时,sql语句要拼接参数用?代表替换占位符

ps.setxxx(index,value);替换

语句对象的?,xxx表示值的java类型,index表示?的顺序,value替换的值。

练习:

package heros.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import hero.util.DBUtils;
import heros.vo.Heros;

public class HerosDao {

	public boolean addHeros(Heros her) {
		Connection conn=null;
//		Statement sm=null;
		PreparedStatement ps=null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn=DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/day20?useUnicode=true&charcterEncoding=utf8",
					"root",
					"root"
					);
//			sm=conn.createStatement();
//			String sql="insert into heros "
//					+ "values("+her.getId()+",'"+her.getName()+"', '"+
//					her.getPosition()+"',"+her.getAd()+")";
//					预处理语句对象是sql预计要拼接的参数用?代替
					
			String sql="insert into heros values(?,?,?,?)";
			ps=conn.prepareStatement(sql);
			ps.setInt(1,her.getId() );
			ps.setString(2, her.getName());
			ps.setString(3, her.getPosition());
			ps.setInt(4, her.getAd());
			
			int result=ps.executeUpdate();
			if(result>0) {
				return true;
			}
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}finally {
			
				try {
					if(ps!=null)ps.close();
//					if(sm!=null)sm.close();
					if(conn!=null)conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
		}
	}
	
	public boolean deleteHeros(String herName) {
		Connection conn=null;
//		Statement sm=null;
		PreparedStatement ps=null;
		try {
//			1。加载驱动,通过反射机制
//			2获得链接
//			3执行sql处理结果
//			4.关闭资源
			Class.forName("com.mysql.jdbc.Driver");
			conn=DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/day20?useUnicode=true&charcterEncoding=utf8",
					"root",
					"root"
					);
//			sm=conn.createStatement();
			String sql="delete from heros where heros_name=?";

			ps=conn.prepareStatement(sql);
			ps.setString(1, herName);
			int result=ps.executeUpdate();
			if(result>0) {
				return true;
			}
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}finally {
			
				try {
					if(ps!=null)ps.close();
//					if(sm!=null)sm.close();
					if(conn!=null)conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
		}
		
	}
	
public boolean updateHeros(Heros her) {

	PreparedStatement ps=null;
	Connection conn=DBUtils.getconn();
	String sql="update heros set heros_id=?,herso_position=?,herso_ad=? where heros_name=?";
	try {

		
		ps=conn.prepareStatement(sql);
		ps.setInt(1,her.getId() );
		ps.setString(2, her.getPosition());
		ps.setInt(3, her.getAd());
		ps.setString(4, her.getName());
		
		int result=ps.executeUpdate();
		if(result>0) {
			return true;
		}
		return false;
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		return false;
	}finally {
		DBUtils.close(conn, ps, null);
	}
	
}
	
	public Heros getHerById(String HerName) {
		
		Connection conn=DBUtils.getconn();
		PreparedStatement ps=null;
		ResultSet rs=null;
		String sql="select*from heros where heros_name=?";
		try {
			ps=conn.prepareStatement(sql);
			ps.setString(1, HerName);
			rs=ps.executeQuery();
			if(rs.next()) {
				int herId=rs.getInt(1);
				String herPrsition=rs.getString(3);
				int herAd=rs.getInt(4);
				Heros her=new Heros(herId, HerName, herPrsition, herAd);
				return her;
			}
			return null;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}finally {
			DBUtils.close(conn, ps, rs);	
		}	
	}
	
	public List<Heros> showAllHer(){
		Connection conn=DBUtils.getconn();
		PreparedStatement ps=null;
		ResultSet rs=null;
		String sql="select*from heros";
		List<Heros> list=new ArrayList<Heros>();
		try {
			
			ps=conn.prepareStatement(sql);
			rs=ps.executeQuery(sql);
			while(rs.next()) {
				int herId=rs.getInt(1);
				String herName=rs.getString(2);
				String herPrsition=rs.getString(3);
				int herAd=rs.getInt(4);
				Heros her=new Heros(herId, herName, herPrsition, herAd);
			list.add(her);
			}
			return list;
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return null;
		} 
		finally {
			// TODO: handle finally clause
			DBUtils.close(conn, ps, rs);
		}
	}
}


package hero.util;

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

public class DBUtils {
//	传入url,user,password获取指定的Connection
//	固定url,user,password获取指定的Connection
public static Connection getconn() {
	try {
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn=DriverManager.getConnection(
				"jdbc:mysql://localhost:3306/day20?useUnicode=true&charcterEncoding=utf8",
				"root",
				"root"
				);
		return conn;
	} catch (Exception e) {
		// TODO: handle exception
		e.addSuppressed(e);
	return null;
	}
}
	//传入流对象关闭
	public static void close(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) {
			// TODO: handle exception
		}
	}
}


package hero.view;

import java.util.Scanner;

import heros.dao.HerosDao;
import heros.vo.Heros;

public class HeroView {
	int choose=0;
	HerosDao dao=new HerosDao();
	public void view() {
		Scanner sc=new Scanner(System.in);
		do {
		System.out.println("=====开始=====");
		System.out.println("====1.添加=====");
		System.out.println("====2.删除=====");
		System.out.println("====3.修改=====");
		System.out.println("====4.查询=====");
		System.out.println("====5.一览=====");
		System.out.println("====6.退出=====");
		System.out.print("=======请输入:");
		 choose=sc.nextInt();
		switch(choose) {
		case 1:
			System.out.println("====1.添加=====");
			System.out.println("id");
			int heroId1=sc.nextInt();
			System.out.println("名称");
			String heroName1=sc.next();
			System.out.println("位置");
			String heroPosition1=sc.next();
			System.out.println("ad");
			int heroAd1=sc.nextInt();
			Heros hero1=new Heros(heroId1, heroName1, heroPosition1, heroAd1);
			if(dao.addHeros(hero1)) {
				System.out.println("成功");
			}else {
				System.out.println("失败");
			}
			break;
		case 2:
			System.out.println("要删除的名称");
			String heroName2=sc.next();
			if(dao.deleteHeros(heroName2)) {
				System.out.println("成功");
			}else {
				System.out.println("失败");
			}
			System.out.println("====2.删除=====");
			break;
		case 3:	
			System.out.println("====3.修改=====");
			System.out.println("输入名称");
			String heroName3=sc.next();
			System.out.println("要修改的id");
			int heroId3=sc.nextInt();
			System.out.println("要修改的位置");
			String heroPosition3=sc.next();
			System.out.println("要修改的ad");
			int heroAd3=sc.nextInt();
			Heros hero3=new Heros(heroId3, heroName3, heroPosition3, heroAd3);
			if(dao.updateHeros(hero3)) {
				System.out.println("成功");
			}else {
				System.out.println("失败");
			}
		
			break;
		case 4:
			System.out.println("====4.查询=====");
			System.out.println("输入名称");
			String heroName4=sc.next();
			if(dao.getHerById(heroName4)!=null) {
				System.out.println(dao.getHerById(heroName4));
				System.out.println("成功");
			}else {
				System.out.println("失败");
			}
			
			
			break;
		case 5:
			System.out.println("====5.一览=====");
			if(dao.showAllHer()!=null) {
				for (Heros her : dao.showAllHer()) {
					System.out.println(her);
				}
				System.out.println("成功");
			}else {
				System.out.println("失败");
			}
			break;
		case 6:
			System.out.println("====6.退出======");
		break;
		default: System.out.println("输入错误");
			
		}
	}while(choose!=6);
}
}

preparedStatement和statement的区别

1.preparedStatement可以在使用占位符“?”是预编译的,批处理比Statement效率高

2.preparedStatement对象的资源占用高,如果对数据看操作是一次性,用Statement

3.preparedStatement可以防止数据库注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值