第十一章 JDBC与MySQL数据库

11.1 MySQL数据库管理系统

下载安装过程略

使用的是MySQL 5.6而非5.7

11.2 启动MySQL数据库服务器

启动和root用户过程略

11.3 MySQL客户端管理工具

建立完成数据库和创建完成表的结果如图所示

11.4 JDBC

程序经常使用JDBC进行如下的操作 :

  • (1)与一个数据库建立连接。
  • (2)向数据库发送SQL语句。
  • (3)处理数据库返回的结果。

11.5 连接数据库

  • 1.下载JDBC-MySQL数据库驱动

    下载过程略
  • 2.加载JDBC-MySQL数据库驱动

    应用程序负责加载JDBC-MySQL数据库驱动的代码如下:
try{  Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
  • 3.连接数据库

    java.sql包中的DriverManager类有两个用于建立连接的类方法(static方法)

    • Connection getConnection(java.lang.String, java.lang.String, java.lang.String)

    • Connection getConnection(java.lang.String)

      这两个方法都可能抛出SQLException异常,DriverManager类调用上述方法可以和数据库建立连接,即可返回一个Connection对象。

    • 使用Connection getConnection(java.lang.String) 方法建立连接的代码如下:

Connection con;
String uri =
"jdbc:mysql://192.168.100.1:3306/students?user=root&password=&useSSL=true";
try{
con = DriverManager.getConnection(uri); //连接代码
}
catch(SQLException e){
System.out.println(e);
}

如果root用户密码是xx,将&password=更改为&password=xx即可

  • 使用Connection getConnection(java.lang.String, java.lang.String, java.lang.String)方法建立连接的代码如下:
Connection con;
String uri = "jdbc:mysql:// 192.168.100.1:3306/students? useSSL=true";
String user ="root";
String password ="";
try{
con = DriverManager.getConnection(uri,user,password); //连接代码
}
catch(SQLException e){
System.out.println(e);
}
  • 4.注意汉字问题

    需要特别注意的是,如果数据库的表中的记录有汉字,那么在建立连接时需要额外多传递一个参数characterEncoding,并取值gb2312或utf-8
String uri = "jdbc:mysql://localhost/students?useSSL=true&characterEncoding=utf-8";
con = DriverManager.getConnection(uri, "root",""); //连接代码

11.6 查询操作

  • 1.向数据库发送SQL查询语句

    首先使用Statement声明一个SQL语句对象,然后让已创建的连接对象con调用方法createStatement()创建这个SQL语句对象,代码如下:
try{Statement sql = con.createStatement();
}
catch(SQLException e){}
  • 2.处理查询结果

    • 有了SQL语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中。也就是说SQL查询语句对数据库的查询操作将返回一个ResultSet对象,ResultSet对象是按“列”(字段)组织的数据行构成。

      ResultSet rs = sql.executeQuery("SELECT * FROM students");

      结果集rs的列数是4列,刚好和students的列数相同
    • 而对于:ResultSet rs = sql.executeQuery("SELECT name,height FROM students");
    • ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,获得一行数据后,ResultSet对象可以使用getXxx方法获得字段值(列值),将位置索引(第一列使用1,第二列使用2等)或列名传递给getXxx方法的参数即可。
    • 无论字段是何种属性,总可以使用getString(int columnIndex)getString(String columnName)方法返回字段值的串表示
  • 3.关闭连接

    ResultSet对象和数据库连接对象(Connection对象)实现了紧密的绑定,一旦连接对象被关闭,ResultSet对象中的数据立刻消失。这就意味着,应用程序在使用ResultSet对象中的数据时,就必须始终保持和数据库的连接,直到应用程序将ResultSet对象中的数据查看完毕

    如果在代码

    ResultSet rs = sql.executeQuery("SELECT * FROM students");

    之后立刻关闭连接:con.close();,程序将无法获取rs中的数据。

11.6.1 顺序查询

所谓顺序查询,是指ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置,即游标位置,位于第一行的前面。next()方法向下(向后、数据行号大的方向)移动游标,移动成功返回true,否则返回false。

11.6.2 控制游标

为了得到一个可滚动的结果集,需使用下述方法获得一个Statement对象。

```Statement stmt = con.createStatement(int type ,int concurrency);``

11.6.3 条件与排序查询

    1. where子语句

      一般格式:

      select 字段 from 表名 where 条件
    • (1)字段值和固定值比较,例如:

      select name,height from mess where name='李四'

      -(2)字段值在某个区间范围,例如:

      select * from mess where height>1.60 and height<=1.8
    1. 排序

      用order by子语句对记录排序

      select * from mess where name like '%林%' order by name

11.7 更新、添加与删除操作

1.更新

update 表 set 字段 = 新值 where <条件子句>

2.添加

insert into 表(字段列表) values (对应的具体的记录)



insert into 表 values (对应的具体的记录)

3.删除

delete from 表名 where <条件子句>

11.8 使用预处理语句

11.8.1 预处理语句的优点

对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(String sql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用下列方法都可以使得该底层内部命令被数据库执行:

ResultSet executeQuery()
boolean execute()
int executeUpdate()

11.8.2 使用通配符

在对SQL进行预处理时可以使用通配符?(英文问号)来代替字段的值,只要在预处理语句执行之前再设置通配符所代表的具体值即可。例如:

String str = "select * from mess where height < ? and name= ? "
PreparedStatement sql = con.prepareStatement(str);

在sql对象执行之前,必须调用相应的方法设置通配符?代表的具体值,如:

sql.setFloat(1,1.76f);
sql.setString(2, "武泽");

预处理SQL语句sql中第1个通配符?代表的值是1.76,第2个通配符?代表的值是'武泽'。通配符按着它们在预处理SQL语句中从左到右依次出现的顺序分别被称为第1个、第2个、……、第m个通配符。

预处理语句设置通配符?的值的常用方法有:

  • void setDate(int parameterIndex, Date x)
  • void setDouble(int parameterIndex, double x)
  • void setFloat(int parameterIndex, float x)
  • void setInt(int parameterIndex, int x)
  • void setLong(int parameterIndex, long x)
  • void setString(int parameterIndex, String x)

11.9 通用查询

本节的目的是编写一个类,只要用户将数据库名、SQL语句传递给该类对象,那么该对象就用一个二维数组返回查询的记录。

程序中的结果集ResultSet对象rs调用getMetaData()方法返回一个ResultSetMetaData对象(结果集的元数据对象):

ResultSetMetaData metaData = rs.getMetaData();

metaData,调用getColumnCount()方法就可以返回结果集rs中的列的数目:

int columnCount = metaData.getColumnCount();

metaData调用getColumnName(int i)方法就可以返回结果集rs中的第i列的名字:

String columnName = metaData.getColumnName(i);

11.10 事务

11.10.1 事务及处理

事务由一组SQL语句组成,所谓事务处理是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。

11.10.2 JDBC事务处理步骤

  • 1.用setAutoCommit(boolean b)方法关闭自动提交模式
  • 2.用commit()方法处理事务
  • 3.用rollback()方法处理事务失败

11.11连接SQL Server数据库

加载SQL Server驱动程序代码如下:

try {  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){
}

连接的代码如下:

try{
String uri= "jdbc:sqlserver://192.168.100.1:1433;DatabaseName=warehouse";
String user="sa";
String password="dog123456";
con=DriverManager.getConnection(uri,user,password);
}
catch(SQLException e){
System.out.println(e);
}

11.12连接Derby数据库

加载Derby数据库驱动程序的代码是:Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

连接(create取值是true)的代码是:

Connection con =
DriverManager.getConnection("jdbc:derby:students;create=true");

SP.第九周学习中碰到的问题

1.出现NullPointerException错误

将之前安装的MySQL5.6卸载之后安装书上网盘所给的MySQL5.7后错误消失

SP2.码云链接

20175215 2018-2019-2 第九周java课程学习总结的更多相关文章

  1. 20175215 2018-2019-2 第六周java课程学习总结

    第七章 内部类与异常类 1.内部类 Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类 内部类和外嵌类之间重要关系如下 内部类的外嵌类的成员变量在内部类中仍然有 ...

  2. 20175215 2018-2019-2 第十一周java课程学习总结

    第13章 Java网络编程 13.1 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对 ...

  3. 20175215 2018-2019-2 第十周java课程学习总结

    第十二章 Java多线程机制 12.1 进程与线程 12.1.1 操作系统与进程 程序是一段静态的代码,它是应用软件执行的蓝本. 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个 ...

  4. 20175215 2018-2019-2 第三周java课程学习总结

    第三周 一.使用JDB调试java代码(主要内容为断点) 以下文字内容转自使用JDB调试java程序,图片则为自己的截图 我们提倡在Linux命令行下学习Java编程.学习时在Ubuntu Bash中 ...

  5. 20175215 2018-2019-2 第八周java课程学习总结

    第十五章 泛型与几何框架 15.1 泛型 泛型(Generics)是在JDK1.5中推出的,其主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 15.1.1 泛型类声明 可以使用 ...

  6. 20175215 2018-2019-2 第七周java课程学习总结

    第八章 常用实用类 8.1 String类 Java专门提供了用来处理字符序列的String类.String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用S ...

  7. 20175215 2018-2019-2 第五周java课程学习总结

    第六章学习内容 1.接口 使用interface来定义一个接口. 接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是pu ...

  8. 20175215 2018-2019-2 第二周java课程学习总结

    一.学生免费申请使用IDEA 下载好IDEA后,设置到最后有一个界面, 我们需要到IDEA官网进行IDEA免费试用权的申请,如果有学校的邮箱,使用学校的邮箱注册并证明是自己的就可以直接通过申请.如下图 ...

  9. 第十三周Java课程学习总结

    学习总结: 记事本界面: 监听适配器. 可以通过Window Adapter来实现监听. void windowActivated(WindowEvent e) 激活窗口时调用. void windo ...

随机推荐

  1. Win32 编程

    1.ShowWindow(SW_SHOWNORMAL)  参数 : SW_HIDE激活另外一个窗口,当前窗口就跑到那个窗口后面了SW_MAXIMIZE显示的窗口是最大化的SW_MINIMIZE显示的窗 ...

  2. tensorflow-解决3个问题

    问题一:对特征归一化 Min-Max Scaling: X′=a+(X−Xmin)(b−a)/(Xmax−Xmin) # Problem 1 - Implement Min-Max scaling f ...

  3. linux(centos7) 查看磁盘空间大小

    命令: df -hl 1 显示: 文件系统 容量 已用 可用 已用% 挂载点 Filesystem Size Used Avail Use% Mounted on /dev/hda2 45G 19G ...

  4. JavaJDBC【五、事务】

    概念: 事务(Transaction)作为单个逻辑工作单元执行的一系列操作. 这些操作都是作为一个整体一起向系统提交,要么都执行,要么都不执行. 特点: 原子性:一个完整操作. 一致性:当事务完成时, ...

  5. 第十章、numpy模块

    目录 第十章.numpy模块 一.导入方式 二.作用 三.通过函数创建numpy数组 四. numpy数组运算 五.重点 第十章.numpy模块 一.导入方式 import numpy as np#约 ...

  6. Linux(CentOS)下编译安装apache

    Centos7.6系统 已经安装lnmp一键环境 想装个apache跑php7 (php7的安装以及与apache的交互在这里: https://www.cnblogs.com/lz0925/p/11 ...

  7. 构建虚拟工控环境系列 - 罗克韦尔虚拟PLC

    一. 概述 本篇主要介绍罗克韦尔虚拟PLC的搭建,使用的操作系统为Windows7 x86 Ultimate(DEEP_GHOST_WIN7_SP1_X86_V2015_06.iso),虚拟化软件为 ...

  8. PAT Basic 1030 完美数列 (25 分)

    给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...

  9. 一键登录怎么在iOS端实现?这篇文章教会你!

    在一键登录出现之前,市场上最常见的APP 注册登录方式主要有账号密码.短信验证及第三方登录.这几种方式看似常见且便捷,实则存在许多安全隐患,用户体验也相对较差.首先,短信验证码到达率低.用户操作繁琐且 ...

  10. 远程文件传输工具sftp、scp、rsync

    一.scp 格式 scp [options] [user@]host : /sourcefile /destpathscp [options] /sourcefile [user@]host:/des ...