第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 }

 

posted @ 2015-09-01 15:32  ciade  阅读(201)  评论(0编辑  收藏  举报