zoukankan      html  css  js  c++  java
  • JDBC数据库常用操作(mysql)

    JDBC
    英文名称:JavaDataBaseConnectivity
    中文名称:java数据库连接
    简称:JDBC
    JDBC是一种用于执行SQL语句的JavaAPI,
    可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用
    程序。

    一、建立数据库连接

    1、引用jar文件(http://dev.mysql.com/downloads/connector/j/ 下载jar文件)

    2、注册驱动Class.forName(“com.mysql.jdbc.Driver”)(只需注册一次)

    3、定义数据库连接字符串URL="jdbc:mysql://127.0.0.1:3306/数据库名称?user=用户名&password=密码&useUnicode=true&characterEncoding=utf-8";

      JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
      user:用户名
      password:密码
      useUnicode:是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true
      characterEncoding:当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk
      autoReconnect:当数据库连接异常中断时,是否自动重新连接。(默认:false)
      autoReconnectForPools:是否使用针对数据库连接池的重连策略。(默认:false)
      failOverReadOnly:自动重连成功后,连接是否设置为只读。(默认:true)
      maxReconnects:autoReconnect设置为true时,重试连接的次数 (默认3:)
      initialTimeout:autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 2
      connectTimeout:和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本 0
      socketTimeout:socket操作(读写)超时,单位:毫秒。 0表示永不超时

    二、常用数据库操作

      //数据库连接字符串
        public static final String DRIVER="com.mysql.jdbc.Driver";
        public static final String URL="jdbc:mysql://127.0.0.1:3306/MyLibrary?user=root&password=123456&useUnicode=true&characterEncoding=utf-8";

    1、添加数据

        public static void insert()throwsSQLException{
            Connectioncon=null;
            Statementst=null;
            try{
                Class.forName(DRIVER);
                con=DriverManager.getConnection(URL);
                st=con.createStatement();
                st.execute("insertintoarticle(title)values('标题');");
            }catch(ClassNotFoundExceptione){
                e.printStackTrace();
            }finally{
                con.close();
                st.close();
            }
        }

    2、删除数据

        public static void delete(intid)throwsSQLException{
            Connectioncon=null;
            Statementst=null;
            try{
                Class.forName(DRIVER);
                con=DriverManager.getConnection(URL);
                st=con.createStatement();
                st.executeUpdate("deletefromarticlewhereid="+id+";");
            }catch(ClassNotFoundExceptione){
                e.printStackTrace();
            }finally{
                con.close();
                st.close();
            }
        }

    3、修改数据

        public static void update()throwsSQLException{
            Connectioncon=DriverManager.getConnection(URL);
            Statementst=con.createStatement();
            st.executeUpdate("updatearticlesettitle='新标题'whereid=1;");
            con.close();
            st.close();
        }

    4、查询数据

        public static void select()throwsSQLException{
            Connectioncon=null;
            Statementst=null;
            try{
                Class.forName(DRIVER);
                con=DriverManager.getConnection(URL);
                st=con.createStatement();
                ResultSetrs=st.executeQuery("select*fromarticle;");
                while(rs.next()){
                    System.out.print(rs.getInt("id"));
                    System.out.println(rs.getString("title"));
                }
                //按表结构自动输出
    //            ResultSetMetaDatarsmd=rs.getMetaData();
    //            for(inti=1;i<rsmd.getColumnCount();i++){
    //                System.out.print(rsmd.getColumnName(i));
    //                System.out.println(rsmd.getColumnTypeName(i));
    //            }
            }catch(ClassNotFoundExceptione){
                e.printStackTrace();
            }finally{
                st.close();
                con.close();
            }
        }

    5、参数预处理

        public static void insert(Stringtitle)throwsSQLException{
            Connectioncon=DriverManager.getConnection(URL);
            PreparedStatementpst=con.prepareStatement("insertintoarticle(title)values(?);");
            pst.setString(1,title);
            pst.executeUpdate();
            con.close();
            pst.close();
        }

    6、批处理

        public static void insertBatch(String[]title)throwsSQLException{
    //        Connectioncon=DriverManager.getConnection(URL);
    //        Statementst=con.createStatement();
    //        for(inti=0;i<title.length;i++){
    //            st.addBatch("insertintoarticle(title)values('"+title[i]+"');");
    //        }
    //        st.executeBatch();        
    //        con.close();
    //        st.close();
            
            //参数预处理+批处理
            Connectioncon=DriverManager.getConnection(URL);
            PreparedStatementpst=con.prepareStatement("insertintoarticle(title)values(?);");
            for(inti=0;i<title.length;i++){
                pst.setString(1,title[i]);
                pst.addBatch();
            }
            pst.executeBatch();
            con.close();
            pst.close();
        }

    7、事务操作

      7.1、数据库事务的特性:
        原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
        一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
        隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
        持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
      7.2、JDBC事务操作
      (1)setAutoCommit(Booleanauto Commit):设置是否自动提交事务;
      (2)commit():提交事务;
      (3)rollback():撤消事务;
        默认的情况为自动提交事务,也就是说,每一条对数据库的更新的sql语句代表一项事务,操作成功后,系统自动调用commit()来提交,否则将调用rollback()来撤消事务。在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交事务。然后就可以把多条更新数据库的sql语句做为一个事务,在所有操作完成之后,调用commit()来进行整体提交。倘若其中一项sql操作失败,就不会执行commit()方法,而是产生相应的sqlexception,此时就可以捕获异常代码块中调用rollback()方法撤消事务。

        public static void transaction()throwsSQLException{
            Connectioncon=DriverManager.getConnection(URL);
            Statementst=con.createStatement();
            try{
                con.setAutoCommit(false);//更改JDBC事务的默认提交方式
                st.executeUpdate("deletefromarticlewhereid=1;");
           //Savepoint sp = conn.setSavepoint();设置回滚点 st.executeUpdate(
    "deletefromarticlewhereid=2;"); con.commit();//提交JDBC事务 con.setAutoCommit(true);//恢复JDBC事务的默认提交方式 }catch(Exceptionexc){ con.rollback();//回滚JDBC事务 }finally{ st.close(); con.close(); } }

    8、调用mysql存储过程

        public static void callProcedure()throwsSQLException{
            Connectioncon=DriverManager.getConnection(URL);
            CallableStatementcst=con.prepareCall("{callproc_select(?)}");
         //传入参数值 cst.setInt(
    1,3); //如果第一个结果是ResultSet对象,则返回true;如果第一个结果是更新、添加、修改或者没有结果,则返回false booleanissuccess=cst.execute(); //成功返回true,失败返回false System.out.println(issuccess); }

    三、JDBC执行sql语句方法

      1、executeQuery(String sql): 执行SQL查询,并返回ResultSet 对象。

      2、executeUpdate(String sql): 可执行增,删,改,返回执行受到影响的行数。

      3、execute(String sql);:可执行任何SQL语句,返回一个布尔值,表示是否返回ResultSet 。

    四、JDBC Statement类型

      1、Statement:接口提供了执行语句和获取结果的基本方法,用于执行不带参数的简单SQL语句,每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。

      2、PrepareStatement:可变参数的SQL,编译一次,执行多次,效率高;安全性好,有效防止Sql注入等问题;支持批量更新,批量删除;执行的SQL语句中是可以带参数的,并支持批量执行SQL。由于采用Cache机制,则预先编译的语句,就会放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来。

      3、CallableStatement:用于执行对数据库已存储过程的调用,继承自PreparedStatement,支持带参SQL操作;支持调用存储过程,提供了对输出和输入/输出参数的支持;
    在JDBC中调用存储过程的语法如下所示:
      {call过程名[(?,?)]}
      返回结果参数的过程的语法为:
      {?=call过程名[(?,?,...)]}
      不带参数的存储过程的语法类似:
      {call过程名}
      CallableStatement中定义的所有方法都用于处理OUT参数或INOUT参数的输出部分:注册OUT参数的JDBC类型(一般SQL类型)、从这些参数中检索结果,或者检查所返回的值是否为JDBCNULL。

  • 相关阅读:
    redis 操作使用
    sublime 设置像IDE一样的 ctrl+鼠标左键 跳转到定义方法
    tensorflow进阶篇-5(反向传播2)
    tensorflow进阶篇-5(反向传播1)
    Linux后台进程管理以及ctrl+z(挂起)、ctrl+c(中断)、ctrl+(退出)和ctrl+d(EOF)的区别(转)
    mysql基础知识(3)
    mysql基础知识(2)
    tensorflow进阶篇-4(损失函数3)
    tensorflow进阶篇-4(损失函数2)
    mysql基础知识(1)
  • 原文地址:https://www.cnblogs.com/web369/p/4549052.html
Copyright © 2011-2022 走看看