核心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);
        }

7. 关闭资源

.close();

其中的几个问题

1.jdbc的概念

Java 数据库连接(Java Database Connectivity,简称 JDBC)是一种用于在Java应用程序中连接和操作数据库的API(应用程序编程接口)。它允许Java应用程序与各种关系型数据库建立连接,并通过执行SQL语句来进行数据的增删改查操作。

2.为什么不使用DriverManager.registerDriver(new Driver());加载驱动

此方法会注册两次驱动
1.DriverManger.registerDriver() 方法本身会注册一次
2.Driver.static{DriverManager.registerDriver()} 静态代码块也会注册一次

3.静态代码块触发的机制

在类加载之前会被触发:

1.加载: class文件-->jvm的class对象
2. 连接: 验证(语法错误,文件类型) --> 准备(静态变量默认值) --》 解析(触发静态代码块)
3. 初始化(静态属性赋真实值)

4.当sql语句含有动态值的时候,为什么不适合用statement

1.需要拼接字符串,比较麻烦
2.只能处理字符串类型
3.会发生注入攻击

例如:

String sql = "select * from t_user where account = '"+account+"' and password = '"+password+"';";//拼接账号密码
//此时输入密码为:' or '1' = '1 改变了sql语句的原有结构

5.为什么说preparedStatement 不会发生注入攻击?

因为生成preparedStatement的时候,先传输一遍sql语句的结构,无法通过动态值来混淆,改变sql语句的结构。

6.遍历结果集的方法

1.使用next()方法移动游标,while循环遍历行
2.每一行中遍历列(双重循环)
3.将每一列的数据以key = 列名,value = 数据的方式存入Map
4.创建一个List<Map>,将每行的Map保存

7.要用columLabel 不要用 columName

因为columName获取的是真名,无法获取别名

热门相关:有个人爱你很久   不科学御兽   拒嫁豪门,前妻太抢手   本法官萌萌哒   拒嫁豪门,前妻太抢手