Jdbc的學習,全面總結

在JAVA學習中過程中,當你向數據庫展開進攻的時候,第一個接觸到的就應該是JDBC了。

下面是我當初學習的時候做的一些總結,不好的地方請指出。謝謝!!

一.JDBC連接實例(儘量把程序寫完善)

1.讀驅動
Class.forName()|Class.forName().newInstance()|new DriverName()
實例化時自動向DriverManager註冊,不需顯式調用DriverManager.registerDriver方法

2.連接數據庫
DriverManager.getConnection()
例:
 Class.forName("oracle.jdbc.driver.OracleDriver");
 String url = "jdbc:oracle:thin:@localhost:1521:FOX";
 String user = "scott";
 String password = "tiger";
 Connection conn = DriverManager.getConnection(url, user, password);

3.執行SQL語句
Connection.CreateStatement()
Statement.executeQuery()
Statement.executeQuery()
例: Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("select * from emp");

4.循環返回結果集
while(rs.next()){
 
}

5.顯示數據庫數據
把數據庫各種類型轉換爲JAVA的類型用get***()方法

例:
 while(rs.next()) {
  System.out.print(rs.getInt("EMPNO")+ " ");
  System.out.print(rs.getInt(8)+ " ");
 }
6.關閉資源
調用ResultSet|Statement|Connection 的close()方法
例:
 try {
  if (rs != null) {
   rs.close();
   rs = null;
  }
  if (stmt != null) {
   stmt.close();
   stmt = null;
  }
  if (conn != null) {
   conn.close();
   conn = null;
  }
 } catch (SQLException e) {
  e.printStackTrace();  
   }

二.JDBC進階

1.prepareStatement接口--是Statement的子接口
可以再方便的書寫SQL語句,用問號替換字段變量。

String sql = "insert into dept values (?,?,?)";
prepareStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,deptno);
pstmt.setString(2,dname);
pstmt.setString(3, loc);

pstmt.executeUpdate();

2.JDBC調用存儲過程--用CallableStatement接口
繼承來自Statement和prepareStatement接口

String sql = "{call p(?, ?, ?, ?)}";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);

cstmt.execute();
System.out.println(cstmt.getInt(3));

3.JDBC批處理--用prepareStatement接口的addBatch();

String sql = "insert into dept values (?,?,?)";
prepareStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,87);
pstmt.setString(2,'haha');
pstmt.setString(3,'bj');
pstmt.addBatch();

pstmt.executeBatch();
pstmt.close();

4.JDBC處理Transaction
保證同時有效性。
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (51, 'GAME', 'FZ'));
...
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);

}catch(SQLException e) {
 e.printStackTrace();
 try{
  if(conn != null)
  {
   conn.rollback();
   conn.setAutoCommit(true);
  }
 }catch(){}
}

5.JDBC處理可以滾動的結果集
設置對滾動敏感不、只讀
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("select * from emp order by sal");
rs.next();
System.out.println(rs.getInt(1)); //打印當前字段
rs.last(); //最後一條
System.out.println(rs.getString(1));
System.out.println(rs.isLast()); //是否爲最後一條
System.out.println(rs.isAfterLast()); //是否爲最後一條的下一條
System.out.println(rs.getRow()); //打印當前是第幾條
rs.previous(); //滾動到前一條
rs.absolute(6); //滾動到第六條
System.out.println(rs.getString(1));
rs.close();

6.JDBC處理可更新的結果集 (不過有些數據庫不支持像Oracle)
設置對滾動敏感不、可更新
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("select * from emp2");
rs.next();
//更新一行
rs.updateString("ename","AAAA");
rs.updateRow();

//插入新行
rs.moveToInsertRow();
rs.updateString("ename","AAA");
rs.updateInt("mgr",7893);
rs.insertRow();
//光標移到新建的行
rs.moveToCurrentRow();
//刪除行
rs.absolute(5);
rs.deleteRow();

//取消更新
rs.cancelRowUpdate();

7.JDBC新增加接口
1).DataSource
DriverManager的替代,可以方便實現連接池和分佈式(屬性可以動態改變)。

2).RowSet
新的ResultSet
從ResultSet繼承
支持斷開的結果集
支持JavaBean標準,可以保持連接


三.JDBC連接池
1.啓動Tomcat服務器,打開瀏覽器,輸入http://localhost:8080/admin/ 登陸到管理界面,

選擇Resources-Data sources進入配置數據源界面,選擇Data Source Actions ->選擇Create New Data Source,進入配置詳細信息界面,內容如下:

JNDI Name: jdbc/mysql
Data Source URL: jdbc:mysql://192.168.0.16/SUBRDB
JDBC Driver Class: com.jdbc.mysql.Driver
User Name: root
Password: ****
Max. Active Connections: 4
Max. Idle Connections: 2
Max. Wait for Connection: 500
Validation Query:

要求輸入的JNDI Name等信息,其中除了JDBC DriverClass之外,其他的可以根據你的需要填寫。比如Data Source URL的內容可能是:jdbc:mysql:// IP或是名稱/DataBaseName,其中DataBaseName是你的數據庫名稱,IP是你的數據庫的所在的服務器的IP或是名稱。最後點擊Save->Commit Change.這樣你的數據源的基本資料配置一半了。

2、 web.xml和%TOMCAT_HOME%/conf/Catalina/localhost下對應你的引用的配置文件修改

通過文件夾導航到%TOMCAT_HOME%/conf,打開web.xml,在</web-app>的前面添加以下內容:

<resource-ref>

<description>DB Connection</description>

<res-ref-name>jdbc/mysql</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>


注意res-ref-name填寫的內容要與在上文提到的JNDI Name名稱一致。

通過文件夾導航到%TOMCAT_HOME%/conf/Catalina/localhost下,找到你的web應用對應的.xml文件,如 ROOT.xml,並在此文件的下添入代碼:

<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSourcer"/>

到這裏,配置工作就基本完成了。

3.測試代碼節選

<%
   out.print("我的測試開始");
   DataSource ds = null;
   try{

   InitialContext ctx=new InitialContext();
   ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
   Connection conn = ds.getConnection();
   Statement stmt = conn.createStatement();
   String strSql = " select * from users";
   ResultSet rs = stmt.executeQuery(strSql);
  
  while(rs.next()){
      out.print(rs.getString(1));                
     }
  }catch(....)

%>

總結:差不多到這裏了。。感覺挺詳細的。

現在都很少用這個了。都是用連接池,用Hibernate整合了。不過這個是最底層的吧。學了好處還是大大的有的。

 JDBC的速度好像是最快的。只是比較麻煩了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章