美文网首页
Java学习-Day08-MySQL与JDBC编程(2)

Java学习-Day08-MySQL与JDBC编程(2)

作者: Indomi | 来源:发表于2018-03-31 15:44 被阅读0次

    1.SQL语句

    1.1 索引

    索引是存放在模式中的一个数据库对象,虽然索引总是从属于数据表,但它也和数据表一样属于数据库对象.创建索引的唯一作用就是加速对表的查询,索引通过使用快速路径访问方法来快速定位数据,从而减少了磁盘的I/O

    • 创建索引:
    create index index_name
    on table_name (column[, column]...);
    #对多列建立索引
    create index emp_last_name_idx2
    on employees(first_name, last_name);
    
    • 删除索引
    drop index 索引名 on 表名
    
    1.2 视图

    视图看上去像数据表,但是它并不能存储数据,视图只是一个或多个数据表中数据的逻辑显示

    • 创建视图
    create or replace view 视图名
    as subquery;
    
    • 删除视图
    drop view 视图名;
    
    1.3 DML语句

    DML主要完成增删改的功能,由insert into,update,delete from三个命令组成

    1.3.1 insert into
    • 对于标准的SQL语句而言,每次只能插入一条记录,语法格式如下
    insert into table_name [(column [, column...])]
    values(value [, value...]);
    
    1.3.2 update语句
    • 每次可以修改多条记录,通过where子句限定修改那些记录
    update table_name
    set column1 = value[, column2 = value2]...
    [WHERE condition];
    
    1.3.3 delete from语句
    • 用于删除指定数据表的记录,可以一次删除多行
    delete from table_name
    [WHERE condition];
    
    1.4 单表查询
    • select语句功能就是查询数据,select语句可以执行单表查询,而且可以指定多表连接查询,还可以进行子查询
    • 单表查询格式如下
    select column1, column2 ... 
    from 数据源
    [where condition];
    
    • select后加distinct可以去除后面字段组合的重复值
    • 执行查询后的查询结果默认按插入顺序排列,如果需要查询结果按某列值的大小进行排序,则可以使用order by 子句,语句格式如下
    order by column_name1 [desc],column_name2...
    
    • 进行排序时默认按升序排列,如果强制按降序排列,需要在列后使用desc关键字
    1.5 数据库函数

    每个数据库都会在标准的SQL基础上扩展一些函数,这些函数用于进行数据处理或复杂运算,它们通过对一组数据进行计算,得到最终需要的输出结果

    • 根据函数对多行数据的处理方式,函数被分为单行函数和多行函数,单行函数对每行输入值单独计算,每行得到一个计算结果后返回给用户,多行函数对多行输入值整体计算,最后只会得到一个结果

    (暂时不研究,需要时回来补充)

    1.6 分组和组函数
    • 组函数也就是多行函数,将一组记录作为整体运算,每组记录返回一个结果
    1.7 集合运算
    • select语句查询的结果是一个包含多条数据的结果集,类似于数学里的集合,可以进行交并差运算
    • 进行集合运算必须满足如下条件
      • 两个结果所包含的数据列数量必须相等
      • 两个结果所包含的数据列的数据类型必须一一对应
    1.7.1 union运算(并集)
    • 格式:select 语句 union select 语句
    1.7.2 minus运算(差集)
    • 格式同上
    1.7.3 interesect运算(交集)
    • 格式同上

    2.JDBC的典型用法

    2.1 JDBC4.2常用接口和类简介

    Java 8支持JDBC4.2标准

    • DriverManager:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取对象,该类包含如下方法
      • public static synchronized Connection getConnection(String url,String user,String pass)throws SQLException:该方法获得url对应数据库的链接
    2.2 JDBC编程步骤

    1.加载数据库驱动,通常使用Class类的forName()静态方法来加载驱动

    //加载驱动
    Class.forName(driverClass)
    

    上面代码中的driverClass就是数据库驱动类所对应的字符串

    //例如,加载MySQL的驱动采用如下代码:
    Class.forName("com.mysql.jdbc.Driver")
    

    2.通过DriverManager获取数据库连接,DriverManager提供了如下方法

    //获取数据库连接
    DriverManager.gerConnection(String url,String user,String pass);
    

    当使用DriverManager获取数据库连接时,通常需要传入三个参数:数据库URL,登录数据库用户名和密码
    数据库URL通常遵循:jdbc:subprotocol:other stuff
    例子:jdbc:mysql://hostname:port/databasename
    3.通过Connection对象创建Statement对象,创建Statement对象的方法有三个

    • createStatement():创建基本的Statement对象
    • prepareStatement(String sql):根据传入的SQL语句创建预编译的Statement对象
    • prepareCall(String sql):根据传入的SQL语句创建CallableStatement对象

    4.使用Statement执行SQL语句,所有Statement都有如下三个方法来执行SQL语句

    • execute():可以执行任何SQL语句,但比较麻烦
    • executeUpdate():主要用于执行DML和DDL语句.指定DML语句返回受SQL语句影响的行数,执行DDL语句返回0
    • executeQuery():只能执行查询语句,执行后返回代表查询结果的ResultSet对象

    5.操作结果集,如果执行的SQL语句是查询语句,则执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果,程序可以通过操作该ResultSet对象来取出查询结果,ResultSet对象主要提供了吐下两类方法

    • next(),previous(),first(),last(),beforeFirst(),afterLast(),absolute()等移动记录指针的方法
    • getXxx()方法获取记录指针指向行,特定列的值,该方法既可以使用列索引作为参数,也可使用列名作为参数.使用列索引作为参数性能更好,使用列名作为参数可读性更好

    6.回收数据库资源,包括关闭ResultSet,Statement和Connection等资源
    下面程序简单示范JDBC编程:

    import java.sql.*;
    
    public class ConnMySql {
        public static void main(String[] args)throws Exception{
            //1.加载驱动,使用反射知识
            Class.forName("com.mysql.jdbc.Driver");
            try {
                //2.使用DriverManager获取数据库连接
                //其中返回的Connection就代表了Java程序和数据库的连接
                //不同数据库的URL写法需要查驱动文档,用户名,密码由DBA分配
                Connection conn = DriverManager.getConnection(
                        "jdbc:mysql://127.0.0.1:3306/demo1",
                        "root",".aA123456"
                );
                //3.使用Connection来创建一个Statement对象
                Statement stmt = conn.createStatement();
                //4.执行SQL语句
                /*
                Statement有三种执行SQL语句的方法
                1.execute()可执行任何SQL语句,返回一个Boolean值
                    如果执行后第一个结果是ResultSet,则返回true,否则返回false
                2.executeQuery()执行select语句 返回查询到的结果集
                3.executeUpdate()用于执行DML语句 返回一个整数
                    代表被SQL语句影响的记录条数
                 */
                ResultSet rs = stmt.executeQuery("select s.*, teacher_name" + "from student_table s, teacher_table t" + "where t.teacher_id = s.java_teacher");{
                    //ResultSet有一系列的getXxx(列索引 | 列名)方法,用于获取记录指针
                    //指向行,特定列的值,不断地只用next()将记录指针下一行
                    //如果移动之后记录指针依然指向有效行,则next()方法返回true
                    while (rs.next()){
                        System.out.println(rs.getInt(1) + "\t"
                            + rs.getString(2) + "\t"
                            + rs.getString(3) + "\t"
                            + rs.getString(4)
                        );
                    }
                }
            }catch (Exception e){
                System.out.println(e);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Java学习-Day08-MySQL与JDBC编程(2)

          本文链接:https://www.haomeiwen.com/subject/slpgcftx.html