`
阅读更多

class OracleDriver implements Driver{

     static{  

        OracleDriver d=new OracleDriver();

        DriverManager.addDriver(d);

     }

  }

 

  class DriverManager{

     private static List<Driver> dri=new ArrayList<Driver>();

     public static void addDriver(Driver d){

        ......

        dri.add(d);

     }

     public static Connection getConnection(){

        for(Driver d:dri){ 

           if(d!=null)  return d.getconnect();

        }

     }

  }      

 

  ===================================

  boolean execute(sql) ---> all   execute可以执行所有的SQL语句,返回有boolean

     boolean 表示有没有ResultSet返回

     true:      false:没有

     rs=stm.getResultSet();

 

  ResultSet executeQuery(sql){}-----> select   只能执行查询语句

 

  int executeUpdate(sql){} -----> insert update delete   只能执行增 删 改

 

  jdbc常见问题:

  1 Class not found 

    -------> ojdbc14.jar 

 

  2 No suitable Driver

    ----->url

   

  3 Socket Exception 

   -------à ping 200

   

  4 SQLException ---->  sql

                              

   table: jdbc_users

   sequence:  jdbc_users_seq

  配备文件:

 driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@192.168.0.200:1521:oradb10g

username=cksd0804

password=cksd0804            

 

BufferedReader

String str=br.readLine();

String[] s=str.split("=");

if(s[0].equals("driver"){}    

 

.properties格式的文件 有一个Map

.properties ------> Map<String,String>

            ------> Properties extends Hashtable<String,String>

 

 JdbcUtil.class.getResourceAsStream("/com/kettas/jdbc/cfg/config.properties"); 

 JdbcUtil.class 表示jdbcUtil的对象

.getResourceAsStream() 通过流的方式获得资源―――对文件进行读取

()里面写虚拟路径

 /com/kettas/jdbc/cfg/config.properties

  /<====>classpath

 

 /home/java/jdbc/..... 

 

 Student s=new Student();

 1. search file ---->Student.class

    path---->command

    classpath--->.class

 2. read Student.class

 3. Class c----> Student详细信息 

 Student s2=new Student();  

 

  .class----> jdbc.jar--->user--->classpath

 

  1 分散代码集中管理

  2 变化的内容写进文件

 

  3 xml   .properties   配备文件的两种常用文件格式

  4  Properties

  5  ExceptionInInitializerError

  6  Class.getResourceAsStream( 虚拟路径 )

                                        

                                        

  1. jdbc 六个步骤

  2. 注册Driver的三种方式

  3. ResultSet遍历

  4. 三种execute方法的区别

  5. JdbcUtil

  6. Driver方展的四个阶段 

  7. 写程序,jdbc_users表插入五条记录

     String[] names={"mary","tom","anna","jerry","george"};

 

==================================

package com.kettas.jdbc.day1;

import java.sql.*;

 

public class FirstJdbc {

 

    public static void main(String[] args) {

       //step 1.  注册Driver

      //注册Driver第二种方式

      /*Driver d1=new oracle.jdbc.driver.OracleDriver();

      try {

         DriverManager.registerDriver(d1);

      } catch (SQLException e1) {

         e1.printStackTrace();

      }

      

       *注册Driver第三种方式

      * 在程序不指定,DriverManager没有,再找环境变量jdbc.drivers

      * 里面有没有指定

      * java  -Djdbc.drivers=oracle.jdbc.driver.OracleDriver classname

       */

      //注册Driver第一种方式

      try {

         Class.forName("oracle.jdbc.driver.OracleDriver");

//       如果需要多个Driver

//       class.forName("driver2");

//       class.forName("driver3");

//       class.forName("driver4");

      } catch (ClassNotFoundException e) {

         e.printStackTrace();

      }

      Connection conn=null;

      Statement stm=null;

      try{

//       step 2. 连接数据库

   String url="jdbc:oracle:thin:@192.168.0.200:1521:oradb10g";

         conn=DriverManager.getConnection(url,"cksd0804","cksd0804");

//       step 3. 创建Statement

         stm=conn.createStatement();

         //step 4. 执行sql 

String sql="insert into jdbc_users(id,name,passwd,phone,email)"

            +" values(jdbc_users_seq.nextval,'zhangsan','11111','22222','zhang@cernet.com')";

         stm.executeUpdate(sql);

         System.out.println("===========insert ok==============");

         //step 5. 处理结果集

      }catch(Exception e){

          e.printStackTrace();

      }finally{

//       step 6. 释放资源

         if(stm!=null)  try{ stm.close();} catch(Exception ee){}

         if(conn!=null) try{ conn.close();} catch(Exception ee){}

      }

   }

 

}

 

 

====================================

 

package com.kettas.jdbc.day1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

 

import com.kettas.jdbc.util.JdbcUtil;

public class SecondJdbc {

    public static void main(String[] args) {

       Connection conn=null;

       Statement stm=null;

       ResultSet rs=null;

       try{

           conn=JdbcUtil.getConnection();

         stm=conn.createStatement();

       String sql="select id,name,passwd,phone,email from jdbc_users"

               +" where id=2";

          rs=stm.executeQuery(sql);

           //处理结果集

    if(rs.next()){            System.out.println(rs.getInt(1)+"-------"+rs.getString(2));

        }

    /*while(rs.next()){         System.out.println(rs.getInt(1)+"-------"+rs.getString(2));

         }*/遍历结果

//rs第一个下标在结果的上一个地址。

       }catch(Exception e){

           e.printStackTrace();

       }finally{

           JdbcUtil.release(rs,stm,conn);

       }  

    }

}

 

====================================

package com.kettas.jdbc.util;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.Properties;

import java.io.*;

 

public class JdbcUtil {

    private static Properties info=new Properties();

    static{   

       try {

InputStream is=JdbcUtil.class    .getResourceAsStream("/com/kettas/jdbc/cfg/config.properties");

           info.load(is);//???

           is.close();

       } catch (Exception e) {

           throw  new ExceptionInInitializerError(e);

       }

    }

    public static Connection  getConnection() throws Exception{

       Class.forName(info.getProperty("driver"));

       return DriverManager.getConnection(info.getProperty("url"),

              info.getProperty("username"),info.getProperty("password"));

    }

    public static void release(ResultSet rs,Statement stm,Connection conn){

       if(rs!=null)  try{ rs.close();} catch(Exception ee){}

       if(stm!=null)  try{ stm.close();} catch(Exception ee){}

       if(conn!=null) try{ conn.close();} catch(Exception ee){}

    }

    public static void main(String[] args) throws Exception{

       System.out.println(getConnection());

    }

}

 

Connection是线程不安全的,不能在线程间共享

 

=================================

 

1. jdbc 六个步骤

     1)注册Driver

     2)获得连接

     3)创建Statement

     4)执行sql

     5)select--->处理结果集

     6)释放资源(rs,stm,conn)

  2. 注册Driver的三种方式   

     1)Class.forName("oracle.jdbc.driver.OracleDriver");

     2)Driver d=new oracle.jdbc.driver.OracleDriver();

       DriverManager.registDriver(d);

     3)程序里没有指定

       java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver  classname

  3. ResultSet遍历 

     1) next()---->boolean

     2) get***(int)   get***(columnname) 

        eg: getString("name");

     开始时指针指向第一行的上一行,最后指针指向最后一行

     的下一行

  4. 三种execute方法的区别

     1)stm.execute(sql)   all    boolean(ResultSet)

     2)stm.executeQuery(String selectsql) --->ResultSet

     3)stm.executeUpdate(sql)  --->int(db row) 

       ---->delete update  insert   

  5. JdbcUtil

     1)分散代码集中管理(封装)

     2)经常变化的写进文件(配置文件)

       config.xml        config.properties

     3)Properties extends Hashtable<String,String>

       专门处理properties文件,提供load(InputStream is)

     4)在程序加载时读一次文件,所以读文件的代码写在

       静态代码块,里面只能抛一种类型的错误

       ExceptionInInitializerError

     5)利用jvm的类加载器读字节码文件的功能,可以获得

       输入流,

       InputStream is=JdbcUtil.class

             .getResourceAsStream(虚拟路径);

       绝对路径:/是真是的目录里面的根

       虚拟路径:/classpath

    

  6. Driver方展的四个阶段 

     1)Jdbc-odbc

     2)db client

     3)base net pure java

     4)pure java native  纯本地java

    

  7. 写程序,jdbc_users表插入五条记录

     String[] names={"mary","tom","anna","jerry","george"};

 

==================================

 

Statement   PreparedStatement的比较

 1)建立

   stm=conn.createStatement();

   pstm=conn.prepareStatement(sql);

 2)执行

   stm.execute(sql);   包含数据的完整的sql命令

   pstm.execute();     数据

 3)stm 可以执行多条sql

   pstm 只能执行一条sql

 4)使用pstm的环境

   a.执行同构sql,pstm效率高

     执行异构sql,stm效率高   

   b.构成sql语句时需要外部的变量值,pstm

   

   dao:

   public void update(Account a){ 

     sql=update account set username=?,passwd=?,

         personid=?,balance=?;

     pstm=conn.....

     pstm.setString(1,a.getName());

   }

 

========================================================

  

 Transaction: 一组不可再分的sql命令,根具体业务有关

  A:原子性     atom

  C:一致性     coherence

  I:隔离性     insulation

  D:持久性--->commit,rollback

 

  手动划分事务的边界:

   conn.setAutoCommit(false);   

     新事物开始

   conn.commit();

     旧事务的结束,新事务的开始

   conn.rollback();

     旧事务的结束,新事务的开始 

 

   没有手动划分,采用的是默认事务提交策略,

   一条sql一个事务

                     

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

  Connection是线程不安全的,不能在线程间共享       

 

  threada   save   withdraw   transfer

  threadb   save   withdraw

 

  1.common: 5 Connection

  2.singleton: 1 Connection               singleton单例模式

  3.一个线程内部共享连接: 2 Connection 

 

    t1.start();

t2.start();

t1.start();

    t2.start();

  class ThreadA extends Thread{  

     private Connection conn1=null;

     public void run(){    

        conn1=JdbcUtil.getConnection();

        save(10000,conn1);

        withdraw();

     } 

     public Connection getConn(){return this.conn1;}

  }

  class Bank{

  public void save(double balance){   

      conn2=Thread.currentThread().getConn();

      sql="update account set balance=?";

      pstm=conn.prepareStatement(sql);

      pstm.set***;

      pstm.executeUpdate();

  }

  public void withdraw(double balance){   

      conn2=this.getConn();

      sql="update account set balance=?";

      pstm=conn.prepareStatement(sql);

      pstm.set***;

      pstm.executeUpdate();

  }      

  }

  每一个线程对象创建好以后,jvm会为其分配一块内存空间,

  用来存放当前线程对象独占数

分享到:
评论

相关推荐

    尚硅谷佟刚 JDBC1

    【尚硅谷佟刚 JDBC1】课程主要探讨了Java中数据持久化的重要性和实现方式,以及JDBC作为核心的数据库访问技术。数据持久化是指将内存中的数据保存到可持久存储的设备,通常指的是关系数据库中,以便后续使用。在企业...

    java零基础自学之JDBC1-3课时

    本教程“Java零基础自学之JDBC1-3课时”旨在帮助初学者理解并掌握JDBC的基本概念、使用方法以及常见操作。 在JDBC的第一课时中,通常会讲解以下内容: 1. **JDBC概述**:解释JDBC是什么,它的作用,以及如何在Java...

    JDBC1详解.docx

    。。JDBC1详解.docx

    JDK版本与JDBC版本的关系

    - **JDK 1.1 - JDBC 1** - 在JDK 1.1中,首次引入了JDBC 1.0,这是一个基本的数据库连接框架。 - 随着JDK 1.1的发展,JDBC 1.0得到了初步的应用和支持,但该版本已经过时,并且在后来的JDK 8.0版本中已经被移除。 ...

    MySQL8.0驱动 mysql-connector-java-8.0.11版jdbc1驱动

    MySQL8.0驱动 mysql-connector-java-8.0.11版jdbc1驱动,解压即可用,官网可下载,注意连接驱动名为:com.mysql.cj.jdbc.Driver ,在数据库链接后加上:?userSSL=true&serverTimezone=GMT,表示禁用SSL(开发环境下...

    JDBC与Java数据库编程

    - **JDBC 1.x**:最初版本,提供了基本的数据存储架构和核心接口,如`DriverManager`、`Connection`、`Statement`和`ResultSet`等。 - **JDBC 2.0**:引入了可滚动结果集、可更新结果集、批量更新等功能,增强了性能...

    jdbc的入门小程序

    1. `jdbc1.class` 和 `jdbc.class`:这些是编译后的Java类文件,可能包含了实现JDBC连接、查询等功能的代码。通常,`.class`文件是Java源代码(`.java`)经过编译后的结果,可以直接在Java虚拟机上运行。 2. `jdbc1....

    jdbc入门代码1

    jdbc连接sql sever2005的简单代码,仅做保存

    JDBC2

    JDBC2作为JDBC的第二个主要版本,在JDBC1的基础上做了大量的改进和扩展,为开发者提供了更强大的功能和更高的性能。 在JDBC2中,最重要的更新之一是引入了**批处理(Batch Processing)**。批处理允许开发者将多条...

    DB2 JDBC驱动程序及其支持的功能简介

    若需切换不同版本,可通过执行相应目录下的`usejdbc2`或`usejdbc1`命令完成。 - **DB2版本8**:该版本进一步扩展了支持的JDBC驱动程序类型,引入了第二类、第三类和第四类驱动程序。其中,第四类驱动程序被称为...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    首先,JDBC Driver 3.0分为四种类型:Type 1、Type 2、Type 3和Type 4。在SQL Server JDBC中,我们主要关注Type 4驱动,也称为纯Java驱动。这种驱动完全用Java编写,无需依赖数据库供应商特定的库,因此具有高度的可...

    JDBC与Java数据库编程.pdf

    **3.1 JDBC 1.x** - **特点**:最初的标准,提供了基本的数据存储架构,如`DriverManager`、`Connection`、`Statement`、`ResultSet`等核心接口。 - **发布形式**:作为Java SDK的一个附加组件发布,随后集成到了...

    sqljdbc和sqljdbc4 sqlserver最新驱动

    1. SQLJDBC驱动: SQLJDBC是微软发布的早期版本的JDBC驱动,它支持JDBC API 3.0规范。这个驱动分为四个类型:Type 1、Type 2、Type 3和Type 4。其中,Type 4是纯Java实现,无需依赖本地系统组件,提供高性能的...

    Spring Data JDBC与JDBC的区别

    1. **自动配置**: Spring Boot通过自动配置,可以快速设置数据源和JDBC模板。 2. **Repository接口**: 开发者只需定义Repository接口,Spring会自动提供实现,无需编写繁琐的DAO层代码。 3. **ORM支持**: 尽管不如...

    传智播客方立勋JDBC的ppt

    在“传智播客-Jdbc1_方立勋.ppt”中,主要涵盖了JDBC的基础知识。这部分内容可能包括: 1. **JDBC驱动分类**:介绍四种类型的JDBC驱动,如JDBC-ODBC桥、网络纯Java驱动等,并讲解它们的工作原理。 2. **JDBC基本步骤...

    sqlserver驱动包 jdbc驱动 sqljdbc.jar和sqljdbc4.jar

    在Java中,JDBC驱动通常分为四种类型:Type 1、Type 2、Type 3和Type 4。sqljdbc.jar和sqljdbc4.jar属于Type 4,即纯Java实现的驱动,无需依赖于数据库供应商的特定接口或中间件,因此具有较好的跨平台性。 要使用...

    sqlite-jdbc-3.31.1.zip

    在本案例中,“sqlite-jdbc-3.31.1.zip”是一个包含SQLite JDBC驱动的压缩包,版本号为3.31.1,用于在Java环境中通过JDBC方式连接和操作加密后的SQLite数据库。 首先,我们需要了解如何在Java项目中使用sqlite-jdbc...

    jdbc.zip_java jdbc_java+jdbc_jdbc_jdbc Java_zip

    1. **加载驱动**:使用`Class.forName()`方法加载数据库驱动,如`Class.forName("com.mysql.jdbc.Driver")`对于MySQL。 2. **建立连接**:使用`DriverManager.getConnection()`方法创建与数据库的连接,传入URL、...

Global site tag (gtag.js) - Google Analytics