JDBC学习随笔

-------------------------------------------------------------------------------------------------------------------------java

 概念sql

JDBC  Java Database Connectivity   提供Java访问各类数据库的API。  而后由这个数据库厂商来完成这些借口。数据库

JDBC API中的几个重要的接口并发

DriverManger  咱们要链接一个或N个数据库,DriverManger就是管理就一个或多个数据库用的,咱们要什么链接,就从它这取就好了oracle

Connection     提供了与数据库交互的方法(自我理解,向DriverManger索要的一个链接)url

Statement  提供了与SQL相关的操做(自我理解,就是用来操做SQL语句的)spa

ResultSet   提供了SQL返回结果集的操做(SQL语句执行的结果。)code

SQLException 处理在上面几个操做中的异常。对象

概念总以为很难理解。我是这么理解,不对的地方请你们指出blog

数据库在对面,中间有条河,我要操做数据库,分为几个步骤

1.我须要链接数据库,我先问问数据库怎么链接你。而后数据库给我个驱动。

2.MangerDriver爸爸告诉我怎么修,而后我修好这个通道。

3.桥修好了找个对象就能够和数据库进行操做了。

4.对象取来了我执行数据库操做结果

-------------------------------------------------------------------------------------------------------------------------

变成代码

1 //注册驱动
2 Class.forName("oracle.jdbc.driver.OracleDriver");
3 //创建简介
4 Connectoin connection = DriverManger.getConnecton("jdbc:oracle.thin://192.168.93.93:1521/orcl");
5 //获取操做sql的对象
6 Statement  statement = connection.createStatement();
7 //执行sql语句
8 ResultSet resultSet = statament.executeUpdate(sql);

-------------------------------------------------------------------------------------------------------------------------

主要方法

1.注册驱动

DriverManager.registerDriver(new DriverManager.registerDriver());不推荐使用这种方式来加载驱动
        
Class.forName("oracle.jdbc.driver.OracleDriver");

2.Connection能够经过俩个累得到 

--DriverManger   在Java.sql   这个链接底层拿到链接 

--DataSource     在Javax.sql  这个容器封装成数据源,而后获取链接。访问量大的时候最好用这个(其实我也不知道 我看网上查的,最后试试)

connection = DriverManager.getConnection(url, user, password);
//
url 三种格式 String url = null ; //1 推荐 url = jdbc:oracle:thin:@//<host>:<port>/<service_name> ;
//2 url =jdbc:oracle:thin:@<host>:<port>:<SID>;
//3 url =jdbc:oracle:thin:@<TNSName>;

//注意
connection.setAutoCommit(false); //这句话意思是把事务设置成不自动提交,若是在statement操做sql语句时,不会出现第N句语句出现异常以后,N后面的语句执行不到的状况

 statement.executeUpdate(sql);

  statement.executeUpdate(sql);

 statement.executeUpdate(sql);

  connection.commit();//提交  

 conection.rollback();//若是上面sql语句中有任何语句错误,可总体回滚

3.Statement preparedStatement  CallableStatement  (步骤 建立对象  执行sql语句  关闭statement)

第三个继承第二个 第二个继承第一个

Statement  提供最基本的sql操做 适合静态的sql语句,且传入的sql语句没法接受参数

preparedStatement   能够在sql中传递参数 适合屡次使用sql语句,能够防止SQL注入

//建立方法 

statement = connection.createStatement(resultSetType, resultSetConcurrency, resultSetHoldabliity);
//建立一个statement对象,该对象生成具备给定类型,并发性,可保存的result对象

//resultSetType参数主要描述俩件事,游标是否能够左右移动,已经取出的结果集对数据库的改动是否要更新
//resultSetType有三种能够取值:resultSet.TYPE_FORWARD_ONLY,游标只能向前移动,默认是这种;
//resultSet.TYPE_SCROLL_INSENSITIVE能够先后移动,对数据的改动不关心(如你正在读取数据的时候,有其余一我的操做数据库,对你查询的结果集作出改变,次改变对你不影响);resultSet.TYPE_SCROLL_SENSITIVE(哈哈 这个单词我认识,打CS调节鼠标速度的)能够先后移//动,而且数据库发生改动时候,resultSet也发生变化。 这种状况下resultSet能够复用。

//resultSetConcurrency,是否更新结果集中的数据到数据库
//能够有俩种取值,resultSet.CONCUR_READ_ONLY是只读,resultSet.CONCUR_UPDATEABLE能够更改的
//method
//若是有result 返回为true,不然为flase,通常用于drop alter create
boolean execute(String SQL)
//返回影响的行数,通常用于insert update delete 
int executeUpdate(String SQL)
//返回一个结果集result 通常用于查询select
ResultSet executeQuery(String SQL)

4.ResultSet 

当对数据库进行查询操做的时候, 数据库返回的数据经过 ResultSet 接口获取. ResultSet就是SQL执行的结果,ResultSet 内部管理了一个 cursor(游标), cursor 指向当前要读的数据,

ResultSet 提供了如下三类接口:

游标移动接口, 用来操做移动游标.

获取数据接口, 用来从当前游标指向位置的数据

更新数据接口, 用来更新当前游标指向位置的数据, 并能够更改对应数据库中的数据.

//方法
resultSet.next();//把光标移动到下一行。(从上到下)
resultSet.previous();//把光标移动到上一行。
resultSet.absolute(int row) //移动到指定行
resultSet.beforeFirst();移动到最前面
resultSet.afterLast();移动到最后面
resultSet.getObject("id");
resultSet.getInt(1); 或者但是resultSet.getInt("id");//取第一colum或者是取id这个colum

 connection  statement  resultset 要释放。

 

-------------------------------------------------------------------------------------------------------------------------

 案例  读取数据  

 
 

ID NAME PASSWORD EMAIL BIRTHDAY AGE
---------- ------------------------------ -------------------------------------------------- -------------------------------------------------------------------------------- ----------- ----
4 张三 admin 123qq.com 2015/11/15  30
1 李四 admin 455@qq.com 2015/11/14 20
5 王五 admin 123@qq.com 2015/11/17 10

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.jdbc.driver.OracleDriver;


public class JDBCDemo {

    public static void main(String[] args) {
        // 
        Connection connection = null;
        Statement  statement  = null;
        ResultSet  resultSet  = null;
        String url      = "jdbc:oracle:thin:@//192.168.93.93:1521/orcl";
        String user     = "user";            
        String password = "passowrd";
        
        try {
            //1.注册驱动 - -
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //2.获取与数据库的链接
            connection = DriverManager.getConnection(url, user, password);
            //3.得要操做sql的对象
            statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            //4.得sql语句结果集
            resultSet = statement.executeQuery("select * from user1");
            //5.获取查询结果
            while(resultSet.next()){
                System.out.println(resultSet.getObject("id"));
                System.out.println(resultSet.getObject("name"));
                System.out.println(resultSet.getObject("password"));
                System.out.println(resultSet.getObject("birthday"));
                System.out.println(resultSet.getObject("age"));

            }
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            // 听别人说要关闭它们
        } finally{
            try { 
                if(connection != null){
                    connection.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
                connection = null;
            
            try { 
                if(statement != null){
                    statement.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
                statement = null;
            
            try { 
                if(resultSet != null){
                    resultSet.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
                resultSet = null;
            
            
        }
        

    }

}
//DataSource获取Connection对象
public
static Connection getOralceConnectionWithDataSource() throws SQLException{ OracleDataSource dataSource = new OracleDataSource(); driver = properties.getProperty(driver); url = properties.getProperty(url); user = properties.getProperty(user); password = properties.getProperty(password); dataSource.setURL(url); dataSource.setUser(user); dataSource.setPassword(password); return dataSource.getConnection(); }
相关文章
相关标签/搜索