美文网首页
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