20175215 2018-2019-2 第九周java课程学习总结
第十一章 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)
方法返回字段值的串表示
- 有了SQL语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中。也就是说SQL查询语句对数据库的查询操作将返回一个ResultSet对象,ResultSet对象是按“列”(字段)组织的数据行构成。
- 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 条件与排序查询
- where子语句
一般格式:
select 字段 from 表名 where 条件
- (1)字段值和固定值比较,例如:
select name,height from mess where name='李四'
-(2)字段值在某个区间范围,例如:
select * from mess where height>1.60 and height<=1.8
- where子语句
- 排序
用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课程学习总结的更多相关文章
- 20175215 2018-2019-2 第六周java课程学习总结
第七章 内部类与异常类 1.内部类 Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类 内部类和外嵌类之间重要关系如下 内部类的外嵌类的成员变量在内部类中仍然有 ...
- 20175215 2018-2019-2 第十一周java课程学习总结
第13章 Java网络编程 13.1 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对 ...
- 20175215 2018-2019-2 第十周java课程学习总结
第十二章 Java多线程机制 12.1 进程与线程 12.1.1 操作系统与进程 程序是一段静态的代码,它是应用软件执行的蓝本. 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个 ...
- 20175215 2018-2019-2 第三周java课程学习总结
第三周 一.使用JDB调试java代码(主要内容为断点) 以下文字内容转自使用JDB调试java程序,图片则为自己的截图 我们提倡在Linux命令行下学习Java编程.学习时在Ubuntu Bash中 ...
- 20175215 2018-2019-2 第八周java课程学习总结
第十五章 泛型与几何框架 15.1 泛型 泛型(Generics)是在JDK1.5中推出的,其主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 15.1.1 泛型类声明 可以使用 ...
- 20175215 2018-2019-2 第七周java课程学习总结
第八章 常用实用类 8.1 String类 Java专门提供了用来处理字符序列的String类.String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用S ...
- 20175215 2018-2019-2 第五周java课程学习总结
第六章学习内容 1.接口 使用interface来定义一个接口. 接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是pu ...
- 20175215 2018-2019-2 第二周java课程学习总结
一.学生免费申请使用IDEA 下载好IDEA后,设置到最后有一个界面, 我们需要到IDEA官网进行IDEA免费试用权的申请,如果有学校的邮箱,使用学校的邮箱注册并证明是自己的就可以直接通过申请.如下图 ...
- 第十三周Java课程学习总结
学习总结: 记事本界面: 监听适配器. 可以通过Window Adapter来实现监听. void windowActivated(WindowEvent e) 激活窗口时调用. void windo ...
随机推荐
- 在vue-cli项目中使用bootstrap
1.安装插件 npm install jquery --save npm install bootstrap --save npm install popper.js --save 2.配置webpa ...
- 【Swift后台】目录
背景介绍 环境安装
- ubuntu 共享WIFI并分享主机的代理服务
背景是这样的: 公司内的主机访问外网需要通过一个HTTP代理服务器,主机ubuntu共享wifi给手机使用的时候需要在手机上配置一个代理才能访问互联网. 我觉得这样比较麻烦,所以想在主机上直接把共享w ...
- Android Jetpack之WorkManager: 观察结果
在使用WorkManager的时候,有时候需要关注任务执行的结果和状态,可以使用 LiveData<WorkInfo> liveOpStatus = WorkManager.getInst ...
- phpStorm中使用xdebug工具调试docker容器中的程序
前提准备 phpstorm开发软件 + dnmp(docker + nginx + mysql +php) 配置好hosts 映射比如 /etc/hosts 127.0.0.1 tp5.de ...
- 数据库——Oracle(6)
1 默认值约束(默认值):对表中的某个列提前设置好默认值,当执行插入操作的时候,如果该列没有插入列值,则系统会自动的插入之前设置的默认值. 1)每个列只能插入一个默认值. 2)创建表的时候设置默认值. ...
- centos 6.5 解压 zip
只查看 zip 文件内容而不解压 unzip -l filename.zip 解压到指定目录(不指定则为当前目录) unzip filename.zip -d /usr/file 压缩文件或目录为 z ...
- 题解 【POJ1934】 Trip
题目意思: 有两个字符串(长度\(<=80\)),按字典序输出它们的最长公共子串的所有情况. 解析 最长公共子序列的长度应该都没问题了吧...有问题请自行百度 但关键是要求出每种情况,还要按字典 ...
- java——通过GenericObjectPool获取到的资源,调用close()方法会close还是returnObject?
一种优雅的关闭资源的方式是使用try(){}cache(){} 就像这样: 这时候,try()里面的资源会在return语句执行结束之后自动调用close()方法,那么问题来了,当我们使用连接池的时候 ...
- MongoDB——morphia
禁止保存className:@Entity(noClassnameStored = true) https://stackoverflow.com/questions/17719018/a-field ...