JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。全部操作位于java.sql包之中,JDBC是数据库连接服务,主要是由Java操作数据库的执行标准,所以在这个Jdbc中,所有组成几乎都是接口。在Java 7之中其实没多少改变,和jdk 1.6之前基本一样。
1:日常开发中常用的接口:
Connection 、PreparedStatement、ResultSet、Statement
2:常用操作类
DriverManager、Date、Time、Timestamp
在Java之中对于程序连接数据库的操作,主要有三种方式支持:
第一种:JDBC-ODBC:使用ODBC技术进行数据库连接(流程:程序——JDBC-ODBC——DB 性能操作,数据库实时性特别差,基本没人用了。这个操作由SUN自己提供,所有的JDBC技术都是最新版的)
第二种:JDBC连接:由各个数据库生产商提供驱动程序的实现,用户需要单独配置 jar包(流程:程序-jdbc-数据库直接操作,性能高)
第三种:JDBC网络连接,由程序根据网络协议连接到制定的数据库上,这个驱动程序依然由数据库生产商提供,在开发中主要是使用JDBC来进行网络连接。
例如连接Oracle 数据库:
1:找驱动
2:在JAVA之中,由于JDBC属于固定服务,所以代码流程完全一样“
第一步:加载数据库驱动程序
第二步:通过DriverManage类根据指定的属性内容连接数据库
第三步进行数据库的CRUD操作,执行SQL语句
第四步关闭数据库连接
首先需要知道的信息:
数据库的驱动程序路径:oracle.jdbc.driver.OracleDriver
数据库连接地址:jdbc:oracle:thin:@localhost:1521:orcl
数据库登录名和密码
分析JDBC:
JDBC的设计就属于一个工厂设计模式,其中的DriverManager负责取得Connextion接口的实例对象
1:使用Statement操作数据库
如果想要执行数据库操作,在java中使用Statenment接口完成。但是如果取得Statement接口对象的话,必须依靠Connection接口完成,在Connection接口中方法:得到Statement对象:Connection.createStatement()当取得Statement对象之后就可进行CRUD操作!
更新操作:int executeUpdate(String sql) throws SQLException
查询操作:ResultSet executeQuery(String sql) throws SQLException
关闭操作: void close() throws SQLException
代码如下(方便起见异常统一抛出):
/*
* 第一步:加载驱动程序
*/
Class.forName(DBDRIVER);
/*
* 第二步 连接数据库 public static Connection getConnection(String url) throws SQLException
*/
conn=DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
/*
* 第三步:取得Statement对象 Statement createStatement() throws SQLException
*/
Statement stmt =conn.createStatement();
conn.close();
公共接口,自动关闭不需要使用的资源。看着很爽,不过一般自动的东西部使用,使用了就坑爹了。良好的编程习惯,资源操作必须全部由手工关闭!
相关CRUD操作:
1:ResultSet接口
文档解释:A table of data representing a database result set, which is usually generated by executing a statement that queries the database:表示数据库结果集,这通常是通过执行查询数据库的语句生成的数据表。
在Connection接口中由createStatement() throws SQLException 方法取得Statement 对象。
Statement对象中的executeQuery(String sql) throws SQLException 方法返回ResultSet 对象。
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql); //返回ResultSet对象
在ResultSet接口中主要有:
1: boolean next()throws SQLException
该方法:从当前位置移动光标前移一行。时,ResultSet指针最初位于第一行之前,给该方法的第一次调用next使得第一行成为当前行;第二次调用使第二行成为当前行,依此类推。 当调用next方法返回false,则游标的最后一行之后的位置。中的ResultSet方法的任何调用它需要一个当前行,将导致抛出SQLException。
2:type getXXX(type columnIndex) throws SQLException
如:
ResultSet rs =stmt.executeQuery(sql);
while(rs.next()){
int id =rs.getInt("id");
String name =rs.getString("name");
2:PreparedStatement接口
以上均由Statement接口操作,但是实际开发中一般不用!一般使用Statement的子接口:public interface PreparedStatement extends Statement
即:An object that represents a precompiled SQL statement.一个对象,表示一个预编译的SQL语句。
使用方法:
Upadte操作
PreparedStatement pstmt = con.prepareStatement("UPDATE tablename SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
Query操作
executeQuery() throws SQLException 返回ResultSet 对象,无须参数。
这样一对比,PreparedStatement 瞬间高大上了。所以开发中一般使用PreparedStatement接口。从而避免了使用Statement接口中带来的种种比较那个的问题。