• 7.21实习培训日志-JDBC JSP Servlet


    JDBC JSP Servlet

    总结

    今天早上的考试主要考Java的网络,HttpClient的get,post方法,Socket的文件传输和Xml和Json文件的解析,对于HttpCLient很简单,只需要用HttpCLient去读取文件就行了,而对于Socket需要注意用换行符,因为有时候没有换行符代码会阻塞在readline处,使代码不往下执行,但是又很难找到原因。而对于Xml和Json文件的解析,需要注意编码格式,用utf-8编码,不然编码会有问题。如果有第三方库的话,mvn package打包的jar中只会含有自己的代码,直接用java -jar *.jar会报一个类找不到的错误,对于这种情况,我们需要在maven打包时把第三方依赖打包进去,有多种方式可以选择,最简单的选择maven-assembly-plugin插件,设置descriptorRefs运行即可。

    maven打包

    maven打包打上第三方依赖包

    Maven生成可以直接运行的jar包的多种方式

    maven-dependency-plugin插件的使用

    Copying project dependencies

    IDEA错误

    Error:java: Compilation failed: internal java compiler error

    解决

    1. 1、查看项目的jdk(Ctrl+Alt+shift+S) File ->Project Structure->Project Settings ->Project
    2. File ->Project Structure->Project Settings -> Modules -> (需要修改的工程名称) -> Sources ->
    3. 查看idea中Java配置(Compiler->Java Compiler)

    JDBC

    ODBC:Open DataBase Connetivity

    JDBC:Java DataBase Connectivity

    JDBC API

    1. DriverManager
    2. Connection
    3. Statement
    4. PreparedStatement
    5. ResultSet

    JDBC Driver API

    1. JDBC-ODBC bridge
    2. 部分java技术的本地API驱动程序
    3. 全部基于java技术的本地API驱动程序
    4. 全部基于java技术的本地协议驱动程序

    JDBC编程流程

    1. 加载驱动
    2. 打开连接
    3. 执行查询
    4. 处理结果
    5. 清理环境

    JDBC为什么使用反射加载驱动

    1. 驱动jar包不存在时,我们有其他方法
    2. 解耦(避免或减少未来切换数据源时对代码的变更。)

    JDBC java mysql

    1. 使用mysql-connector-java(maven)
    2. mysql-connector-java 8用Class.forName("com.mysql.cj.jdbc.Driver");,不要用Class.forName("com.mysql.jdbc.Driver");

    JDBC 连接 MySQL 时碰到的小坑

    为什么不需要Class.ForName("com.mysql.cj.jdbc.Driver")也可以执行

    query

    private static void query(){
            String sql = "select * from t_user where id = ?";
            try(Connection connection = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PWD);
                PreparedStatement statement = connection.prepareStatement(sql);){
                statement.setInt(1,2);
                ResultSet rs = statement.executeQuery();
                while (rs.next()){
                    System.out.print(rs.getInt("id")+" ");
                    System.out.print(rs.getString("username")+" ");
                    System.out.print(rs.getString("pwd")+" ");
                    System.out.print(rs.getString("email")+" ");
                    System.out.println();
                }
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    

    insert

    private static void insert(){
            String sql = "insert into t_user(id,username,pwd,email) values  (?,?,?,?)";
            try (Connection connection = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PWD);
                 PreparedStatement statement = connection.prepareStatement(sql);){
                statement.setInt(1,3);
                statement.setString(2,"dey");
                statement.setString(3,"123");
                statement.setString(4,"123@qq.com");
                //返回值是更新的记录数量
                int resultNum = statement.executeUpdate();
                System.out.println("插入的记录数量:"+resultNum);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    

    update

    private static void update(){
            String sql = "update t_user set username=?,pwd=?,email=? where id =?";
            try (Connection connection = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PWD);
                 PreparedStatement statement = connection.prepareStatement(sql);){
                statement.setString(1,"lcu");
                statement.setString(2,"123u");
                statement.setString(3,"123u@qq.com");
                statement.setInt(4,3);
                //返回值是更新的记录数量
                int resultNum = statement.executeUpdate();
                System.out.println("更新的记录数量:"+resultNum);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    

    delete

    private static void delete(){
            String sql = "delete from t_user where id=?";
            try (Connection connection = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PWD);
                 PreparedStatement statement = connection.prepareStatement(sql);){
                statement.setInt(1,3);
                //返回值是更新的记录数量
                int resultNum = statement.executeUpdate();
                System.out.println("删除的记录数量:"+resultNum);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    

    JDBC 事务

    1. 原子性
    2. 一致性
    3. 隔离性
    4. 持久性
  • 相关阅读:
    es6新增特性,数组的操作方法
    导航钩子有哪几种,如何将数据传入下一个点击的路由页面
    父组件如何获取子组件数据,子组件如何获取父组件数据,父子组件如何传值
    watch和computed的区别
    vue页面中定时器的使用
    table表格,顶端对齐
    计算机组成原理8-FPGA、ASIC、TPU、虚拟机
    vue中使用socket连接后台
    计算机组成原理7-CISC和RISC、GPU
    计算机组成原理6-流水线、多发射和超标量、SIMD、异常
  • 原文地址:https://www.cnblogs.com/sufferingStriver/p/9403437.html
Copyright © 2020-2023  润新知