JDBC

JDBC连接步骤

//添加
public static void insert() {
		//链接对象
		Connection conn = null;
		//执行对象
		PreparedStatement pst = null;
		//接收返回对象
		int result = 0;
		try {
			//1、加载驱动
			Class.forName("com.mysql.jdbc.Driver");
		
		//2、创建链接
		String url = "jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";		//地址
		String user = "root";									//用户名
		String password = "123456";	 							//密码
		
		conn = DriverManager.getConnection(url, user, password);	//链接
		
		//3、创建执行对象
		//sql语句
		String sql = "insert into stu (stuname,age,address) values (?,?,?)";
		//执行对象
		pst = conn.prepareStatement(sql);
		
		pst.setString(1, "小红");
		pst.setInt(2, 22);
		pst.setString(3, "上海");
		
		//4、执行并返回结果
		result = pst.executeUpdate();
		
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		//5、关闭链接
		try {
			pst.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}

查询

public static void select() {
		//创建链接对象
		Connection conn = null;
		//执行对象
		PreparedStatement pst = null;
		//定义结果集对象
		ResultSet rs = null;
		//定义一个集合去接收结果集中的值
		List<Student> list = new ArrayList<Student>();

		try {
			//1、加载驱动
			Class.forName("com.mysql.jdbc.Driver");

			//2、建立链接
			String url = "jdbc:mysql://localhost:3306/student";
			String userName = "root";
			String password = "123456";

			conn = DriverManager.getConnection(url, userName, password);

			//3、创建执行对象
			//sql语句
			String sql = "select * from stu";
			//执行对象
			pst = conn.prepareStatement(sql);
			
			//4、执行并返回结果
			rs = pst.executeQuery();
			
			while (rs.next()) {	//rs包含所有数据,next()表示向下走一行
				Student stu = new Student();
				stu.setStuid(rs.getInt("stuid"));
				stu.setStuname(rs.getString("stuname"));
				stu.setAge(rs.getInt("age"));
				stu.setAddress(rs.getString("address"));
				
				//向集合中添加数据
				list.add(stu);
			}
			
			//遍历集合
			/*
			for(Student s:list) {
				System.out.println(s);
			}
			 */
			/*
			for(int i=0;i<list.size();i++) {
				Student student = list.get(i);
				System.out.println(student);
			}
			*/
			//迭代器
			Iterator<Student> it = list.iterator();
			while(it.hasNext()) {//判断当前元素是否存在,并指向下一个
				Student student1 = it.next();
				System.out.println(student1);
				
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			//5、关闭链接
			try {
				rs.close(); 		//关闭结果集
				pst.close();		//关闭执行对象
				conn.close();		//关闭链接
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

删除

  • PreparedStatement :预编译执行对象,是Statement对象子类

  • 把sql语句预编译并存储到PreparedStatement对象中

  • 它允许该sql语句由占位符 ? ,创建完成以后去对占位符进行赋值,占位符的坐标从1开始

    	public static void main(String[] args) {		
    	//链接对象
    	Connection conn= null;
    	//执行对象
    	PreparedStatement pst = null;
    	//定义变量接收返回结果
    	int result = 0;
    	try {
    		//1、加载驱动
    		Class.forName("com.mysql.jdbc.Driver");
    
    		//2、建立链接
    		String url = "jdbc:mysql://localhost:3306/student";
    		String userName = "root";
    		String password = "123456";
    
    		conn = DriverManager.getConnection(url, userName, password);
    
    		//3、创建执行对象
    		//sql语句
    		String sql = "delete from stu where stuid = ?";
    	
    
    		//创建执行对象
    		pst = conn.prepareStatement(sql);
    		//赋值
    		//pst.setInt(1, 2);
    		pst.setString(1,"2");
    
    		//4、执行并返回结果
    		result = pst.executeUpdate();
    
    	} catch (ClassNotFoundException e) {
    		e.printStackTrace();
    	} catch (SQLException e) {
    		e.printStackTrace();
    	} finally {
    		try {
    			//5、关闭链接
    			pst.close();		//关闭执行对象
    			conn.close(); 		//关闭链接对象
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    
    	if(result>0) {
    		System.out.println("删除成功");
    	}else {
    		System.out.println("删除失败");
    	}
    
    }
    

二、 使用JDBC进行CRUD操作
1、 增加
A、直接拼接SQL语句

String sql = "insert into dept(dname,location,ActualNum,Remaindernum,toplimitnum) values('企合部','济宁',5,5,10)";
	Statement stm = conn.createStatement();
		int result = stm.executeUpdate(sql);

B、使用预编译访问

String sql = "insert into dept(dname,location,ActualNum,Remaindernum,toplimitnum) values(?,?,?,?,?)";
	PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, dname);
	ps.setString(2, location);
	ps.setInt(3, ActualNum);
	ps.setInt(4, remaindernum);
	ps.setInt(5, toplimitnum);
		int result = ps.executeUpdate();

2、 修改
同上
3、 删除
同上
4、 查询

String sql = "select * from dept where did=?";
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, 1);
			
		ResultSet result = ps.executeQuery();
		while(result.next()){
				String dname1 = result.getString(2);
				System.out.println(dname1);
			}

可以根据字段名获取结果值getString(“列名”);
三、 使用JDBC进行批量操作

String sql = "insert into dept(dname,location,ActualNum,Remaindernum,toplimitnum) values(?,?,?,?,?)";
	PreparedStatement ps = conn.prepareStatement(sql);
	for (int i = 0; i < 3; i++) {
				ps.setString(1, dname);
				ps.setString(2, location);
				ps.setInt(3, i);
				ps.setInt(4, 0);
				ps.setInt(5, i);
				ps.addBatch();
	}
		int[] result = ps.executeBatch();

优点:提高数据库访问效率。
四、 使用JDBC进行事务处理
事务处理的核心意义:将一系列操作放在一个事务下管理,正常情况全部执行,异常情况回滚。

Connection conn = DriverManager.getConnection(URL, USER, PWD);
// 需要执行的一系列SQL语句
String sql = "insert into dept(dname,location,ActualNum,Remaindernum,toplimitnum) values('qiyebu','jining',6,4,10)";
String sql2 = "update dept set dname='yuanxiaobu' where dname='qiyebu'";
// 将事务默认提交修改为手动提交
try{
Statement s1 = conn.createStatement();
conn.setAutoCommit(false);
// 执行一系列操作
s1.executeUpdate(sql);
s1.executeUpdate(sql2);
// 提交事务
conn.commit();
// 再将事务改为默认提交
		conn.setAutoCommit(true);
}catch(Exception e){
	conn.rollback();		如果有异常,则回滚
			e. printStackTrace ();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值