20175214 《Java程序设计》第9周学习总结
20175214 《Java程序设计》第9周学习总结
本周学习任务总结
1、根据《java2实用教程》和蓝墨云学习视频学习第十一章;
2、尝试将课本重点内容用自己的话复述手打;
3、输入课本代码并上传码云;
4、使用IDEA调试代码;
5、学习使用MySQL。
教材学习重点内容总结
11.1 MySQL数据库管理系统
百度MySQL,进入官网,选择社区版并下载,具体选项如图;


解压过程略
11.2 启动MySQL数据库服务器
- 具体过程略,激活命令如下:
- 命令:
mysqld --initialize-insecure- 作用:初始化data目录;
- 命令:
mysqladmin -u root -p password- 作用:修改root密码。

- 作用:修改root密码。
- 命令:
- 具体过程略,激活命令如下:
11.3 MySQL客户端管理工具
- 百度Navicat,进入官网选择适合的下载即可,我下载的是Navicat Premiun
- 具体连接过程如图,若出现连接失败请参考navicat连接mysql报错1251解决方案


- 建表如图:

11.4 JDBC
- 程序经常使用JDBC进行如下的操作 :
- (1)与一个数据库建立连接。
- (2)向数据库发送SQL语句。
- (3)处理数据库返回的结果。
- 程序经常使用JDBC进行如下的操作 :
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语句对象,代码如下:
- 1.向数据库发送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 条件与排序查询
- `where`子语句
一般格式:
select 字段 from 表名 where 条件
- (1)字段值和固定值比较,例如:
select name,height from mess where name='李四'
- (2)字段值在某个区间范围,例如:
select * from mess where height>1.60 and height<=1.8
- 排序,用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");
---
## 教材学习中的问题和解决过程
- **问题1**:数据库连接失败
- **问题1解决方案**:查阅资料[navicat连接mysql报错1251解决方案](https://blog.csdn.net/qq_35654080/article/details/82588188);
---
## [代码托管](https://gitee.com/fzlzc/java2019)
20175214 《Java程序设计》第9周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 前后端分离与 restful api
为什么要前后端分离(优点): PC,APP,PAD 多端适应 单页面应用(Single Page Application)SPA开发模式开始流行 前后端开发职责不清 开发效率问题,前后端互相等待 前端 ...
- [转帖]御界预警:3700余台SQL服务器被入侵挖矿 或导致严重信息泄露事件
御界预警:3700余台SQL服务器被入侵挖矿 或导致严重信息泄露事件 https://zhuanlan.kanxue.com/article-8292.htm sqlserver的弱密码破解和提权攻击 ...
- CMDB(Configuration Management Database)资产管理系统和 运维自动化
一.传统运维方式和自动化运维的区别 二.CMDB的介绍 三.CMDB的四种方式 四.项目的目录架构介绍以及配置文件的升级编写 五.比较low的项目架构书写 六.可插拔式收集资产 七.对收集的服务器信息 ...
- 洛谷 P1962 斐波那契数列
题目链接:https://www.luogu.org/problemnew/show/P1962 题目大意: 略 分析: 由于数据规模很大,需要用矩阵快速幂来解. 代码如下: #pragma GCC ...
- spring事物与传播行为
一.事物的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 作用:事物就是保证数据的一致性 事物的特性:事务必须服从ISO/IEC所制定的ACID原则.ACID是原 ...
- RedisCache 缓存
/// <summary> /// 这是包装过公用的,用于本站而已. /// </summary> /// <author>rixiao</author> ...
- Python——pyqt5——智能提示(lineEdit/conmbobox)
一.文本框智能补全 completer = QtWidgets.QCompleter(data) completer.setCompletionMode(QtWidgets.QCompleter.Po ...
- LODOP中tfoot和tbody中间线连不起来
这种情况发生在使用ADD_PRINT_TABLE时,ADD_PRINT_TABLE是Lodop中专门用来输出table表格的语句,它有很多特点,比如该语句不切行(详细可参考查看本博客相关博文:LODO ...
- java回调函数,看完就懂
java回调函数在网上了看了些例子,比较绕,不够清晰,自己写的一个例子比较通俗,java回调其实很简单. 举个例子我是类B,我有个方法叫b(),现在我要调用类A中的方法a(),写个代码就是: publ ...
- codeforces960G. Bandit Blues
题目链接:codeforces960G 来看看三倍经验:hdu4372 luogu4609 某蒟蒻的关于第一类斯特林数的一点理解QAQ:https://www.cnblogs.com/zhou2003 ...
