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));
}
}
}
Java复习笔记18【JDBC查询2】
最新推荐文章于 2020-06-14 17:57:34 发布