Java复习笔记18【JDBC查询2】

package com.lesson12.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/*
 * 学习封装查询代码,了解格式化结果集
 * */
/*
 * ArrayList知识点回顾:
 * 1.定义:
 * (1)ArrayList arrayName = new ArrayList();
 *  创建普通的动态数组,元素是object对象,可以存放任意类型
 * (2)ArrayList<E> arrayName = new ArrayList<E>();
 *  创建支持泛型的动态数组,元素可以是自定义类型,ArrayList<E>表示泛型类型,
 *  泛型类型必须是引用类型,不能是基本数据类型
 * 2.常用方法:
 * (1)添加元素  aList.add()
 * (2)返回数组中第i个元素  aList.get(i)
 * (3)获得动态数组长度  aList.size()
 * ------------------------------------------------------
 * Map知识点回顾:
 * 1.定义:
 * (1)Map map = new HashMap();
 * (2)Map<String,String> map = new HashMap<String,String>();
 * 2.赋值(添加元素): map.put(key,value)
 * 	 map是以key-value的形式存放的,put添加相同key能够直接覆盖原值
 * 3.通过Map的key值获取对应的value值:map.get(key)
 * 4.根据键key从Map中移除数据元素,并返回被删除元素的值value:map.remove(key)
 * 5.获取Map尺寸(即Map包含数据元素key-value对的总数):map.size()
 * */
public class JDBCExample2 {
	private Connection conn = null;
	private Statement stmt = null;
	private ResultSet res = null;
	private ResultSetMetaData rsmd = null;
	
	/*
	 *阶段三:使用数据结构ArrayList存储所有的记录信息
	 *-----------------------------------
	 * 当查询不同的table时,阶段二的方法每次获取需要的记录都必须
	 * 重新重新查询一遍,因为记录没有保存,所以第三阶段需要学会使用
	 * 数据结构存储所有的记录,方便以后对记录的使用 
	 * */
	public ArrayList<String> find3(String sql){ 
		ArrayList<String> arrList = new ArrayList<String>();
		/*
		 * 使用ArrayList存储所有信息,则ArrayList第i个元素能够存储
		 * 第i条记录,由于记录由不连续的字段组成,所以需要将一条记录的所有字段
		 * 进行拼接(使用String类型)后存储
		 * */
		getConnection();
		try{
			res = stmt.executeQuery(sql);
			rsmd = res.getMetaData();
			int columnCount = rsmd.getColumnCount();
			while(res.next()){
				String record = "";//注意:局部变量声明时必须设置初始值
				//String类型可以通过+直接将两个String类型拼接成一个字符串
				for(int i=1;i<=columnCount;i++){
					String columnName = rsmd.getColumnName(i);
					String columnValue = res.getString(columnName);
					record = record + columnValue + "-";
					//分隔不同字段,方便以后的读取
				}
				//将拼接完的记录信息添加到ArrayList中
				arrList.add(record);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			close();
		}
		return arrList;
	}
	
	/*
	* 阶段四:使用数据结构map存储所有的记录信息
	* --------------------------------------
	* 使用ArrayList<String>结构存储,索引太多,不方便查询和修改,所以尝试
	* 使用ArrayList<Map<String,String>>结构对记录进行存储,可以直接
	* 通过key-value的关系进行操作
	* */
	public ArrayList<Map<String,String>> find4(String sql){
		ArrayList<Map<String,String>> mapList = new ArrayList<Map<String,String>>();
		getConnection();
		try{
			res = stmt.executeQuery(sql);
			rsmd = res.getMetaData();
			int columnCount = rsmd.getColumnCount();
			while(res.next()){
				//每条记录都用resMap存储所有字段的信息
				Map<String,String> resMap = new HashMap<String,String>();
				for(int i=1;i<=columnCount;i++){
					String columnName = rsmd.getColumnName(i);
					String columnValue = res.getString(columnName);
					//将字段名-字段值以key-value的形式放入map中
					resMap.put(columnName, columnValue);
				}
				//将存完的记录以map的形式,放入ArrayList数组中
				mapList.add(resMap);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			close();
		}
		return mapList;
	}
	
	/*
	 * 该方法用于连接数据库
	 * */
	public void getConnection(){
		try{
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3308/test";
			conn = DriverManager.getConnection(url,"root","mysql");
			stmt = conn.createStatement();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	/*
	 * 该方法用于关闭资源
	 * */
	public void close(){
		try{
			if(res != null){ //关闭结果集
				res.close();
			}
			if (stmt != null) { //关闭语句对象
				stmt.close();
			}                      
			if(conn != null){ //关闭连接
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static void main(String args[]){
		JDBCExample2 je = new JDBCExample2();
		System.out.println("-------- 阶段三 使用数据结构ArrayList<String>存储信息  ---------");
		String sql1 = "select * from student";
		ArrayList<String> resList = je.find3(sql1);
		for(int i=0;i<resList.size();i++){
			System.out.println(resList.get(i));
		}
		System.out.println("-------- 阶段四 使用数据结构ArrayList<Map<String,String>>存储信息---------");
		String sql2 = "select * from student";
		ArrayList<Map<String,String>> resMap = je.find4(sql2);
		for(int i=0;i<resMap.size();i++){
			//获取第i条记录
			Map<String,String> map = resMap.get(i);
			//map可以通过key获取value,这里得到字段Sname对应的字段值
			String Sname = map.get("Sname");
			if(Sname.equals("张三")){
				//修改记录值,map中put添加元素能够直接覆盖原值
				map.put("age","24");//Map中元素类型都是String,需要用双引号
			}
		}
		for(int i=0; i<resMap.size();i++){
			//输出ArrayList<Map<String,String>>中所有元素
			System.out.println(resMap.get(i));
		}
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值