JDBC全称:Java Database Connectivity,简称JDBC
接口 | 描述 |
---|---|
Connection | 用来与数据库建立连接 |
Statement | 用来发送SQL语句 |
ResultSet | 执行SQL语句返回的结果集 |
PreparedStatement | 用来发送SQL语句的,是Statement的子接口(预编译、防止SQL注入) |
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,用户名, 密码")
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();
Java中有三个时间,java.util.Date
时间基类,有三个子类:
时间 | 描述 |
---|---|
java.sql.Date | 数据库时间,精确到年月日 |
java.sql.Timestamp | 数据库时间,精确到年月日时分秒 |
java.sql.Time | 数据库时间,精确时分秒 |
PrepareStatement是Statement的子接口
PerparedStatement自带预编译功能,相同的SQL语句只会编译一次,提高执行效率
Statement每次执行SQL语句都会重新编译,执行效率不高
PerparedStatement防止SQL注入,安全性比较高
Statement不能防止SQL注入,安全性较低
数据库类型 | Java类型 |
---|---|
char | String |
varchar | |
varchar2 | |
clob | |
number | int |
long | |
number(7,2) | double |
date | java.sql.Date |
timestamp | java.sql.Timestamp |
JDBC默认自动提交事务
把Connection对象设置成手动提交事务,代码如下:
conn.setAutoCommit(false);
当Statement对象执行SQL语句之后,提交事务,代码如下:
int row = ps.executeUpdate(); conn.commit(); select t.*, rowid from t_newsuser t; // 格式化表 truncate table t_newsuser;
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;
executeUpdate:执行的语句是DDL、DML,DDL几乎不用,返回值为:影响行数(int)
executeQuery:执行的语句是DQL,select查询语句,返回值为:结果集(ResultSet)
常见异常 | 可能引起原因 |
---|---|
标识符无效 | 字段名单词写错 |
索引中丢失IN或OUT | 字段名与?个数不匹配 |
无效的列索引 | 参数多余? |
ORA-00911:无效字符 | 多个无效的字符,例如:分号 |
列在此处不允许 | 数据类型不匹配 |