/**
* 执行query查询
* 导包
* 加载驱动
* 获取连接
* 创建状态参数
* 执行ResultSet rs = executeQuery(String sql); Set<Map<String,Object>>
* if(rs.next()){
* rs.getXXX(列的序号int--从开始)
* rs.getXXX("列名字");
* }
* rs.getString();可以接收任何一个列的值 什么类型都可以
* rs.getInt();不能接受其他类型 比如String
*
* =======================================================
* 实现了所有JDBC的流程 增删改查 单 多
* 基础上细致说明几个问题
* 1.导包
* 2.加载驱动类的时候
* 8.x 5.x版本不一致 有问题
* 如果5.x版本 com.mysql.jdbc.Driver
* 如果8.x版本 com.mysql.cj.jdbc.Driver
* 3.获取连接时候
* 8.x 5.x版本不一致 有问题
* 如果5.x版本 url----> jdbc:mysql://ip:port/database名
* 如果8.x版本 url----> jdbc:mysql://ip:port/database名?serverTimezone=CST
* -----------------------------------------------------------
* 加载驱动的问题
* 1.通过反射机制
* Class.forName("类全名");----->类中的静态成员
* static特征修饰符 属性 方法 块 内部类
* 2.通过DriverManager静态方法注册驱动
* DriverManager.registerDriver(new Driver());
* 3.通过直接创建驱动对象
* new Driver();
* 4.通过System类中设置属性值来加载
* System.setProperty("jdbc.driver","com.mysql.cj.jdbc.Driver");
* ------------------------------------------------------------
* 操作事务
* 1.JDBC默认的开启事务 默认的自动提交事务
* 2.可以自己设置手动提交事务
* conn.setAutoCommit(false); false表示手动提交 true默认 表示自动提交
* 3.可以设置事务的隔离级别
* conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
* 4.事务最终的处理操作
* conn.commit();
* conn.rollback();
*
* Savepoint s = conn.setSavepoint("x");
* conn.rollback(s);
*/
package query;
import com.mysql.cj.jdbc.Driver;
import java.sql.*;
public class TestUpdate {
public static void main(String[] args){
try {
String className = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/student?serverTimezone=CST";
String user = "root";
String password = "root";
String sql = "select * from emp";
//加载驱动
//Class.forName(className);
//DriverManager.registerDriver(new Driver());
//new Driver();
//System.setProperty("jdbc.driver","com.mysql.cj.jdbc.Driver");
//获取连接
Connection conn = DriverManager.getConnection(url,user,password);
//创建状态参数
Statement stat = conn.createStatement();
//执行一个update操作(DML) DDL
// int count = stat.executeUpdate(sql);//有返回值 表示数据库更新的行数
// System.out.println("执行完毕");
//执行一个query操作(DQL) 数据库没发生真实的变化 我需要得到结果 做处理 肯定需要返回值
//一行记录 里面有8个值 一堆的值怎么存?Map<String,Object>
// 数组[8] Object[8]
// 集合List<Object> Set<Object> Map<String,Object>
// Map<列名key,单元格内的值value>
// empno=7369 ename=smith job=clerk mgr=7902 hiredate=1980-1-1 sam=800 comm=null deptno=10
// 一行记录-->Map集合 14行记录--14Map集合
// Set<map> set目的是为了存储好多行记录 每一行是一个map对象
// map目的是为了存储一行中多个单元格的值 key列名 value单元格查询出来
// Set<Map<String,Object>>
// Iterator it = set.iterator();
// it.hasNext();判断是否有下一个元素 it.next()获取
// Enumeration en = pro.propertyNames();
// en.hasMoreElements();判断是否有下一个元素 en.nextElement();获取
// ResultSet rs = stat.executeQuery(sql);
// rs.next();判断是否有下一个元素 rs.getXXX(key);获取
ResultSet rs = stat.executeQuery(sql);
while(rs.next()){
// int value = rs.getInt("hiredate");//String---int Integer.parseInt("abc");
// System.out.println(value);
int empno = rs.getInt(1);
String ename = rs.getString("ename");
Date hiredate = rs.getDate("hiredate");//java.util java.sql
float sal = rs.getFloat("sal");
System.out.println(empno+"--"+ename+"--"+hiredate+"--"+sal);
}
System.out.println("执行完毕");
//关闭操作
rs.close();
stat.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}