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语句对象,代码如下:
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对象中的数据查看完毕
- 如果在代码
之后立刻关闭连接:con.close();,程序将无法获取rs中的数据。ResultSet rs = sql.executeQuery("SELECT * FROM students");
- 1.向数据库发送SQL查询语句
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 <条件子句>
- 1.更新
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解决方案;