zoukankan      html  css  js  c++  java
  • JDBC02----JDBC执行CURD操作

    一.SQL语言的分类

    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。

    1. 数据查询语言DQL(Data QueryLanguage)
    数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
    子句组成的查询块:
    SELECT <字段名表>
    FROM <表或视图名>
    WHERE <查询条件>

    2 .数据操纵语言DML(Data Manipulation Language)
    数据操纵语言DML主要有三种形式:
    1) 插入:INSERT
    2) 更新:UPDATE
    3) 删除:DELETE

    3. 数据定义语言DDL(DataDefinition Language)
    数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
    索引、同义词、聚簇等如:
    CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
    | | | | |
    表 视图 索引 同义词 簇

    DDL操作是隐性提交的!不能rollback 

    4. 数据控制语言DCL(DataControl Language)
    数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
    数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
    1) GRANT:授权。


    2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
    回滚---ROLLBACK
    回滚命令使数据库状态回到上次最后提交的状态。其格式为:
    SQL>ROLLBACK;


    3) COMMIT [WORK]:提交。


        在数据库的插入、删除和修改操作时,只有当事务在提交到数据
    库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
    到所做的事情,别人只有在最后提交完成后才可以看到。
    提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
    别说明这三种类型。


    (1) 显式提交
    用COMMIT命令直接完成的提交为显式提交。其格式为:
    SQL>COMMIT;


    (2) 隐式提交
    用SQL命令间接完成的提交为隐式提交。这些命令是:
    ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
    EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。


    (3) 自动提交
    若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
    系统将自动进行提交,这就是自动提交。其格式为:
    SQL>SET AUTOCOMMIT ON;

    二. JDBC创建MySql表

    1. navicat中新建一个数据库test

    2. 在test中新建立一个表

    3. 操作Mysql创建表主要会经过以下步骤:

     

     4. 举例

    (1)新建一个类createTable

    package com.test.jdbctest;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class CreateTable {
        public static void main(String args[]) throws ClassNotFoundException, SQLException {
            //1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/test";
            String user="Hermioner";
            String password="1234";
            //2.获取连接对象
            Connection connection=DriverManager.getConnection(url, user, password);
            //3.编写sql语句
            String sql="create table stu(id int,name varchar(50),age int)";
            Statement statement=connection.createStatement();
            //4.执行sql
            int row=statement.executeUpdate(sql);
            //5.释放资源
            statement.close();
            connection.close();
        }
    
    }

     运行以后,在数据库中就会多一个表stu

    5. 为什么要释放资源

    Connection连接就相当于Java到Mysql之间建立的管道,连接只连接到数据。Statement就相当于从数据库中又接了一个普通连接Mysql的执行程序。

    如果不释放资源的话会占用系统资源,造成系统崩溃。后面会降到连接池的概念,再来深入理解。

    三. JDBC执行DMI操作

    新建一个类InsertClass,发现异常尽量自己处理。

    package com.test.jdbctest;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class InsertClass {
        public static void main(String args[]) {
            String url="jdbc:mysql://localhost:3306/test";
            String user="Hermioner";
            String password="1234";
            Connection connection=null;
            Statement statement=null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                connection=DriverManager.getConnection(url, user, password);
                String sql="insert into stu values(1,'zhangsan',20)";
                statement=connection.createStatement();
                int row=statement.executeUpdate(sql);
                System.out.println(row);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if(statement!=null) {
                    try {
                        statement.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(connection!=null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    
    }

    这样运行以后,表stu中就会多一条数据:

    四. 查询结果集ResultSet介绍

    1.概念

    ResultSet:表示数据库查询的结果的集合,在执行查询语句时就会得到一个这样的结果。

    2.常用方法:

    • getXxx(int columnIndex):获取当前行中,第几列(从1开始):不推荐;
    • getXxx(String columnName):获取当前行中的,指定列名的列的值,columnName是列名/列的别名
    • 若列的类型是VARCHAR/CHAR/TEXT,都是用getString来获取列的值
    • 若类的类型是int/integer,则用getInt来获取列的值

    五. 执行DQL操作

    前提:假设数据库中的表格有3条数据:

    1. 查询一条记录

    package com.test.jdbctest;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class QueryClass {
        public static void main(String args[]) {
            String url="jdbc:mysql://localhost:3306/test";
            String user="Hermioner";
            String password="1234";
            Connection connection=null;
            Statement statement=null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                connection=DriverManager.getConnection(url, user, password);
                String sql="select *from stu where id=1";
                statement=connection.createStatement();
                ResultSet resultSet=statement.executeQuery(sql);
                if(resultSet.next()) {
                    String name=resultSet.getString("name");
                    System.out.println(name);
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                try {
                    if(statement!=null) {
                        statement.close();
                    }            
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    if(connection!=null) {
                        connection.close();
                    }    
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
    
    }

    zhangsan

     2. 查询所有记录

    package com.test.jdbctest;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class QueryClass {
        public static void main(String args[]) {
            String url="jdbc:mysql://localhost:3306/test";
            String user="Hermioner";
            String password="1234";
            Connection connection=null;
            Statement statement=null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                connection=DriverManager.getConnection(url, user, password);
                String sql="select *from stu";
                statement=connection.createStatement();
                ResultSet resultSet=statement.executeQuery(sql);
                while(resultSet.next()) {
                    String name=resultSet.getString("name");
                    System.out.println(name);
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                try {
                    if(statement!=null) {
                        statement.close();
                    }            
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    if(connection!=null) {
                        connection.close();
                    }    
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
    
    }
    zhangsan
    lisi
    wangwu

    参考文献:

    https://www.cnblogs.com/fan-yuan/p/7879353.html

     https://ke.qq.com/course/339214

  • 相关阅读:
    我从Linux走来,选择了Windows
    静态路由(三路由)
    设置跨交换机VLAN
    服务器只能被动接受
    理解 atime,ctime,mtime (下)
    理解 atime,ctime,mtime (上)
    visualvm连接服务器jvm进行监控
    mysql 日期函数格式
    关于springmvc跨域
    Javassist初体验
  • 原文地址:https://www.cnblogs.com/Hermioner/p/10232050.html
Copyright © 2011-2022 走看看