JDBC(Java DATABASE CONNECTIVITY|CONNECTION) 基于java语言访问数据库的一种技术
一、介绍JDBC
JDBC: API,sun公司制定的标准.
一部分提供给程序员,接口 java.sql包下 connection statement resultset ....
一部分提供给数据库厂商,实现.ojdbc14.jar 增加类库 添加第三方jar包
开发JDBC应用程序
1.新建java project
2.增加类库:ojdbc14.jar
build path
3.开发应用程序
二:错误种类:
ClassNotFoundException:正确增加了类库(ojdbc14.jar) / 检查驱动类名称
The NetWork Adapter could not establish the connection:检查连接字符串
SQL命令未正确结束:sql语句 sql语句去掉分号
列名无效:检查列名 结果集中的列名
三、驱动类库
mysql数据库的驱动类库: mysql-connector-java-5.1.6-bin.jar
oracle数据库的驱动类库: ojdbc14.jar
四、开发步骤:
1 注册驱动,根据不同数据库注册不同的驱动.
Class.forName("oracle.jdbc.driver.OracleDriver")
(mysql) “com.mysql.jdbc.Driver"
new oracle.jdbc.driver.OracleDriver();
2 通过驱动管理器获得连接:
Connection conn = DriverManager.getConnection(url,用户名,密码)
(oracle)url = "jdbc:oracle:thin:@ip地址:1521:数据库名(orcl)
jdbc:oracle:thin:@192.168.11.188:1521:orcl
(mysql) jdbc:mysql://ip地址:3306/数据库名(database对象的名字)
3 通过连接(Connection)生成语句(Statement)对象
Statement stmt = conn.createStatement();
PreparedStatement pstmt = conn.prepareStatement(sql);
4 传递语句对象,并返回结果
String sql = "select * from emp";
ResultSet rs = stmt.executeQuery(sql);
//ResultSet rs = prepareStmt.executeQuery();
int n = stmt.executeUpdate(sql);
while(rs.next()){
......
}
5 释放资源
rs.close();
stmt.close();
conn.close();
元数据:MetaData(两个接口) 元标记:修饰其他标记的标记
DatabaseMetaData 提供的是关于数据库的各种信息 关于数据库的元数据
ResultSetMetaData 获得表的信息 关于结果集的元数据
关键字:
Connection 特定数据库的连接(也是会话)
Statement 用于执行静态的sql语句 并返回它所生成结果的对象
PreparedStatement 是Statement 的子类 表示预编译sql语句的对象
ResultSet 表示数据库结果集,通常通过执行查询数据库的语句生成
Statement的三个方法
1)ResultSet executeQuery(sql):select
2)int executeUpdate(sql):insert/update/delete
3)boolean execute():可以执行上述两种sql,当执行sql有结果集产生时,返回true,
当执行的是dml操作,或者没有结果集,返回false;
boolean r = stmt.execute(sql);
if(r){
ResultSet rs = stmt.getResultSet();
}
PreparedStatement
分页问题
limit()
rs.absolute(11);
for(int i = 0; i < 5;i++){
if(rs.next()){
rs.g et...
}else{
break;
}
}
Oracle分页问题 rownum
实现方法:方法中传入一些参数,则可以返回当页的记录 参数? 返回值? 实现?
三.主键自增长方式的实现方式
--mysql:
create table student(
id number primary key auto_increment,
name varchar(20)
);
insert into student(name) values('peter');
insert into student(name) values('jack');
select * from student;
id name
----------
1 peter
2 jack
--mysql结束,oracle开始---
create sequence myseq start with 888 increment by 10;
insert into mystu (id, name, age, sex)
values(myseq.nextval, 'chris', 20, 'M');
jdbc -- 只适用于mysql
String sql = "insert into student(name) values('"+name+"')";
stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
System.out.println(rs.getInt(1));
事务:JDBC 事务默认是自动提交
conn.setAutoCommit(false);
conn.commit();
conn.rollback();
create table card(id int primary key auto_increment,username varchar(30),money double);
insert into card(username,money) values('cw',1000000);
insert into card(username,money) values('wo',10);