JDBC(Java数据库连接)
JDBC(Java数据库连接)
1. 什么是JDBC?
JDBC全称:Java Database Connectivity,简称JDBC
2. JDBC常用的开发接口(☆)
| 接口 | 描述 | 
|---|---|
| Connection | 用来与数据库建立连接 | 
| Statement | 用来发送SQL语句 | 
| ResultSet | 执行SQL语句返回的结果集 | 
| PreparedStatement | 用来发送SQL语句的,是Statement的子接口(预编译、防止SQL注入) | 
3. 创建JDBC的步骤(☆)
- 导入数据库驱动包,加载驱动
OracleDriver od = new OracleDriver();
DriverManager.registerDriver(od);
// 参数:驱动类的完整路径
Class.forName("oracle.jdbc.driver.OracleDriver");
- 建立连接
Connection conn = DriverManager.getConnection(连接URL, 用户名, 密码);
("jdbc:oracle:thin:@127.0.0.1:1521:orcl,用户名, 密码")
- 创建可执行SQL语句的statement对象,发送SQL语句
Statement sm = conn.createStatement();
PreparedStatement ps = conn.prepareStatement(sql)
- 获取结果集,遍历数据
ResultSet rs = sm.executeQuery("select * from t_depart");
// 执行的SQL语句为查询语句,返回的结果是ResultSet类型
statement.executeQuery(sql);
// 执行的SQL语句为删除、修改、添加,返回的结果是int类型,代表数据库中有多少条记录被改变
statement.executeUpdate(sql);
// 执行的SQL语句为查询、删除、修改、添加,返回的结果是boolean类型,若为true,代表执行的为查询语句,否则为其他语句
statement.execute(sql);
- 关闭,先开的后关,后开的先关
rs.close();
sm.close();
conn.close();
4. 时间处理
Java中有三个时间,java.util.Date时间基类,有三个子类:
| 时间 | 描述 | 
|---|---|
| java.sql.Date | 数据库时间,精确到年月日 | 
| java.sql.Timestamp | 数据库时间,精确到年月日时分秒 | 
| java.sql.Time | 数据库时间,精确时分秒 | 
5. JDBC编程思想(类与数据库对应关系)(☆)
- 一个类对应一张表
- 一个属性对应一个字段
- 一个对象对应一条记录
6. Statement与PreparedStatement区别(☆)
PrepareStatement是Statement的子接口
- 
PerparedStatement自带预编译功能,相同的SQL语句只会编译一次,提高执行效率 
 Statement每次执行SQL语句都会重新编译,执行效率不高
- 
PerparedStatement防止SQL注入,安全性比较高 
 Statement不能防止SQL注入,安全性较低
7. 数据类型与Java类型的匹配
| 数据库类型 | Java类型 | 
|---|---|
| char | String | 
| varchar | |
| varchar2 | |
| clob | |
| number | int | 
| long | |
| number(7,2) | double | 
| date | java.sql.Date | 
| timestamp | java.sql.Timestamp | 
8. JDBC如何手动提交事务
JDBC默认自动提交事务
- 
把Connection对象设置成手动提交事务,代码如下: 
 conn.setAutoCommit(false);
- 
当Statement对象执行SQL语句之后,提交事务,代码如下: 
int row = ps.executeUpdate();
conn.commit();
select t.*, rowid from t_newsuser t;
// 格式化表
truncate table t_newsuser;
9. 如何释放一张表的空间,提高查询效率
select * from t_newstype;
select * from t_newstype1;
- 创建一张备份表
 create table t_newstype1 as select * from t_newstype;
- 清空原表
 truncate table t_newstype;
- 还原数据
insert into t_newstype select * from t_newstype1;
commit;
- 删除备份表
 drop table t_newtype1;
10. executeUpdate与executeQuery的区别
- 
executeUpdate:执行的语句是DDL、DML,DDL几乎不用,返回值为:影响行数(int) - drop:删除表结构,并且删除数据,释放表空间
- truncate:保留表结构,清除数据,释放表空间
- delete:保留表结构,删除指定数据,提交事务,不一定释放空间
 
- 
executeQuery:执行的语句是DQL,select查询语句,返回值为:结果集(ResultSet) 
10. JDBC常见异常
| 常见异常 | 可能引起原因 | 
|---|---|
| 标识符无效 | 字段名单词写错 | 
| 索引中丢失IN或OUT | 字段名与?个数不匹配 | 
| 无效的列索引 | 参数多余? | 
| ORA-00911:无效字符 | 多个无效的字符,例如:分号 | 
| 列在此处不允许 | 数据类型不匹配 | 
本文来自博客园,作者:Schieber,转载请注明原文链接:https://www.cnblogs.com/xiqingbo/p/java-18.html

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号