4.JDBC执行查,增,删,改

7 篇文章 0 订阅
4 篇文章 0 订阅

查询和(删除,增加,修改)不同

1.查询有返回值,需要ResultSet结果集来封装查询到的数据。用executeQuery()方法

2.删除,增加,修改


/**
	 * 通过 JDBC 向指定的数据表中插入一条记录. 
	 * 
	 * 1. Statement: 用于执行 SQL 语句的对象
	 * 1). 通过 Connection 的 createStatement() 方法来获取
	 * 2). 通过 executeUpdate(sql) 可以执行 SQL 语句.
	 * 3). 传入的 SQL 可以是 INSRET, UPDATE 或 DELETE. 但不能是 SELECT
	 * 
	 * 2. Connection、Statement 都是应用程序和数据库服务器的连接资源. 使用后一定要关闭.
	 * 需要在 finally 中关闭 Connection 和 Statement 对象. 
	 * 
	 * 3. 关闭的顺序是: 先关闭后获取的. 即先关闭 Statement 后关闭 Connection
	 */
	@Test
	public void testStatement() throws Exception{
		//1. 获取数据库连接
		Connection conn = null;
		Statement statement = null;
		
		try {
			conn = getConnection2();
			
			//3. 准备插入的 SQL 语句
			String sql = null;
			
//			sql = "INSERT INTO customers (NAME, EMAIL, BIRTH) " +
//					"VALUES('XYZ', 'xyz@atguigu.com', '1990-12-12')";
//			sql = "DELETE FROM customers WHERE id = 1";
			sql = "UPDATE customers SET name = 'TOM' " +
					"WHERE id = 4";
			System.out.println(sql);
			
			//4. 执行插入. 
			//1). 获取操作 SQL 语句的 Statement 对象: 
			//调用 Connection 的 createStatement() 方法来获取
			statement = conn.createStatement();
			
			//2). 调用 Statement 对象的 executeUpdate(sql) 执行 SQL 语句进行插入
			statement.executeUpdate(sql);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				//5. 关闭 Statement 对象.
				if(statement != null)
					statement.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally{
				//2. 关闭连接
				if(conn != null)
					conn.close();							
			}
		}
		
	}


查询到的结果是一个集合:

/**
	 * ResultSet: 结果集. 封装了使用 JDBC 进行查询的结果. 
	 * 1. 调用 Statement 对象的 executeQuery(sql) 可以得到结果集.
	 * 2. ResultSet 返回的实际上就是一张数据表. 有一个指针指向数据表的第一样的前面.
	 * 可以调用 next() 方法检测下一行是否有效. 若有效该方法返回 true, 且指针下移. 相当于
	 * Iterator 对象的 hasNext() 和 next() 方法的结合体
	 * 3. 当指针对位到一行时, 可以通过调用 getXxx(index) 或 getXxx(columnName)
	 * 获取每一列的值. 例如: getInt(1), getString("name")
	 * 4. ResultSet 当然也需要进行关闭. 
	 */
	@Test
	public void testResultSet(){
		//获取 id=4 的 customers 数据表的记录, 并打印
		
		Connection conn = null;
		Statement statement = null;
		ResultSet rs = null;
		
		try {
			//1. 获取 Connection
			conn = JDBCTools.getConnection();
			System.out.println(conn);
			
			//2. 获取 Statement
			statement = conn.createStatement();
			System.out.println(statement);
			
			//3. 准备 SQL
			String sql = "SELECT id, name, email, birth " +
					"FROM customers";
			
			//4. 执行查询, 得到 ResultSet
			rs = statement.executeQuery(sql);
			System.out.println(rs);
			
			//5. 处理 ResultSet
			while(rs.next()){
				int id = rs.getInt(1);
				String name = rs.getString("name");
				String email = rs.getString(3);
				Date birth = rs.getDate(4);
				
				System.out.println(id);
				System.out.println(name);
				System.out.println(email);
				System.out.println(birth);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			//6. 关闭数据库资源. 
			JDBCTools.release(rs, statement, conn);
		}
		
	}


数据库原理实验指导书 实验名称:试验一:SQL语言嵌套询和数据更新操作 所属课程:数据库原理 实验类型:设计型实验 实验类别:基础□ 专业基础√ 专业□ 实验学:4学 一、实验目的 1.熟悉和掌握对数据表数据的询操作和SQL命令的使用,学会灵活熟练的使用SQL 语句的各种形式; 2.加深理解关系运算的各种操作(尤其的关系的选择,投影,连接和除运算); 3.熟悉和掌握数据表数据的插入、修除操作和命令的使用; 4.加深理解表的定义对数据更新的作用 二、预习与参考 1.熟悉SQL SERVER 工作环境; 2.连接到学生-课程数据库 3.复习对表数据询的SQL语言命令; 4.复习对表数据的插入、修除的SQL语言命令。 三、实验要求(设计要求) 针对教材例子,通过SQL SERVER企业管理器和询分析器两种模式,熟悉数据嵌套询、更新操作。 四、实验方法及步骤 1.在表S、C、SC上进行简单询; 2.在表S、C、SC上进行连接询; 3.在表S、C、SC上进行嵌套询; 4.使用聚合函数的询; 5.对数据的分组询; 6.对数据的排序询。 7. 将数据插入当前数据库的表S、C、SC; A:用SQL命令形式 B:用SQL SERVER提供的企业管理器以交互方式进行 8.将以上插入的数据分别以.SQL文件和.txt文件的形式保存在磁盘上; 9.修表S、C、SC的数据;   A:用SQL命令形式 B:用SQL SERVER提供的企业管理器以交互方式进行 10.除表S、C、SC的数据。 A:用SQL命令形式 B:用SQL SERVER提供的企业管理器以交互方式进行 五、实验内容 在表S,C,SC上完成以下操作: 1. 询学生的基本信息; 2. 询“CS”系学生的基本信息; 3. 询“CS”系学生年龄不在19到21之间的学生的学号、姓名; 4. 找出最大年龄; 5. 找出“CS”系年龄最大的学生,显示其学号、姓名; 6. 找出各系年龄最大的学生,显示其学号、姓名; 7. 统计“CS”系学生的人数; 8. 统计各系学生的人数,结果按升序排列; 9. 按系统计各系学生的平均年龄,结果按降序排列; 10. 询每门课程的课程名; 11. 询无先修课的课程的课程名和学数; 12. 统计无先修课的课程的学总数; 13. 统计每位学生选修课程的门数、学分及其平均成绩; 14. 统计选修每门课程的学生人数及各门课程的平均成绩; 15. 找出平均成绩在85分以上的学生,结果按系分组,并按平均成绩的升序排列; 16. 询选修了“1”或“2”号课程的学生学号和姓名; 17. 询选修了“1”和“2”号课程的学生学号和姓名; 18. 询选修了课程名为“数据库系统”且成绩在60分以下的学生的学号、姓名和成绩; 19. 询每位学生选修了课程的学生信息(显示:学号,姓名,课程号,课程名,成绩); 20. 询没有选修课程的学生的基本信息; 21. 询选修了3门以上课程的学生学号; 22. 询选修课程成绩至少有一门在80分以上的学生学号; 23. 询选修课程成绩均在80分以上的学生学号; 24. 询选修课程平均成绩在80分以上的学生学号; 25. 选做:针对SPJ数据库的四个表S,P,J,SPJ,完成教材P74-75--习题5询及教材P127--习题5询。 26. 将数据分别插入表S、C、SC; 27. 将表S、C、SC的数据分别以.SQL文件和.txt文件的形式保存在磁盘上。 28. 在表S、C、SC上练习数据的插入、修除操作。(比较在表上定义/未定义主码(Primary Key)或外码(Foreign Key)的情况) 29. 将表S、C、SC的数据全部除,再利用磁盘上备份的数据来恢复数据。 30. 如果要在表SC插入某个学生的选课信息(如:学号为“200215121”,课程号为“c123”,成绩待定),应如何进行? 31. 求各系学生的平均成绩,并把结果存入数据库; 32. 将“CS”系全体学生的成绩置零; 33. 除“CS”系全体学生的选课记录; 34. 除学号为“S1”的相关信息; 35. 将学号为“S1”的学生的学号修为“S001”; 36. 把平均成绩大于80分的男同学的学号和平均成绩存入另一个表S——GRADE(SNO,AVG——GRADE); 37. 把选修了课程名为“数据结构”的学生的成绩提高10%; 38. 把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生的成绩提高5%; 39. 把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生成绩除掉; 40. 选做:将数据插入SPJ数据库的四个表S,P,J,SPJ,并以.SQL文件和.txt文件的形式保存在磁盘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值