数据库编程基本步骤
1.创建数据库连接对象,与物理数据库关联
Class.forName(“……”);
connect= DriverManager.getConnection(”……”)2.创建 Statement对象(数据操作的基础对象)
statement=connect.createStatement();3.数据库操作
(1) 数据查询,返回一个结果集对象(按行访问的二维表格)
resultSet =statement.executeQuery(String sql);(2)添加纪录、删除记录、更新数据(返回受影响的行数)
int rows=excuteUpdate(String sql)4.对象关闭resultSet.close(); statement.close(); connect.close();
一,数据库基本概念
1.Date:数据是存储在某一媒体上能够识别的物理符号。
2.Datebase:数据库(DB)就是按一定组织形式把相关的数据组织在一起(数据集合)
3.数据库组成:数据库由若干个数据表构成,保存在磁盘中。数据表逻辑结构是一张二维表,它由行和列组成。
二,Access数据库
Microsoft Access是Microsoft的数据库管理系统(DBMS),是一种关系型数据库。
使用Access数据库的步骤:
1)创建数据库
2)创建数据表
3)设计表结构
4)录入数据
三,SQL语言
1.SQL语言功能:
主要功能是完成数据的增加、删除、更改、查询以及相关数据管理等操作
标准SQL语言包括数据定义、数据查询、数据操纵和数据控制等方面的功能。(不区分大小写)
2.数据查询:
- select * from 表名;
- select 列名1,列名2,…… from 表名 [where 条件] [order by 列名[ASC|DESC]];
- select 列名1,count(*) [as 别名] from 表名 [where 条件] [group by 列名1 ];
- select 统计函数[as 别名] from 表名 [where 条件] ;
(统计数据:count(*)数目,sum(列名),max(列名))
3.插入记录:
1. insert into 表名 (列名表) values (值表);
注意:值表中的值与列名表中的列名顺序一一对应
2.insert into 表名 values (值表);
默认插入全部列
4.更新数据:
1.update 表名 set 列名1=表达式1 [,列名2=表达式2, …] [where 条件 ]
5.删除数据:
1. delete from 表名 [WHERE 条件
四,JDBC
1.JDBC基本概念:
JDBC是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口
2.连接数据库操作步骤:
(1)准备工作:
(2)连接数据库:
3.JDBC数据库编程基本步骤:
(1).创建数据库连接对象,与物理数据库关联
Class.forName(“ ……”) //加载驱动
Connection connect= DriverManager.getConnection(“ ……”)
(2).创建 Statement对象(数据操作的基础对象)
Statement statement=connect.createStatement();
(3).数据操作
a.数据查询,返回一个结果集对象(按行访问的二维表格)
String sql=“select ……”
ResultSet resultSet = statement.executeQuery(sql);
b.数据更新,返回受影响的行数r,若r>0则更新成功
String sql=“update ……”
//String sql=“insert into ……”
//String sql=“ delete from ……”
int r=statement.executeUpdate(sql);
(4).对象关闭(调用方法executeUpdate(sql),方法返回值是一个整数(数据表中实际删除的记录数目)
statement.close();
resultSet.close();
connect.close();
4.Statement对象:
(1)建立对象:
(2)Statement对象的4个方法:
- ResultSet executeQuery(String sql):
用于向数据库发送查询语句,并返回代表查询结果的ResultSet对象;
- int excuteUpdate(String sql):
可向数据库发送增删改的sql语句, 将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化);
- boolean execute (String sql)
- ResultSet getResultSet()
(3)excite方法的比较:
- execute 与 executeUpdate 都可以执行增加,删除,修改的操作,executeQuery只执行查询操作;
- execute可以执行查询语句,然后通过 getResultSet,把结果集取出来,executeUpdate不能执行查询语句 ;
- execute 返回boolean类型,true 表示执行的是查询语句,false表示执行的是insert,delete,update等等
- executeUpdate返回的是int类型,表示有多少条数据受到了影响(受影响的行数)。
5.PreparedStatement对象:
(1).PreparedStatement对象常用方法:
- 设置通配符:
void setFloat (int index, float f)
void setString(int index,String s)
setDouble、setInt…….
2. 执行数据表操作:
ResultSet executeQuery() boolean execute()
int executeUpdate()
(2).对数据表进行增删改查的两种实现办法:
1)使用PreparedStatement对象,sql字符串采用先用占位符?,然后给每个占位符设置相应的值,最后调用无参数的方法executeUpdate()。
2)使用Statement对象, sql字符串需要拼接,然后调用有参数的方法executeUpdate(sql)
(3)PreparedStatement与Statement对象的比较:
- PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高 ,特别是如果带有不同参数的同一SQL语句被多次执行的时候,并增加代码的可读性
- 使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
- Statement每次执行sql语句,相关数据库都要执行sql语句的编译,PreparedStatement预编译, 支持批处理
- PreparedStatement 可以规避 Statement弊端:①拼串 ②sql注入攻击问题
- PreparedStatement 可以实现操作Blob类型、Clob类型的数据
6.ResultSet对象常用方法:
- boolean next():
指向结果集的下一行,如果有下一行返回true,否则返回false
- String getString(int columnIndex) 与 int getInt(int columnIndex)
//按列号访问,从1开始计数
获得当前行第columnIndex列数据,并转换成相应类型;
- String getString(String columnLabel) 与 int getInt(String columnLabel)
//按字段名访问
获得当前行字段名为columnLabel的列数据;
五.事务:
事务:包含多个操作,由一组SQL语句组成;
事务处理:指应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。
JDBC事务处理步骤:
1)用setAutoCommit(booean b)方法关闭自动提交模式:connection.setAutoCommit(false);
stat=connection.createStatment();2)提交SQL语句
3)用commit()方法处理事务
4)用rollback()方法处理事务失败