JDBC基础知识汇总

13年前
java对数据库的操作--JDBC
 JDBC是一种用于执行sql语句的java api,可以为多种关系数据库提供统一的访问,它由一组用java语言编写的类
 和接口组成。
 JDBC有2部分组成,第一部分是供程序员调用的API,另一部分是需要数据库厂商实现的SPI,也就是驱动程序
 
1、JDBC操作数据库的编程步骤:
 第一步注册驱动程序;
   把驱动程序类加载到jvm中,使得驱动管理器DriverManager能够找到驱动程序,一般通过Class加载
 Class.forName("数据库驱动程序完成类名");
 第二步获取一个数据库连接
   java.sql.Connection接口代表的是一个数据库连接,它通过驱动管理器来建立连接,并返回一个Connection
   接口的实现。需要提供url,ip,port,username,password等信息
 Connection conn=DriverManager.getConnection("url","username","password");
 第三步创建一个会话
   JDBC的会话Statement主要是用于向数据库发送SQL命令,并返回执行后的结果,它由连接Connection生成。
 Statement stmt=conn.createStatement();
 PreparedStatement ps=Conn.CreateStatement();
 第四步执行sql语句,完成增删改查
   
 stmt.executeUpdate("增加删除修改记录的SQL语句");----执行以后返回的是影响到的行数。
 或者查询记录
 stmt.executeQuery("查询记录的sql语句");
 第五步对查询的结果进行处理
 while (rs.next()){
  //对纪录的操作
 
 }
 第六步关闭连接
 rs.close();
 stmt.close();
 conn.close();
2、JDBC的事务
 事务:ACID原子性一致性隔离性和持久性
 事务的结束:提交或者回滚
 JDBC的事务主要在代码中控制的
 操作完全成功则提交,产生永久性的修改;操作不完全成功则回滚,恢复事务到事务开始前的状态。
 a、关闭自动提交事务。通过设置连接的自动提交事务属性为false.
  Connection conn=DriverManager.getConnection("url","username","password");
  conn.setAutoCommit(false);
 b、捕获try catch执行代码。
  try{
   conn.setAutoCommit(false);
   stmt=conn.createStatement();
   stmt.executeUpdate("sql");
   conn.commit();
  }catch(Exception e){
   e.printStackTrace();
   conn.rollback();
  }
 c、关闭连接,该步骤最好放置在finally块中
  finally{
   //if (rs!=null) rs.close();
   if (stmt!=null) stmt.close();
   if (conn!=null) conn.close();
  }
 
3、JDBC操作各种数据库
 mysql:
   url:    jdbc:mysql://*.*.*.*:3306/dbname
   类名:  com.mysql.jdbc.Driver
   
 MSSQL:
  url:     jdbc:microsoft:sqlserver://*.*.*.*:1433;DatabaseName=<db>
  类名:   com.microsoft.jdbc.sqlserver.SQLServer-Driver
 Access: 通过jdbc-odbc,把access加入到odbc的数据源
  url: jdbc:odbc:<alias>
  类名:   sun.jdbc.odbc.JdbcOdbcDriver
 Excel
  url: jdbc:odbc:<alias>
  类名: sun.jdbc.odbc.JdbcOdbcDriver
 Oracle:
  url: jdbc:oracle:thin:@*.*.*.*:1521:dbname
  类名: oracle.jdbc.driver.OracleDriver
4、 SELECT <列名>
 FROM <table/view>
 where <筛选条件>
 ORDER BY<列名><ASC/DESC>
 
5、INSERT| UPDATE |DELETE更改数据
 INSERT语句用来插入数据,可以插入完整的行,插入行的一部分,也可以插入某些查询的结果
 INSERT INTO USER
 VALUES(‘ZHANGSAN’,40,‘MALE’);
 
 INSERT INTO USER
 VALUE(‘LISI’,30);
 
 INSERT INTO USERCOPY
 SELECT *
 FROM USER;
 
 UPDATE语句是对表格中的复合条件的行的某个或某些列的数据进行修改,把需要修改的列名及其值放在set关键字后面
 多个列修改用,隔开
 
 UPDATE USER
 SET GENDER=‘MALE’
 
 UPDATE USER
 SET CLASS=2
 WHERE NAME="LISI"
 
 DELETE语句
 DELETE FROM USER
 WHERE NAME=‘LISI’
 
6、使用JDBC实现数据访问对象层
 
 JAVA是面向对象的语言,DAO层需要做的就是为上层提供充分的对象支持,让上层再也看不到具体的数据,而是对象
 
 增删改查是DAO需要做的最基本的4项操作。查询一般需要提供遍历查询和id查询,对于遍历查询需要提供泛型的list
 对象,对于Id查询则提供已经装配好数据的对象。至于增加和修改操作,上层一般会提供一个对象,DAO把对象中
 的数据使用INSERT语句插入到表格中。删除操作则只需要提供一个Id即可。
 
 class User{
  private long id;
  private String name;
  
 }
 public User(){
 }
 public User(long id,String name){
  super();
  this.id=id;
  this.name=name;
  
 }
 //setter和getter方法省略
 
 //DAO类
 public class JDBCDao{
  static{
   try{
    Class.forName("com.mysql.jdbc.Driver");
    
   }catch(ClassNotFoundException e){
    e.printStackTrace();
   }
   
  }
  
  private Connection getConnection(){
   try{
    return DriverManager.getConnection(url,user,password);
   }catch(SQLException e){
    e.printStackTrace();
   }
   return null;
    
  }
  
  private void release(ResultSet rs,Statement ps,Connection conn){
   if (rs!=null){
    try{
    rs.close();
    }catch(SQLException e){
     e.printStackTrace();
    }
   }
   if (ps!=null){
    try{
    ps.close();
    }catch(SQLException e){
     e.printStackTrace();
    }
   }
   if (conn!=null){
    try{
    conn.close();
    }catch(SQLException e){
     e.printStackTrace();
    }
   }
  
  }
 
 //用Id获取用户对象
 public User getUserById(long id){
  ResultSet rs=null;
  PreparedStatement ps=null;
  Connection conn=null;
  String sql="select * from user where id=?";
  
  try{
   conn=this.getConnection();
   ps=conn.prepareStatement(sql);
   ps.setLong(1,id);
   rs=ps.executeQuery();
   if (rs.next()){
    User user=new User(rs.getLong("id"),rs.getString("name"));
    return user;
   
   }
  }catch (Exception e){
   e.printStackTrace();
  }finally{
   this.release(rs,ps,conn);
  }
  
  return null;
 
 
 }
 
 public List<user>  getAllUser(){
  List <user> list=new ArrayList<User>();
  ResultSet rs=null;
  PreparedStatement ps=null;
  Connection conn=null;
  String sql="select * from user";
 
  try{
   conn=this.getConnection();
   ps=conn.prepareStatement(sql);
   rs=ps.executeQuery();
   //循环添加用户对象
   while (rs.next()){
    User user=new User(rs.getLong("id"),rs.getString("name"));
    list.add(user);
   
   }
  }catch (Exception e){
   e.printStackTrace();
  }finally{
   this.release(rs,ps,conn);
  }
  
  return list;
 }
 
 
 
 //修改用户数据
 public User updateUser(User user){
  PreparedStatement ps=null;
  Connection conn=null;
  String sql="update user set id=?,name=?";
  try{
   conn=this.getConnection();
   conn.setAutoCommit(false);
   
   ps=conn.prepareStatement(sql);
   ps.setLong(1,user.getId());
   ps.setString(2,user.getName());
   
   int rst=ps.executeUpdate();
   
   if (rst>0){
    return user;
   }
   
   conn.commit();
   
  }catch(Exception e){
   e.printStackTrace();
   try{
    conn.rollback();
   }catch(SQLException e1){
    e1.printStackTrace();
   }
  
  }finally{
   this.release(null,ps,conn);
  }
  return null;
 
 }
 
 //根据Id删除用户
 public boolean deleteUser(long id){
  PreparedStatement ps=null;
  Connection conn=null;
  String sql="delete from user where id=?";
  try{
   conn=this.getConnection();
   conn.setAutoCommit(false);
   
   ps=conn.prepareStatement(sql);
   ps.setLong(1,id);
   ;
   
   int rst=ps.executeUpdate();
   
   if (rst>0){
    return true;
   }
   
   conn.commit();
   
  }catch(Exception e){
   e.printStackTrace();
   try{
    conn.rollback();
   }catch(SQLException e1){
    e1.printStackTrace();
   }
  
  }finally{
   this.release(null,ps,conn);
  }
  return false;
  
 }
 
 //插入用户数据
 
 public User insertUser(User user){
  PreparedStatement ps=null;
  Connection conn=null;
  String sql="insert into user value(?,?,?)";
  try{
   conn=this.getConnection();
   conn.setAutoCommit(false);
   
   ps=conn.prepareStatement(sql);
   ps.setLong(1,user.getId());
   
   ps.setString(2,user.getName());
   
   int rst=ps.executeUpdate();
   
   if (rst>0){
    return new User(user.getId(),user.getName());
   }
   
   conn.commit();
   
  }catch(Exception e){
   e.printStackTrace();
   try{
    conn.rollback();
   }catch(SQLException e1){
    e1.printStackTrace();
   }
  
  }finally{
   this.release(null,ps,conn);
  }
  return null;
  
  
 }
 
 
 }
 
7、连接池技术
 数据库连接池是作为一个单独的程序模块运行,由它来维护连接,程序员可以通过配置来控制它的属性。
 必须实现javax.sql.DataSource接口
 jdbc通过驱动管理器DriverManager来获取连接,而连接池则需要用数据源DataSource来获取

 //创建JNDI初始化上下文对象
 InitialContext cxt=new InitialContext();
 //通过JNDI上下文获取数据源
 DataSource ds=(DataSource) cxt.lookup("数据源在JNDI上的路径");
 //通过数据源获取到对象 
 Connection conn=ds.getConnection();
 
8、可滚动的结果集
 
 boolean absolute(int row)
          将光标移动到此 ResultSet 对象的给定行编号。
  void afterLast()
          将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后。
  void beforeFirst()
          将光标移动到此 ResultSet 对象的开头,正好位于第一行之前。
  void cancelRowUpdates()
          取消对 ResultSet 对象中的当前行所作的更新。
  void clearWarnings()
          清除在此 ResultSet 对象上报告的所有警告。
  void close()
          立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
  void deleteRow()
          从此 ResultSet 对象和底层数据库中删除当前行。
  int findColumn(String columnLabel)
          将给定的 ResultSet 列标签映射到其 ResultSet 列索引。
  boolean first()
          将光标移动到此 ResultSet 对象的第一行。
  Array getArray(int columnIndex)
          以 Java 编程语言中 Array 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
  Array getArray(String columnLabel)
          以 Java 编程语言中 Array 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 InputStream getAsciiStream(int columnIndex)
          以 ASCII 字符流的形式获取此 ResultSet 对象的当前行中指定列的值。
 InputStream getAsciiStream(String columnLabel)
          以 ASCII 字符流的形式获取此 ResultSet 对象的当前行中指定列的值。
 BigDecimal getBigDecimal(int columnIndex)
          以具有全精度的 java.math.BigDecimal 的形式获取此 ResultSet 对象的当前行中指定列的值。
 BigDecimal getBigDecimal(int columnIndex, int scale)
          已过时。  
 BigDecimal getBigDecimal(String columnLabel)
          以具有全精度的 java.math.BigDecimal 的形式获取此 ResultSet 对象的当前行中指定列的值。
 BigDecimal getBigDecimal(String columnLabel, int scale)
          已过时。  
 InputStream getBinaryStream(int columnIndex)
          以未解释字节的流的形式获取此 ResultSet 对象的当前行中指定列的值。
 InputStream getBinaryStream(String columnLabel)
          以未解释的 byte 流的形式获取此 ResultSet 对象的当前行中指定列的值。
 Blob getBlob(int columnIndex)
          以 Java 编程语言中 Blob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Blob getBlob(String columnLabel)
          以 Java 编程语言中 Blob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 boolean getBoolean(int columnIndex)
          以 Java 编程语言中 boolean 的形式获取此 ResultSet 对象的当前行中指定列的值。
 boolean getBoolean(String columnLabel)
          以 Java 编程语言中 boolean 的形式获取此 ResultSet 对象的当前行中指定列的值。
 byte getByte(int columnIndex)
          以 Java 编程语言中 byte 的形式获取此 ResultSet 对象的当前行中指定列的值。
 byte getByte(String columnLabel)
          以 Java 编程语言中 byte 的形式获取此 ResultSet 对象的当前行中指定列的值。
 byte[] getBytes(int columnIndex)
          以 Java 编程语言中 byte 数组的形式获取此 ResultSet 对象的当前行中指定列的值。
 byte[] getBytes(String columnLabel)
          以 Java 编程语言中 byte 数组的形式获取此 ResultSet 对象的当前行中指定列的值。
 Reader getCharacterStream(int columnIndex)
          以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Reader getCharacterStream(String columnLabel)
          以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Clob getClob(int columnIndex)
          以 Java 编程语言中 Clob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Clob getClob(String columnLabel)
          以 Java 编程语言中 Clob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getConcurrency()
          获取此 ResultSet 对象的并发模式。
 String getCursorName()
          获取此 ResultSet 对象使用的 SQL 光标的名称。
 Date getDate(int columnIndex)
          以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Date getDate(int columnIndex, Calendar cal)
          以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Date getDate(String columnLabel)
          以 Java 编程语言中的 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Date getDate(String columnLabel, Calendar cal)
          以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 double getDouble(int columnIndex)
          以 Java 编程语言中 double 的形式获取此 ResultSet 对象的当前行中指定列的值。
 double getDouble(String columnLabel)
          以 Java 编程语言中 double 的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getFetchDirection()
          获取此 ResultSet 对象的获取方向。
 int getFetchSize()
          获取此 ResultSet 对象的获取大小。
 float getFloat(int columnIndex)
          以 Java 编程语言中 float 的形式获取此 ResultSet 对象的当前行中指定列的值。
 float getFloat(String columnLabel)
          以 Java 编程语言中 float 的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getHoldability()
          获取此 ResultSet 对象的可保存性
 int getInt(int columnIndex)
          以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getInt(String columnLabel)
          以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
 long getLong(int columnIndex)
          以 Java 编程语言中 long 的形式获取此 ResultSet 对象的当前行中指定列的值。
 long getLong(String columnLabel)
          以 Java 编程语言中 long 的形式获取此 ResultSet 对象的当前行中指定列的值。
 ResultSetMetaData getMetaData()
          获取此 ResultSet 对象的列的编号、类型和属性。
 Reader getNCharacterStream(int columnIndex)
          以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Reader getNCharacterStream(String columnLabel)
          以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 NClob getNClob(int columnIndex)
          以 Java 编程语言中 NClob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 NClob getNClob(String columnLabel)
          以 Java 编程语言中 NClob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 String getNString(int columnIndex)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
 String getNString(String columnLabel)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Object getObject(int columnIndex)
          以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Object getObject(int columnIndex, Map<String,Class<?>> map)
          以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Object getObject(String columnLabel)
          以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Object getObject(String columnLabel, Map<String,Class<?>> map)
          以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Ref getRef(int columnIndex)
          以 Java 编程语言中 Ref 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Ref getRef(String columnLabel)
          以 Java 编程语言中 Ref 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getRow()
          获取当前行编号。
 RowId getRowId(int columnIndex)
          以 Java 编程语言中 java.sql.RowId 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 RowId getRowId(String columnLabel)
          以 Java 编程语言中 java.sql.RowId 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 short getShort(int columnIndex)
          以 Java 编程语言中 short 的形式获取此 ResultSet 对象的当前行中指定列的值。
 short getShort(String columnLabel)
          以 Java 编程语言中 short 的形式获取此 ResultSet 对象的当前行中指定列的值。
 SQLXML getSQLXML(int columnIndex)
          以 Java 编程语言中 java.sql.SQLXML 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 SQLXML getSQLXML(String columnLabel)
          以 Java 编程语言中 java.sql.SQLXML 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Statement getStatement()
          获取生成此 ResultSet 对象的 Statement 对象。
 String getString(int columnIndex)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
 String getString(String columnLabel)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
 Time getTime(int columnIndex)
          以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Time getTime(int columnIndex, Calendar cal)
          以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Time getTime(String columnLabel)
          以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Time getTime(String columnLabel, Calendar cal)
          以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Timestamp getTimestamp(int columnIndex)
          以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Timestamp getTimestamp(int columnIndex, Calendar cal)
          以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Timestamp getTimestamp(String columnLabel)
          以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 Timestamp getTimestamp(String columnLabel, Calendar cal)
          以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 int getType()
          获取此 ResultSet 对象的类型。
 InputStream getUnicodeStream(int columnIndex)
          已过时。 使用 getCharacterStream 取代 getUnicodeStream
 InputStream getUnicodeStream(String columnLabel)
          已过时。 使用 getCharacterStream 代替
 URL getURL(int columnIndex)
          以 Java 编程语言中 java.net.URL 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 URL getURL(String columnLabel)
          以 Java 编程语言中 java.net.URL 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
 SQLWarning getWarnings()
          获取此 ResultSet 对象上的调用报告的第一个警告。
 void insertRow()
          将插入行的内容插入到此 ResultSet 对象和数据库中。
 boolean isAfterLast()
          获取光标是否位于此 ResultSet 对象的最后一行之后。
 boolean isBeforeFirst()
          获取光标是否位于此 ResultSet 对象的第一行之前。
 boolean isClosed()
          获取此 ResultSet 对象是否已关闭。
 boolean isFirst()
          获取光标是否位于此 ResultSet 对象的第一行。
 boolean isLast()
          获取光标是否位于此 ResultSet 对象的最后一行。
 boolean last()
          将光标移动到此 ResultSet 对象的最后一行。
 void moveToCurrentRow()
          将光标移动到记住的光标位置,通常为当前行。
 void moveToInsertRow()
          将光标移动到插入行。
 boolean next()
          将光标从当前位置向前移一行。
 boolean previous()
          将光标移动到此 ResultSet 对象的上一行。
 void refreshRow()
          用数据库中的最近值刷新当前行。
 boolean relative(int rows)
          按相对行数(或正或负)移动光标。
 boolean rowDeleted()
          获取是否已删除某行。
 boolean rowInserted()
          获取当前行是否已有插入。
 boolean rowUpdated()
          获取是否已更新当前行。
 void setFetchDirection(int direction)
          设置此 ResultSet 对象中行的处理方向。
 void setFetchSize(int rows)
          为 JDBC 驱动程序设置此 ResultSet 对象需要更多行时应该从数据库获取的行数。
 void updateArray(int columnIndex, Array x)
          用 java.sql.Array 值更新指定列。
 void updateArray(String columnLabel, Array x)
          用 java.sql.Array 值更新指定列。
 void updateAsciiStream(int columnIndex, InputStream x)
          用 ascii 流值更新指定的列。
 void updateAsciiStream(int columnIndex, InputStream x, int length)
          用 ascii 流值更新指定列,该列将具有指定字节数。
 void updateAsciiStream(int columnIndex, InputStream x, long length)
          用 ascii 流值更新指定的列,该值将具有指定的字节数。
 void updateAsciiStream(String columnLabel, InputStream x)
          用 ascii 流值更新指定列。
 void updateAsciiStream(String columnLabel, InputStream x, int length)
          用 ascii 流值更新指定列,该列具有指定的字节数。
 void updateAsciiStream(String columnLabel, InputStream x, long length)
          用 ascii 流值更新指定的列,该值将具有指定的字节数。
 void updateBigDecimal(int columnIndex, BigDecimal x)
          用 java.math.BigDecimal 值更新指定列。
 void updateBigDecimal(String columnLabel, BigDecimal x)
          用 java.sql.BigDecimal 值更新指定列。
 void updateBinaryStream(int columnIndex, InputStream x)
          用二进制流值更新指定的列。
 void updateBinaryStream(int columnIndex, InputStream x, int length)
          用二进制流值更新指定列,该列将具有指定字节数。
 void updateBinaryStream(int columnIndex, InputStream x, long length)
          用二进制流值更新指定的列,该值将具有指定的字节数。
 void updateBinaryStream(String columnLabel, InputStream x)
          用二进制流值更新指定列。
 void updateBinaryStream(String columnLabel, InputStream x, int length)
          用二进制流值更新指定列,该列具有指定的字节数。
 void updateBinaryStream(String columnLabel, InputStream x, long length)
          用二进制流值更新指定的列,该值将具有指定的字节数。
 void updateBlob(int columnIndex, Blob x)
          用 java.sql.Blob 值更新指定列。
 void updateBlob(int columnIndex, InputStream inputStream)
          使用给定输入流值更新指定列。
 void updateBlob(int columnIndex, InputStream inputStream, long length)
          使用给定输入流更新指定的列,该流将具有指定的字节数。
 void updateBlob(String columnLabel, Blob x)
          用 java.sql.Blob 值更新指定列。
 void updateBlob(String columnLabel, InputStream inputStream)
          使用给定输入流值更新指定列。
 void updateBlob(String columnLabel, InputStream inputStream, long length)
          使用给定输入流更新指定列,该流将具有指定的字节数。
 void updateBoolean(int columnIndex, boolean x)
          用 boolean 值更新指定列。
 void updateBoolean(String columnLabel, boolean x)
          用 boolean 值更新指定列。
 void updateByte(int columnIndex, byte x)
          用 byte 值更新指定列。
 void updateByte(String columnLabel, byte x)
          用 byte 值更新指定列。
 void updateBytes(int columnIndex, byte[] x)
          用 byte 数组值更新指定列。
 void updateBytes(String columnLabel, byte[] x)
          用字节数组值更新指定列。
 void updateCharacterStream(int columnIndex, Reader x)
          用字符流值更新指定的列。
 void updateCharacterStream(int columnIndex, Reader x, int length)
          用字符流值更新指定列,该列将具有指定字节数。
 void updateCharacterStream(int columnIndex, Reader x, long length)
          用字符流值更新指定的列,该值将具有指定的字节数。
 void updateCharacterStream(String columnLabel, Reader reader)
          用字符流值更新指定列。
 void updateCharacterStream(String columnLabel, Reader reader, int length)
          用字符流值更新指定列,该列具有指定的字节数。
 void updateCharacterStream(String columnLabel, Reader reader, long length)
          用字符流值更新指定的列,该值将具有指定的字节数。
 void updateClob(int columnIndex, Clob x)
          用 java.sql.Clob 值更新指定列。
 void updateClob(int columnIndex, Reader reader)
          使用给定的 Reader 对象更新指定列。
 void updateClob(int columnIndex, Reader reader, long length)
          使用给定的 Reader 对象更新指定列,该对象是给定的字符长度数目。
 void updateClob(String columnLabel, Clob x)
          用 java.sql.Clob 值更新指定列。
 void updateClob(String columnLabel, Reader reader)
          使用给定的 Reader 对象更新指定列。
 void updateClob(String columnLabel, Reader reader, long length)
          使用给定的 Reader 对象更新指定列,该对象是给定的字符长度数目。
 void updateDate(int columnIndex, Date x)
          用 java.sql.Date 值更新指定列。
 void updateDate(String columnLabel, Date x)
          用 java.sql.Date 值更新指定列。
 void updateDouble(int columnIndex, double x)
          用 double 值更新指定列。
 void updateDouble(String columnLabel, double x)
          用 double 值更新指定列。
 void updateFloat(int columnIndex, float x)
          用 float 值更新指定列。
 void updateFloat(String columnLabel, float x)
          用 float 值更新指定列。
 void updateInt(int columnIndex, int x)
          用 int 值更新指定列。
 void updateInt(String columnLabel, int x)
          用 int 值更新指定列。
 void updateLong(int columnIndex, long x)
          用 long 值更新指定列。
 void updateLong(String columnLabel, long x)
          用 long 值更新指定列。
 void updateNCharacterStream(int columnIndex, Reader x)
          用字符流值更新指定的列。
 void updateNCharacterStream(int columnIndex, Reader x, long length)
          用字符流值更新指定的列,该值将具有指定的字节数。
 void updateNCharacterStream(String columnLabel, Reader reader)
          用字符流值更新指定的列。
 void updateNCharacterStream(String columnLabel, Reader reader, long length)
          用字符流值更新指定的列,该值将具有指定的字节数。
 void updateNClob(int columnIndex, NClob nClob)
          用 java.sql.NClob 值更新指定的列。
 void updateNClob(int columnIndex, Reader reader)
          使用给定的 Reader 对象更新指定列。
 void updateNClob(int columnIndex, Reader reader, long length)
          使用给定的 Reader 对象更新指定的列,该对象是给定的字符长度数目。
 void updateNClob(String columnLabel, NClob nClob)
          用 java.sql.NClob 值更新指定的列。
 void updateNClob(String columnLabel, Reader reader)
          使用给定的 Reader 对象更新指定列。
 void updateNClob(String columnLabel, Reader reader, long length)
          使用给定的 Reader 对象更新指定的列,该对象是给定的字符长度数目。
 void updateNString(int columnIndex, String nString)
          用 String 值更新指定的列。
 void updateNString(String columnLabel, String nString)
          用 String 值更新指定的列。
 void updateNull(int columnIndex)
          用 null 值更新指定列。
 void updateNull(String columnLabel)
          用 null 值更新指定列。
 void updateObject(int columnIndex, Object x)
          用 Object 值更新指定列。
 void updateObject(int columnIndex, Object x, int scaleOrLength)
          用 Object 值更新指定列。
 void updateObject(String columnLabel, Object x)
          用 Object 值更新指定列。
 void updateObject(String columnLabel, Object x, int scaleOrLength)
          用 Object 值更新指定列。
 void updateRef(int columnIndex, Ref x)
          用 java.sql.Ref 值更新指定列。
 void updateRef(String columnLabel, Ref x)
          用 java.sql.Ref 值更新指定列。
 void updateRow()
          用此 ResultSet 对象的当前行的新内容更新底层数据库。
 void updateRowId(int columnIndex, RowId x)
          用 RowId 值更新指定列。
 void updateRowId(String columnLabel, RowId x)
          用 RowId 值更新指定的列。
 void updateShort(int columnIndex, short x)
          用 short 值更新指定列。
 void updateShort(String columnLabel, short x)
          用 short 值更新指定列。
 void updateSQLXML(int columnIndex, SQLXML xmlObject)
          用 java.sql.SQLXML 值更新指定列。
 void updateSQLXML(String columnLabel, SQLXML xmlObject)
          用 java.sql.SQLXML 值更新指定的列。
 void updateString(int columnIndex, String x)
          用 String 值更新指定列。
 void updateString(String columnLabel, String x)
          用 String 值更新指定列。
 void updateTime(int columnIndex, Time x)
          用 java.sql.Time 值更新指定列。
 void updateTime(String columnLabel, Time x)
          用 java.sql.Time 值更新指定列。
 void updateTimestamp(int columnIndex, Timestamp x)
          用 java.sql.Timestamp 值更新指定列。
 void updateTimestamp(String columnLabel, Timestamp x)
          用 java.sql.Timestamp 值更新指定列。
 boolean wasNull()
          报告最后一个读取的列是否具有值 SQL NULL。

9、java.sql 包中包含用于以下方面的 API:
通过 DriverManager 实用程序建立与数据库的连接
 DriverManager 类:建立与驱动程序的连接
 SQLPermission 类:当代码在 Security Manager(比如 applet)中运行时提供权限,试图通过 DriverManager 设置一个记录流
 Driver 接口:提供用来注册和连接基于 JDBC 技术(“JDBC 驱动程序”)的驱动程序的 API,通常仅由 DriverManager 类使用
 DriverPropertyInfo 类:提供 JDBC 驱动程序的属性,不是供一般用户使用的
向数据库发送 SQL 语句
 Statement:用于发送基本 SQL 语句
 PreparedStatement:用于发送准备好的语句或基本 SQL 语句(派生自 Statement)
 CallableStatement:用于调用数据库存储过程(派生自 PreparedStatement)
 Connection 接口:提供创建语句以及管理连接及其属性的方法
 Savepoint:在事务中提供保存点
获取和更新查询的结果
 ResultSet 接口
 SQL 类型到 Java 编程语言中的类和接口的标准映射关系
  Array 接口:SQL ARRAY 的映射关系
  Blob 接口:SQL BLOB 的映射关系
  Clob 接口:SQL CLOB 的映射关系
 Date 类:SQL DATE 的映射关系
 NClob 接口:SQL NCLOB 的映射关系
 Ref 接口:SQL REF 的映射关系
 RowId 接口:SQL ROWID 的映射关系
 Struct 接口:SQL STRUCT 的映射关系
 SQLXML 接口:SQL XML 的映射关系
 Time 类:SQL TIME 的映射关系
 Timestamp 类:SQL TIMESTAMP 的映射关系
T ypes 类:提供用于 SQL 类型的常量
自定义映射 SQL 用户定义类型 (UDT) 到 Java 编程语言中的类
 SQLData 接口:指定 UDT 到此类的一个实例的映射关系
 SQLInput 接口:提供用来从流中读取 UDT 属性的方法
 SQLOutput 接口:提供用来将 UDT 属性写回流中的方法
元数据
 DatabaseMetaData 接口:提供有关数据库的信息
 ResultSetMetaData 接口:提供有关 ResultSet 对象的列的信息
 ParameterMetaData 接口:提供有关 PreparedStatement 命令的参数的信息
异常
 SQLException:由大多数方法在访问数据出问题时抛出,以及因为其他原因由其他一些方法抛出
 SQLWarning:为了指示一个警告而抛出
 DataTruncation:为了指示数据可能已经被截断而抛出
 BatchUpdateException:为了指示并不是批量更新中的所有命令都成功执行而抛出

11、使用properties导入jdbc,并创建jdbcutil工具类
package com.newxyz.utils;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
 private static String url;
 private static String user;
 private static String password;
 private static String driver;
 
 static{
  try {
   InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
   Properties prop = new Properties();
   prop.load(in);
   //通过配置文件获取到连接数据库的相关信息
   //如driver,url,user,password
   
   driver = prop.getProperty("driver");
   url = prop.getProperty("url");
   user = prop.getProperty("user");
   password= prop.getProperty("password");
   
   Class.forName(driver);
  } catch (Exception e) {
   throw new ExceptionInInitializerError(e);
  }
 }
 
 //获取连接
 public static Connection getConnection(){
  try {
   return DriverManager.getConnection(url, user, password);
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return null;
 }
 
 //释放资源
 public static void release(Connection conn, Statement st, ResultSet rs){
  if(rs != null){
   try {
    rs.close();
   } catch (SQLException e) {
    rs = null;
   }
  }
  if(st != null){
   try {
    st.close();
   } catch (SQLException e) {
    st = null;
   }
  }  
  if(conn != null){
   try {
    conn.close();
   } catch (SQLException e) {
    conn = null;
   }
  }
 }
}
 
 
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。
 因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和 putAll 方法
 setProperty 方法和getProperty方法
 也可使用load(Reader) / store(Writer, String)
 方法按下面所指定的、简单的面向行的格式在基于字符的流中加载和存储属性。
 可以使用 Unicode 转义来编写此编码中无法直接表示的字符;转义序列中只允许单个 'u' 字符。可使用
  native2ascii 工具对属性文件和其他字符编码进行相互转换。