1、数据库管理系统
数据库是提供数据的基地,它能保存数据并能使用户方便的访问数据。
DBMS是(Data Base Management System)的缩写,是管理数据库软件的集合。
DBMS包含面向用户接口功能和面向系统维护功能。
面向用户接口功能是提供用户访问数据库的一些必要手段。
面向系统维护功能是为数据库管理者提供数据库的维护工具。
目前常见的数据库管理系统有:
Oracle
Sybase
Informix
Microsoft SQL Server
MySQL
2、数据库操作
2.1 查询
1.结果集与查询
让连接对象con调用方法createStatement()创建执行SQL语句的Statement对象:
Statement sql=con.createStatement();
sql对象就可以调用相应的方法,实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中:
ResultSet rs=sql.executeQuery("SELECT * FROM product");
//product为表名
2.结果集的列名与列的数目
程序查询的时候,希望知道数据库表的字段(列)的名字以及表的字段的个数,那么一个办法是使用返回到程序中的结果集来获取相关的信息。
(1) 得到元数据对象metaData
ResultSetMetaData metaData = rs.getMetaData();
(2)得到结果集的列的个数,即共有几列
int columnCount = metaData.getColumnCount();
(3)结果集rs中的第i列的名字:
String columnName = metaData.getColumnName(i);
2.2 随机查询
使用Result的next()方法顺序地查询数据,为了得到一个可滚动的结果集,必须使用下述方法先获得一个Statement对象:
Statement stmt=con.createStatement(int type ,int concurrency);
然后,根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集:
ResultSet re=stmt.executeQuery(SQL语句);
type的取值决定滚动方式,取值可以是:
ResultSet.TYPE_FORWORD_ONLY :结果集的游标只能向下滚动。
ResultSet.TYPE_SCROLL_INSENSITIVE :结果集的游标可以上下移动,当数据库变化时,当前结果集不变。
ResultSet.TYPE_SCROLL_SENSITIVE :返回可滚动的结果集,当数据库变化时,当前结果集同步改变。
concurrency取值决定是否可以用结果集更新数据库
ResultSet.CONCUR_READ_ONLY:不能用结果集更新数据库中的表。
ResultSet.CONCUR_UPDATETABLE:能用结果集更新数据库中的表。
2.3 条件查询
select… from 表 where 字段 满足的条件
select * from product where price > 2000 and price<5000
select * from product where name = 'java'
模糊查询,使用“%”表示零个或多个字符,用“_”表示任意一个字符:
select * from product where name like '李%'
2.4 排序查询
可以在SQL语句中使用ORDER BY子语句,对记录排序。
例如,按总成绩排序查询的SQL语句:SELECT * FROM student ORDER BY 总分
2.4.1 更新、添加、删除记录
Statement对象调用方法:
public int executeUpdate(String sqlStatement);
实现对数据库表中记录的字段值的更新、添加和删除记录。
//更新
executeUpdate("UPDATE product SET price = 6866 WHERE name='海尔电视机'");
//添加
executeUpdate("INSERT INTO students VALUES ('012','神通手机’,'2015-2-26',2687)");
//删除
executeUpdate("DELETE FROM product WHERE number = '888' ");
2.5 用结果集操作数据库中的表
使用结果集更新数据库表中第n行记录中某列的值的步骤是:
1.结果集rs的游标移动到第n行
rs.absolute(n);
2.结果集将第n行的某列的列值更新
例如 更新列名是columnName的日期值是x指定的值:
updateDate(String columnName, Date x);
3.更新数据库中的表
最后,结果集调用updateRow()方法用结果集中的第n行更新数据库表中的第n行记录。
以下代码片段更新product表中的第3行记录的name列(字段)的值。
rs.absolute(3);
rs.updateString("name", "IBM PC");
rs.updateRow();
使用结果集向数据库表中插入(添加)一行记录步骤是:
1.结果集rs的游标移动到插入行(用于构建要插入的行的暂存区域)
rs.moveToInsertRow();
2.更新插入行的列值
例如:
rs.updateString(1, “c002”);
rs.updateString(2, “IBM iPad”);
rs.updateDate(3,Date());
rs.updateDouble(4, 5356);
3.插入记录
最后,结果集调用insertRow()方法用结果集中的插入行向数据库表中插入一行新记录。
2.6 预处理语句
对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么 con就可以调用
prepareStatement(String sql)
那么pre 对象可以随时调用下列方法都可以使得该底层内部命令被数据库执行,提高了数据库的访问速度:
boolean execute()
int executeUpdate()
ResultSet executeQuery()
在对SQL进行预处理时可以使用通配符“?”来代替字段的值
prepareStatement pre=
con.prepareStatement("SELECT * FROM product WHERE price < ? ");
调用相应的方法设置通配符“?”,代表具体的值
pre.setDouble(1,6565);
指定上述预处理语句pre中第1个通配符“?”代表的值是 6565
预处理语句设置通配符“?”的值的常用方法有:
void setDate(int parameterIndex,Date x)
void setDouble(int parameterIndex,double x)
void setFloat(int parameterIndex,float x)
2.7 事务
事务是保证数据库中数据完整性与一致性的重要机制。事务处理步骤如下:
1.连接对象使用setAutoCommit(boolean autoCommit)方法,
将参数autoCommit取值为false来关闭自动提交模式:
con.setAutoCommit(false);
2.commit()方法
con调用commit()方法就是让事务中的SQL语句全部生效。
3.rollback()方法
只要事务中任何一个SQL语句没有生效,就抛出SQLException异常。在处
理SQLException异常时,必须让con调用rollback()方法。