zoukankan      html  css  js  c++  java
  • JDBC添加数据

    JDBC添加数据
      数据库连接的类型是 Connection 类型, 如果要操作数据库还需要使用该对象来发送 sql语句

    Connection 的方法:
      viod close() throws SQLExection
        关闭数据库连接, 数据库连接使用完毕之后必须关闭
      boolean isClosed() throws SQL Exection
        判断该连接是否关闭
      void commit() throws SQLExection
        在程序中手工提交事务
      void rollback() throws SQLExection
        事务的回退
      void setAutoCommit(boolean autoCommit) throws SQLExection
        在 mysql 的 JDBC 中事务是自动提交的, 如果不需要事务自动提交则可以使用该方法进行设置
        设置为false 则表示取消自动提交
      Statement create Statement() throws SQLExection
        取得一个发送 sql 语句的接口对象, 但是现在不是哦用该接口对象来发送 sql 语句了,
        因为该接口存在一定的性能问题以及安全问题 (比如 sql 语句注入风险), 效率也低
          sql 注入:sql 注入是多年前的一个概念了, 就是可以通过 sql 注入的方式实现无密码的操作
      PreparedStatement preparedStatement(String sql)
        取得一个发送 sql 语句的接口对象,该对象的类型就是 PreparedStatement 接口,其他第三方数据层工具封装也是该接口,
        该接口可以避免类似于 sql注入 的安全风险问题, 并且效率更高 (现在程序中将 sql 语句编译成指令后再发送到数据库,
        数据库只需要直接执行指令即可)

    PreparedStatement 中的发送 sql 语句的方法:
      ResultSet executeQuery( ) throws SQLExection
        执行查询语句,将查询到的结果封装到 ResultSet 接口对象中
      int executeUpdate( ) throws SQLExection
        执行的是更新类型 (insert, update, delete) 的 sql 语句, 返回值的是成功更新数据的条数)

    Demo: 定义插入数据的程序

    public class TestMysql {
        //取得连接
        private static Connection conn =ConnectionUitl.getConnection();
        
        public static void main(String[] args) {
            System.out.println("插入的数据行数是: " + insertEmp());
        }
        
        public static int insertEmp() {
            PreparedStatement pst = null;
            
            //定义出 sql 语句
            String sql = "INSERT INTO emp(empno,ename,job,sal,hiredate,mgr,comm,deptno)"
                    +" VALUES(1002,'王五','总裁',9000.00,NOW(),7788,2000.00,10)";
            
            //使用连接对象取得发送 sql 语句的对象 (PreparedStatment 接口对象)
            try {
                conn.setAutoCommit(false); //取消事务的自动提交
                pst = conn.prepareStatement(sql);
                //发送 sql 语句
                return pst.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                ConnectionUitl.close(conn,pst);
            }
            return 0;
        }
    }

    Demo: 手动提交事务

     1 public class TestMysql {
     2     //取得连接
     3     private static Connection conn =ConnectionUitl.getConnection();
     4     
     5     public static void main(String[] args) {
     6         System.out.println("插入的数据行数是: " + insertEmp());
     7     }
     8     
     9     public static int insertEmp() {
    10         int affectRow = 0;
    11         
    12         PreparedStatement pst = null;
    13         
    14         //定义出 sql 语句
    15         String sql = "INSERT INTO emp(empno,ename,job,sal,hiredate,mgr,comm,deptno)"
    16                 +" VALUES(1002,'王五','总裁',9000.00,NOW(),7788,2000.00,10)";
    17         
    18         //使用连接对象取得发送 sql 语句的对象 (PreparedStatment 接口对象)
    19         try {
    20             conn.setAutoCommit(false); //取消事务的自动提交
    21             pst = conn.prepareStatement(sql);
    22             //发送 sql 语句(手动提交事务)
    23             affectRow = pst.executeUpdate();
    24             conn.commit(); 
    25             return affectRow;
    26         } catch (SQLException e) {
    27             e.printStackTrace();
    28         } finally {
    29             ConnectionUitl.close(conn,pst);
    30         }
    31         return 0;
    32     }
    33 }
  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/yslf/p/10731840.html
Copyright © 2011-2022 走看看