在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的速度好像是最快的。只是比較麻煩了。