zoukankan      html  css  js  c++  java
  • 第14章 数据库

      1 /*****************
      2 ***第14章 数据库
      3 *******知识点:
      4 **************1.JDBC简介
      5 **************2.JDBC驱动程序类型
      6 **************3.JDBC常用接口和类简介
      7 **************4.数据库操作
      8 **************5.事务
      9 **************6.连接池
     10 */
     11 
     12 
     13 import java.sql.Connection;
     14 
     15 import java.sql.DriverManager;
     16 
     17 import java.sql.PreparedStatement;
     18 
     19 import java.sql.ResultSet;
     20 
     21 import java.sql.SQLException;
     22 
     23 public class test14{
     24     public static void main(String[] args) throws Exception{
     25         demoJDBCDescription();//jdbc简介
     26         demoJDBCDriver();//2.JDBC驱动程序类型
     27         demoJDBCInterfaceAndClass();//3.JDBC常用接口和类简介
     28         demoDataBaseOperator();//4.数据库操作
     29     }
     30     
     31     /*
     32     *1.JDBC简介
     33     */
     34     public static void demoJDBCDescription(){
     35         //JDBC是Java应用与数据库管理系统进行交互的标准API,包括两个包:核心API---java.sql和扩展的API---javax.sql。
     36         //应用程序通过核心API的接口实现数据库连接和数据处理
     37     }
     38     
     39     /*
     40     *2.JDBC驱动程序类型
     41     */
     42     public static void demoJDBCDriver(){
     43         //1.JDBC-ODBC桥
     44         //JDBC-ODBC桥是sun公司提供的,是jdk提供的的标准API. 这种类型的驱动实际是把所有JDBC的调用传递给ODBC ,
     45         //再由ODBC调用本地数据库驱动代码.由于JDBC-ODBC先调用 ODBC再由ODBC去调用本地数据库接口访问数据库.
     46         //所以,执行效率比较低,对于那些大数据量 存取的应用是不适合的.而且,这种方法要求客户端必须安装ODBC 驱动,
     47         //所以对于基于 internet ,intranet的应用也是不合适的
     48         
     49         //2.本地API驱动
     50         //本地API驱动是直接把JDBC调用转变为数据库的标准调用再去访问数据库。这种驱动比起JDBC-ODBC桥执行效率大大提高了.
     51         //但是,它仍然需要在客户端加载数据库厂商 提供的代码库.这样就不适合基于internet的应用.
     52         //并且,他的执行效率比起3,4型的JDBC驱动还是不够高
     53         
     54         //3.网络协议驱动
     55         //这种驱动实际上是根据我们熟悉的三层结构建立的. JDBC先把对数局库的访问请求传递给网 络上的中间件服务器. 
     56         //中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用 传给数据库服务器.如果中间件服务器也是用java开法的,
     57         //那么在在中间层也可以使用1,2型 JDBC驱动程序作为访问数据库的方法. 
     58         //网络协议驱动---------中间件服务器------------数据库Server
     59         //由于这种驱动是基于server的.所以,它不需要在客户端加载数据库厂商提供的代码库.
     60         //而且 他在执行效率和可升级性方面是比较好的.因为大部分功能实现都在server端,所以这种驱动 可以设计的很小,
     61         //可以非常快速的加载到内存中. 但是,这种驱动在中间件层仍然需要有配置 其它数据库驱动程序,
     62         //并且由于多了一个中间层传递数据,它的执行效率还不是最好.
     63         
     64         //4.本地协议驱动
     65         //这种驱动直接把JDBC调用转换为符合相关数据库系统规范的请求.由于4型驱动写的应用可 以直接和数据库服务器通讯.
     66         //这种类型的驱动完全由java实现,因此实现了平台独立性. 本地协议驱动---------数据库Server
     67         //由于这种驱动不需要先把JDBC的调用传给ODBC或本地数据库接口或者是中间层服务器.所 以它的执行效率是非常高的
     68         
     69         //所以在以后开发中推荐使用第四种
     70     }
     71     
     72     /*
     73     *3.JDBC常用接口和类简介
     74     */
     75     public static void demoJDBCInterfaceAndClass(){
     76         //1.Driver接口————驱动程序,连接应用程序和数据库,用于读取数据库驱动器的信息,提供连接方法,建立访问数据库所用的Connection对象。
     77         //                    在加载某一Driver类时,它应该创建自己的实例并向DriverManager注册该实例
     78         
     79         //2.DriverManager类————驱动程序管理器,管理一组Driver对象,对程序中用到的驱动程序进行管理,包括加载驱动程序、获得连接对象、向数据库发送信息
     80         
     81         //3.Connection接口————连接Java数据库和Java应用程序之间的主要对象并创建所有的Statement对象。 不管对数据库进行什么样的操作,都需要创建一个连接,
     82         //                        然后通过这个连接来完成操作
     83         
     84         //4.Statement类——————语句对象,代表了一个特定的容器,对一个特定的数据库执行SQL语句
     85         
     86         //5.ResultSet接口——————用于控制对一个特定语句的行数据的存取,也就是数据库中记录或行组成的集合
     87         
     88         //6.PreparedStatement类——————表示预编译的SQL语句的对象。SQL语句被预编译并存储在PreparedStatement对象中。然后可以使用此对象多次高效地执行该语句
     89         
     90         //7.ResultSetMetaData接口——————结果集元数据,resultSet.getDataMeta获得的比较重要的是表的列名、列的属性等信息
     91         
     92         //8.DatabaseMetadata接口——————数据库源数据,使用connection.getMetaData()获得了关于数据库整体的元数据信息
     93         
     94         //9.CallableStatement接口————用于执行 SQL 存储过程的接口
     95     }
     96     
     97     /*
     98     *4.数据库操作
     99     */
    100     public static void demoDataBaseOperator() throws Exception{
    101         //数据库操作步骤:
    102         //1.注册驱动
    103         //2.建立数据库连接
    104         //3.创建数据库操作对象
    105         //4.执行SQL
    106         //5.处理结果集
    107         //6.关闭JDBC对象
    108         
    109         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//注册驱动
    110         
    111         String url = "jdbc:sqlserver://localhost:1433;DatabaseName=myerp";
    112         String user = "sa";
    113         String password = "123456";
    114         Connection con = DriverManager.getConnection(url,user,password);//建立连接
    115         
    116         System.out.println("演示Statement=========");
    117         Statement stm = con.createStatement();//得到操作对象(不带参数)    
    118         String sql = "insert into t_Area(AreaID,ParentAreaID,AreaName) values(1,0,'华南区')";//sql语句
    119         stm.execute(sql);//执行sql语句
    120 
    121         ResultSet rs = stm.executeQuery("select * from t_Area");//得到执行sql语句返回的数据集
    122         while (rs.next()) {//遍历数据集
    123             System.out.println("区域ID:" + rs.getInt("AreaID") + ",父区域ID:"
    124                     + rs.getInt("ParentAreaID") + ",区域名:"
    125                     + rs.getString("AreaName"));
    126         }
    127         
    128         
    129         System.out.println("演示PreparedStatement=========");
    130         sql = "select * from t_Area where ParentAreaID=? ";
    131         
    132         PreparedStatement pstm = con.prepareStatement(sql);//得到操作对象(带参数)    
    133         pstm.setInt(1,0);
    134         
    135         
    136         rs = pstm.executeQuery();
    137         while (rs.next()) {
    138             System.out.println("区域ID:" + rs.getInt("AreaID") + ",父区域ID:"
    139                     + rs.getInt("ParentAreaID") + ",区域名:"
    140                     + rs.getString("AreaName"));
    141         }
    142         
    143         
    144         
    145         DatabaseMetaData meta = con.getMetaData();//得到数据库源数据对象
    146         System.out.println("数据库版本:" + meta.getDatabaseProductVersion());
    147         System.out.println("数据库名:" + meta.getDatabaseProductName());
    148         System.out.println("数据库版本:" + meta.getDriverVersion());
    149         System.out.println("数据库驱动名:" + meta.getDriverName());
    150         
    151         
    152         ResultSetMetaData rsmeta = (ResultSetMetaData) rs.getMetaData();//得到结果集数据对象
    153         
    154         System.out.println("字段个数:"+rsmeta.getColumnCount());
    155         
    156         for(int i = 1;i<=rsmeta.getColumnCount();i++){
    157             System.out.println("字段名字:"+rsmeta.getColumnName(i));//从1开始  注意
    158             System.out.println("字段JDBC类型:"+rsmeta.getColumnType(i));
    159             System.out.println("字段数据库类型:"+rsmeta.getColumnTypeName(i));
    160         }
    161         
    162         meta.close();
    163         rsmeta.close();
    164         rs.close(); 
    165         stm.clost(); 
    166         pstm.close(); 
    167         con.close(); //关闭连接
    168         
    169         //依次将DatabaseMetaData、ResultSetMetaData、
    170         //      ResultSet、Statement、PreparedStatement、Connection对象关闭,释放所占用的资源
    171         
    172         //执行存储过程就不演示了。具体找度娘
    173     }
    174     
    175     /*
    176     *5.事务
    177     */
    178     public static void demoTransation(){
    179         //事务:就是一组操作数据库的动作集合
    180         //其中事务必须服从ACID原则
    181         //    1.原子性(atomicity)————表示事务执行过程中的任何失败都将导致事务所做的任何修改失效
    182         //    2.一致性(consistency)————当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态
    183         //    3.隔离性 (isolation)————隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见
    184         //    4.持久性(durability)————持久性表示当系统或介质发生故障时,确保已提交事务的更新不能丢失
    185         
    186         //JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。 
    187         //java.sql.Connection 提供了以下控制事务的方法: 
    188         //    public void setAutoCommit(boolean) 
    189         //    public boolean getAutoCommit() 
    190         //    public void commit() 
    191         //    public void rollback() 
    192         
    193         //推荐前台调用存储过程,在后台的存储过程里面实现事务即可。不要将事务放在前台执行
    194         //注意:JDBC事务的范围局限于一个数据库连接,不能跨越多个数据库
    195     }
    196     
    197     /*
    198     *6.连接池
    199     */
    200     public static void demoConnectionPool(){
    201         //数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,
    202         //只需从“缓冲池”中取出一个,使用完毕之后再放回去
    203         
    204         
    205     }
    206     /*部分资料参考于博客:http://blog.csdn.net/hu_shengyang/article/details/6290029
    207                           http://blog.csdn.net/csh624366188/article/details/7305672/
    208                           http://www.blogjava.net/chunkyo/archive/2007/01/16/94266.html
    209     */
    210 }
  • 相关阅读:
    【转】Visual studio 快捷键大全
    C++ 中的权限控制
    论C++11 中vector的N种遍历方法
    c++ 模板仿函数初探
    OBS (open boardcast server)结构分析
    OpenCV学习笔记:opencv_core模块
    [转]C++ new操作符详解
    进程已经被attach debug,如何解除其debug权限?
    dll 在进程中怎么区分的
    树状数组学习笔记
  • 原文地址:https://www.cnblogs.com/ciade/p/4775842.html
Copyright © 2011-2022 走看看