zoukankan      html  css  js  c++  java
  • JDBC

    1.环境准备

    MySQL数据库

    数据库驱动:mysql-connector-java-5.1.27.jar,

          maven依赖

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.5</version>
    </dependency>

    2. 常用接口

    2.1 Driver接口:注册JDBC驱动

     // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
        static final String DB_URL = "jdbc:mysql://localhost:3306/DBName";
     
    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
       //static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
       //static final String DB_URL = "jdbc:mysql://localhost:3306/DBName?useSSL=false&serverTimezone=UTC";

    2.2 Connection接口:和接数据库建立连接

    Connection conn = DriverManager.getConnection(DB_URL, "user", "password")

    常用方法如下:

      1. createStatement():创建向数据库发送sql的statement对象。

      2. prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。

    (1) 与 Statement一样,PreparedStatement也是用来执行sql语句的与创建Statement不同的是,需要根据sql语句创建PreparedStatement。除此之外,还能够通过设置参数,指定相应的值,而不是Statement那样使用字符串拼接

    (2) 使用PreparedStatement时,他的SQL语句不再采用字符串拼接的方式,而是采用占位符的方式。“?”在这里就起到占位符的作用。这种方式除了避免了statement拼接字符串的繁琐之外,还能够提高性能。每次SQL语句都是一样的,java类就不会再次编译,这样能够显著提高性能。注意一点,这里的参数索引是从1开始的

      3.prepareCall(sql):创建执行存储过程的callableStatement对象。

      4. setAutoCommit(boolean autoCommit):设置事务是否自动提交。

      5.commit() :在链接上提交事务。

      6. rollback() :在此链接上回滚事务。

    2.3  Statement接口:执行静态SQL语句并返回它所生成结果的对象

    三种Statement类:

      1. Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。

      2. PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。

      3. CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程

    常用Statement方法:

      1. execute(String sql):运行语句,返回是否有结果集

      2. executeQuery(String sql):运行select语句,返回ResultSet结果集

      3. executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数

      4. addBatch(String sql) :把多条sql语句放到一个批处理中

      5. executeBatch():向数据库发送一批sql语句执行

    2.4 ResultSet接口: statement.executeQuery(String sql):运行select语句返回的对象

    ResultSet提供检索不同类型字段的方法,常用的有:

      1. getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。

      2. getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。

      3. getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。

      4. getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。

      5. getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据

      6. ResultSet还提供了对结果集进行滚动的方法

      7. next():移动到下一行

      8. Previous():移动到前一行

      9. absolute(int row):移动到指定行

      10. beforeFirst():移动resultSet的最前面。

      11. afterLast() :移动到resultSet的最后面。

      12. getMetaData()

    2.5 获取每一列的列名

            ResultSetMetaData metaData= resultSet.getMetaData();
            int count=metaData.getColumnCount();
            //index从1开始
            for(int i=1;i<=count;i++){
                //获取每一列的列名
                System.out.println(metaData.getColumnName(i));
            }

    3(重要). 使用后依次关闭对象及连接:ResultSet → Statement → Connection

    //数据库连接(Connection)非常耗资源,尽量晚创建,尽量早的释放
    //都要加try catch 以防前面关闭出错,后面的就不执行了
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (statement != null) {
                        statement.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (connection != null) {
                            connection.close();
                        }
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }

    4. 使用代码

    import java.sql.*;
    
    public class JDBCTest {
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            //设置db_driver, db_url, username , password
            String JDBC_DRIVER="com.mysql.jdbc.Driver";
            String DB_URL="jdbc:mysql://localhost:3306/JDBCTestDB";
            String user="admin";
            String passwd="123456";
            //注册JDBC驱动
            Class.forName(JDBC_DRIVER);
            //建立连接
            Connection connection=DriverManager.getConnection(DB_URL,user,passwd);
            //创建执行SQL语句的 statement
            Statement statement=connection.createStatement();
            //使用statement执行update
            int resultInt= statement.executeUpdate("update student set name='tom' WHERE id ='111'");
            System.out.println(resultInt);
            //使用statement执行select
            ResultSet resultSet=statement.executeQuery("SELECT * from student WHERE id ='111'");
            while (resultSet.next()){
                System.out.println(resultSet.getString("name"));
            }
    
            //数据库连接(Connection)非常耗资源,尽量晚创建,尽量早的释放
            //都要加try catch 以防前面关闭出错,后面的就不执行了
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (statement != null) {
                        statement.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (connection != null) {
                            connection.close();
                        }
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
  • 相关阅读:
    用Python查找数组中出现奇数次的那个数字
    python之路--MySQL多表查询
    python之路--MySQl单表查询
    python之路--MySQL 库,表的详细操作
    python之路--MySQL数据库初识
    python之路--线程的其他方法
    python之路--关于线程的一些方法
    python之路--管道, 事件, 信号量, 进程池
    python之路--进程内容补充
    python之路--操作系统介绍,进程的创建
  • 原文地址:https://www.cnblogs.com/yjh1995/p/11557463.html
Copyright © 2011-2022 走看看