教材学习内容总结
1.JDBC
保证java编写的程序的独立性:java提供专门用于操作数据库的API,即JDBC
JDBC操作不同的数据库原因->连接方式不同
使用JDBC进行的操作 | |
与一个数据库建立连接 | |
向已连接的数据库发送SQL语句 | |
处理SQL语句返回的结果 |
2.连接数据库
程序和数据库交互信息
A.与数据库建立连接
a.加载JDBC-数据库驱动
b.和指定的数据库建立连接
(a)下载数据库驱动
(b)加载数据量驱动
try{Class.forName(“com.mysql.jdbc.Driver”);}catch(Exception e){} 其中jdbc.Driver是驱动程序名
(c)连接数据库
DriverManager类中有两个建立连接的类方法
Connection getConnection(java.lang.String,java.lang.String,java.lang.String) | Connection getConnection(java.lang.String) |
Connection con; String uri=“jdbc:mysql://IP地址:端口/数据库名?useSSL=ture” |
Connection con; String uri=“jdbc:mysql://IP地址:端口/数据库名?user=用户名&password=密码&useSSL=ture” |
user=“用户名” password=“密码” |
|
try{con=DriverManager.getConnection(uri,user,password);} catch(SQLException e){System.out.println(e)} |
try{con=DriverManager.getConnection(uri)} catch(SQLException e){System.out.println(e)} |
DriverManager. getConnection(java.lang.String)返回一个Connection对象
(d)主注意汉字问题
String uri=“jdbc:mysql://IP地址:端口/数据库名?useSSL=ture&characterEncoding=utf-8”
3.查询操作
3.1向数据库发送SQL查询语句
sql为SQL语句对象 | try{Statement sql=con.createStatement();}catch(SQLException e){} |
3.2处理查询结果
rs存放查询结果(rs由按“列”(字段)组织的数据行构成) | ResultSet rs=sql.executeQuery(“Select语句”) |
Result对象一次只能看到一个数据行,使用next()方法移到下一个数据行
rs.getXxx(int columnIndex(位置索引))// rs.getXxx(int columnName(列名))《=》获得字段值(列值)
3.3关闭连接
应用程序在使用ResultSet对象中的数据时,就必须保持和数据库的连接
con.close()
4.1顺序查找
Result对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置为游标位置,位于第一行的前面
4.2控制游标
结果集的游标的初始位置在结果集第一行的前面,使用next()方法向下(后)移动游标,移动成功返回true
返回一个滚动的结果集
Statement stmt=con.createStatement(int type,int concurrency)
type取值决定滚动方式
ResultSet.TYPE_FORWORD_ONLY | 只能向下移动 |
ResultSet.TYPE__SCROLL_INSENSITIVE |
可以上下移动,当数据库变化时,结果集不变 |
ResultSet.TYPE__SCROLL_SENSITIVE | 返回可滚动结果集,当数据库变化时,当前结果集同步变化 |
concurrency取值决定是否可以用结果集更新数据库
ResultSet.CONCUR_READ_ONLY | 不能用结果集更新数据库的表 |
ResultSet.CONCUR_UPDATABLE | 能用结果集更新数据库的表 |
ResultSet re=stmt.executeQuery(SQL语句);
public boolean previous() | 将游标上下移动,返回boolean型数据,当移到结果集的第一行之前时返回false |
public void beforeFirst()/afterLast() | 将游标移到结果集的初始位置,即第一行之前 /将游标移到结果集最后一行之后 |
public void first()/last() |
将游标移到结果集第一行/最后一行 |
public boolean isAfterLast()/isBeforeFirst() | 判断游标是否在最后一行之后/第一行之前 |
public boolean isLast()/isFirst() | 判断游标是否在最后一行/第一行 |
public int getRow() | 得到当前游标所指向的行号,行号从1开始,如果结果没有行,返回0 |
public boolean absolute(int row) | 将游标移到参数row指定的行(row为负值时表示倒数) |
4.3条件与排序查询
where子语句 一般格式;select 字段 from 表名 where 条件
a.字段值与固定值比较:=
b.字段值在某个区间的范围:and
c.使用某些特殊的日期函数,如year、month、day
select * from mess where year(birthday)<1980 and month(birthday)<=10
d.使用某些特殊的时间函数,如hour、minute、second
select * from time_list where second(shijian)>56
e.用操作符like进行模式匹配,%:多个字符、_:一个字符
排序:order by +排列的标准
5.更新、添加与删除操作
Statement对象调用方法:public int executeUpdate(String sqlStatement);通过参数sqlStatement指定的方式实现对数据库表中的更新、添加和删除操作。
更新 | update 表 set 字段 = 新值 where <条件子句> |
添加 | insert into 表(字段列表)values(对应具体记录) |
删除 | delete from 表名 where <条件子句> |
6.1使用预处理语句
优点:减轻数据库的负担,提高访问数据库的速度
con.prepareStatement(String sql) | 对参数sql指定的SQL语句进行预编译处理 |
生成该数据库底层的内部命令,并将命令封装在PrepareStatement对象中 |
对象调用 | ResultSet executeQuery() | |
boolean execute() |
||
int executeUpdate() |
6.2使用通配符
通配符?代替字段的值,用数字1代表第一个?,2代表第二个?
预处理语句执行之前设置通配符的具体值
预处理语句设置通配符?的值的常用方法:
void setDate/setDouble/setFloat/setInt/setLong/setString(int parameterIndex,Date/double/float/int/long/String x) |
7.通用查询
ResultSetMetaData metaData=rs.getMetaData() | 得到一个对象 |
int columnCount = metaData.getColumnCount() | 列的数目 |
String columnName = metaData.getColumnName(i) | 第i列的名字 |
8.事务
保证数据库的完整性与一致性
事务处理即应用程序保证事务中的SQL语句要么全部执行,要么一个都不执行
JDBC事务处理步骤
用setAutoCommit(boolean b)关闭自动提交模式 | 关闭con这种自动提交模式 |
commit()处理事务 | 视图让事务中所有的SQL语句生效 |
rollback()处理事务失败 | 恢复到commit()方法执行之前 |
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
目标 | 5000行 | 20篇 | 400小时 | 会用java语言独立设计程序 |
第一周 | 13/13 | 1/1 | 5/5 | 学会使用jdk以及对java源程序语句的基本注意事项有所了解 |
第二周 | 140/143 | 1/2 | 10/15 | 学会java基本数据类型与数组和c语言/c++在表达和用法上的相同/不同之处 |
第三周 | 276/419 | 1/3 | 20/35 | java中运算符,表达式和语句的表现形式,类的声明,定义方法 |
第四周 | 600/1019 | 1/4 | 30/45 | 类和对象 |
第五周 | 150/1169 |
1/5 | 10/55 | 继承的作用,子类和父类的继承性,子类继承父类后方法的访问权限以及各种操作 |
第六周 | 100/1269 | 1/6 | 8/63 | 接口定义、使用方法和作用 |
第七周 | 100/1369 | 1/7 | 9/72 | 内部类(独有)包含匿名类和异常类(检测)的使用方法和作用 |
第八周 | 150/1869 | 1/8 | 10/82 | java常用实用类和方法 |
第九周 | 100/1969 | 1/9 | 20/102 | 组件、容器、窗口、(如何处理事件:事件源,监视器、接口) |
第十周 | 80/2049 | 1/10 | 10/112 | 输入输出流和各种流的作用、构造方法 |
第十一周 | 92/2141 | 1/11 | 7/119 | 连接数据库步骤、查询、更新、添加、删除语句 |
参考文献
《java2实用教程(第5版)》