JDBC基礎知識匯總

honghu79 13年前發布 | 2K 次閱讀 Apache Lucene google應用商城
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 工具對屬性文件和其他字符編碼進行相互轉換。
 
 
 本文由用戶 honghu79 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!