jdbc基础

2012/04/06 1827点热度 0人点赞 0条评论

数据持久化

       持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。

       持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。

 Java 中的数据存储技术

     1) JDBC直接访问数据库

     2) 第三方O/R工具,如Hibernate, ibatis 等

     注:JDBC是java访问数据库的基石,其他技术都是对jdbc的封装

 什么是JDBC

    1)  是一组接口(api),接口的实现由各个数据库厂商实现

    2)  是sun提出的连接数据库的规范

    3)  是java连接数据库的抽象层

ODBC(Open Database Connectivity,开放数据库连接)

   是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API

JDBC分类

     1) JDBC-ODBC桥:桥接器型驱动程序

     2)  部分本地api部分java的驱动程序,也是桥接器型驱动程序

     3)  JDBC网络纯java驱动程序

     4)  本地协议的纯java驱动程序

JDBC API接口

JDBC连接数据库注册驱动的方法

//连接数据库的驱动和
//oracle的
  String url="jdbc:oracle:thin:@localhost:1521:orcl"
  className="oracle.jdbc.driver.oracleDriver"
//mysql的
  String url="jdbc:mysql://localhost:3306/test"
  Properties info=new Properties();
  info.setProperty("user","root");
  info.setProperty("password","123456");     
// 方法一:
  java.sql.Driver driver=new com.mysql.jdbc.Driver();  
  Connection conn=driver.connect();
                                                                                                                   
//方法二:注册驱动
  DriverMananger.registerDriver(new com.mysql.jdbc.Driver());       
  Connection conn=DriverManager.getConnection(url,info);
                                                                                                               
//方法三:class.forName方式
  Class.forName("com.mysql.jdbc.Driver");
  Connection conn=DriverManager.getConnection(url,"root","123456");

Statment操作数据库步骤

   (安全性较低,容易通过sql注入暴库,或者登录)

 如: username='a'  or 1=1 or 1=''

 1,注册驱动

Class.forName("com.mysql.jdbc.Driver");

 2,获取连接

 DriverManager 是驱动程序管理类

       url: jdbc:mysql://localhost:3306/test

         * jdbc:连接数据库使用的是jdbc协议

         * mysql:子协议,该协议随着数据库的变化而变化

         * localhost:3306/tet: 定位到数据库

         * localhost: 数据库服务器所在的ip地址

         * 3306:数据库服务器监听的端口号

         * test: 连接的数据库的名称

String url="jdbc:mysql://localhost:3306/test";
Connection  conn=DriverManager.getConnection(url,user,password);

 3,创建statement对象

Statement  stmt=conn.createStatement();

 4, 执行sql语句

stmt.executeUpdate(sql);

       * 该方法执行insert udpate delete 这些DML语句,返回影响的行

       * 该方法执行 create drop alter 这些DDL语句,返回0

 5, 释放资源  

finally{//最好每个需要关闭的资源都try一下
   if(stmt!=null){
      stmt.close();
   }
   if(conn!=null){
      stmt.close();
   }
}

PreparedStatement操作数据库步骤

  * PreparedStatement 能最大可能提高性能:预编译语句有可能被重复调用

  * PreparedStatement能保证安全性

  1,获取连接    

Connection  conn=DriverManager.getConnection(url,user,password);

 2, 组织带占位符?号的sql语句      

String sql="update person set name=?,email=? where id=? ";

 3, 创建一个PreparedStatement对来来预编译sql

PreparedStatement pstmt=conn.prepareStatement(sql);

4,设置占位符?的值  

pstmt.setString(1, "yxkong");
pstmt.setString(2, "fishingsky@qq.com");
pstmt.setInt(3, 4);

   * setXxx(index,value)

   *Xxx数据库表中的字段对应java的数据类型

   *参数1:占位符?的索引,从1开始

   *参数2: 对应的1的值

5,执行

pstmt.executeUpdate();

    *执行DML语句,返回值大于0

    *执行DDL 返回值=0

6,释放资源

CallabelStatement操作数据库步骤

    1,注册连接

Connection  conn=DriverManager.getConnection(url,user,password);

    2,调用存储过程的sql

String sql = "{call add_stu(?,?,?,?)}";

    3,创建一个CallableStatement 来对存储过程预编译

CallableStatement stmt = conn.prepareCall(sql);

     4,给占位符?赋值

pstmt.setString(1, "yxkong");
pstmt.setString(2, "fishingsky@qq.com");
pstmt.setInt(3, 4);

    5,执行

stmt.execute();

   6.释放资源

yxkong

这个人很懒,什么都没留下

文章评论