jdbc笔记(完整版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库:对数据进行存储和操作
CRUD:create(创建) create Read(读取) select
update(更新) update delete(删除) delete drop truncate
insert(插入)... 逐条插入(不能插入大型数据),手动提交(commit)
JDBC(java database connect):通过jdbc连接数据库并且对数据库内容
进行增删该查操作.主要通过java api(java.sql... javax.sql...)
ODBC(open dababase connect):包含一系列C实现的接口
(连接绝大部分数据库,不需要更改驱动等内容)
需要引用odbc夹包
1996 sun推出jdbc技术--->odbc--->一系列的接口以及抽象类
-->使用哪种数据库(那个厂商对接口和抽象类进行实现)
jdbc:可以用来连接数据库,对数据库sql语句进行操作,处理结果集
(ResultSet 以游标卡尺的形式实现 before first
after last next():判断是否还有下一条数据 false没有
如果一旦存在 执行 get***类型(index 从1开始/name))
jdbc API 主要两个组成
1>应用程序开发接口---->java的应用程序
2>驱动程序开发接口---->数据库的驱动开发
驱动:以面向对象理解driver就是一种类,实现了java api定义好的接口
驱动是各个厂商提供.java.sql.Driver 接口
Oracle driver=oracle.jdbc.driver.OracleDriver 包.类
Mysql driver = com.mysql.jdbc.Driver
驱动分为4类
jdbc-odbc桥加odbc驱动:实质使用的是odbc去调用数据库(在客户端安装数据库的驱动程序 第三方 关联java与C) 对于java而言执行效率最低,主要操作有C完成(odbc jar文件),是为以后纯java写的驱动实现的一个过渡版本
jdbc本地API(一少部分是java实现)
java驱动程序条用DBMS驱动来操作数据库,实质是DBMS来完成
jdbc网络连接驱动(纯java实现的驱动)
java驱动程序调用无DBMS驱动的协议,通过某一个web服务器来操作数据库
jdbc本地协议API:执行效率最高
jdbc如何连接数据库?Socket oracle/ sqlplus执行登录oracle操作
ip+port:找到服务器上的某一个数据库--->数据库的特设内容
Connection connect =
DriverManager.getConnection(url,username,password)
DriverManager.getConnection(url)
DriverManager.getConnection(url,properties)
jdbc URL: 是本地的java程序识别不同的数据库,一种标示数据库的方法,是数据库厂商提供
url = jdbc:oracle:thin:@127.0.0.1:1521:XE(ORCL)
oracle数据库的SID类型(XE:xe版本 ORCL:正式版本)
url = jdbc:oracle:oci:@127.0.0.1:1521:XE(ORCL)
thin@oci
thin:oracle数据库的瘦模型版本,不需要在客户端安装oracle的
相应软件驱动程序,只需要在classpath放入一个odbc14.jar
odbc5.jar(jdk7版本),执行效率低
oci:胖版本oracle数据库,需要在客户端安装oracle软件驱动程序
需要配置环境变量(oracle --->oracle_home)
url = jdbc:oracle:thin:@127.0.0.1:1521:XE(ORCL)
oracle数据库协议名称(oracle提供)@ip:port实例化:SID(使用者提供)
Statement:
将sql发送到oracle数据库
connect.createStatement(SqlString):
无参数的sql语句,默认自动提交
PreparedStatement
connect.preparedStatment(SqlString):
操作无参或者有参的预编译sql语句,处理大型文件,使用批处理
connect.setAutoCommit(false) mit();
CallableStatment
connect.preparedCall(SqlString):
操作已经存在的PL/SQL语句
jdbc开发步骤
注册驱动
1.使用类加载 通用型最强
Class.forName(driverName)
[DriverManager.registerDriver(new driverName)]
2.构建示例对象(面向对象思想)
Driver driver = new oracle.jdbc.driver.OracleDriver();
DriverManager.regiserDriver(driver)
3.使用虚拟机参数(main 接受) 服务器搭建项目使用比较多
java -Djdbc.drivers=
oracle.jdbc.driver.OracleDriver:com.mysql.jdbc.Driver
建立连接
Connection connect =
DriverManager.getConnection(url,username,password)
DriverManager.getConnection(url)
DriverManager.getConnection(url,properties)
private static String driver;
privare static String url;
private static String username;
private static String password;
static {
Class.forName(driver);
connect = DriverManager.getConnection
(url,username,passwd)
}
创建Statement对象
Statement:将sql发送到oracle数据库
connect.createStatement(SqlString):
无参数的sql语句,默认自动提交
PreparedStatement
connect.preparedStatment(SqlString):
操作无参或者有参的预编译sql语句,处理大型文件,使用批处理
connect.setAutoCommit(false) mit();
CallableStatment
connect.preparedCall(SqlString):
操作已经存在的PL/SQL语句
执行sql语句 查询(Statment)
insert/update/delete(PreparedStatement)
String sql = "insert into s_emp(id,last_name,salary)"
+" values(?,?,?)";
遍历结果集
ResultSet rs = statement.executeQuery();返回结果集对象
Int i = statement.executeUpdate();
返回int类型,判断有多少条数据更新 如果没有数据更新返回0
boolean flag = statment.execute() 返回boolean类型,判断是否
有结果集ResultSet返回,如果没有返回false.
while(rs.next()) {
Integer id = rs.getint(1[index]);
String name = rs.getString("last_name");
Double salary = rs.getDouble(3);
System.out.println(id+name+salary);
}
释放资源
finally {
//先创建后释放
if(rs != null) rs.close();
....
}
总共jdbc连接数据库六步骤,其中五个步骤是要抛出sqlException,
只有注册驱动抛出其他类型的异常
jdbc是自动提交,不需要手动设置.每次提交一条语句,一个事物一
个语句一次提交.connect.setAutoCommit(false)
Connection connection =
ConnectionFactory.getConnection();
PreparedStatement pstm = null
void save(Student student) {
String sql = "insert into student values(?,?,?)";
pstm = connection.preparedStatement(sql);
pstm.setInt(1,student.getName()).....
pstm.executeUpdate();
}
void d
elete(String name) {
String sql = "delete from student where name = ?";
Student student = findStudent(name);
pstm = connection.preparedStatement(sql);
pstm.setString(1,student.getName()).....
pstm.executeUpdate();
}
void update(Student student) {
String sql = "update table student set id = ?
,age= ? where name = ?";
pstm = connection.preparedStatement(sql);
pstm.setString(1,student.getName()).....
}
Student findStudent(String name) {
String sql = "select * from student where name = ?";
pstm = connection.preparedStatement(sql);
pstm.setString(1,name).....
}
List
List
try {
preparedStatement = connection.prepareStatement("select * from student");
resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
Student student = new Student();
student.setId(resultSet.getInt(1));
student.setName(resultSet.getString(2));
student.setPassword(resultSet.getString(3));
student.setAge(resultSet.getInt(4));
student.setGender(resultSet.getString(5));
student.setEmail(resultSet.getString(6));
list.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}