鼠扑 发表于 2023-8-8 00:44:52

核心api_JDBC_使用步骤总结

JDBC使用步骤总结

1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");2. 获取链接
Connection connection =
                DriverManager.getConnection(url,user,password);3. 创建statement
//静态:
Statement statement = connection.createStatement();
//动态:
PreparedStatement preparedstatement = connection.preparedStatement();
//编写sql语句,其中动态值用 ? 代替
String sql = "";4. 占位符赋值
//下标从1开始
preparedStatement.setObject(index,value);5. 发送sql语句获取结果集
//非DDL语句
int i = preparedStatement.executeUpdate();
//DDL语句
ResultSet = preparedStatement.executeQuery();6. 查询结果解析结果集
/*
resulset看成一个表格,里面有行有列,其中含有一个游标,初始指向第1行之前
可以通过next()方法遍历
getObject(columName):获取当前行此列名的对象

resulset 包含 MetaData对象
*/

//构建metaData对象
      ResultSetMetaData metaData = resultSet.getMetaData();

      //调用方法获取列数
      int columnCount = metaData.getColumnCount();

      ArrayList<Map> list = new ArrayList<>();


      while (resultSet.next()){//遍历行
            Map map = new HashMap();
            for (int i = 1; i <= columnCount; i++) {//遍历列
                Object value = resultSet.getObject(i);
                //要用columLabel 不要用 columName,因为columName获取的是真名,无法获取别名
                String columnLabel = metaData.getColumnLabel(i);
                map.put(columnLabel,value);
            }
            list.add(map);
      }4.当sql语句含有动态值的时候,为什么不适合用statement
.close();例如:
此方法会注册两次驱动
1.DriverManger.registerDriver() 方法本身会注册一次
2.Driver.static{DriverManager.registerDriver()} 静态代码块也会注册一次5.为什么说preparedStatement 不会发生注入攻击?
因为生成preparedStatement的时候,先传输一遍sql语句的结构,无法通过动态值来混淆,改变sql语句的结构。
6.遍历结果集的方法
1.加载: class文件-->jvm的class对象
2. 连接: 验证(语法错误,文件类型) --> 准备(静态变量默认值) --》 解析(触发静态代码块)
3. 初始化(静态属性赋真实值)7.要用columLabel 不要用 columName
因为columName获取的是真名,无法获取别名

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 核心api_JDBC_使用步骤总结