JDBC數據庫編程
來源:程序員人生 發布時間:2014-12-18 08:41:18 閱讀次數:4287次
***********************************************聲明******************************************************
原創作品,出自 “曉風殘月xj” 博客,歡迎轉載,轉載時請務必注明出處(http://blog.csdn.net/xiaofengcanyuexj)。
由于各種緣由,可能存在諸多不足,歡迎斧正!
*********************************************************************************************************
最近在自學MySQL數據庫,同時將來職場上的開發語言為Java,所以就嘗試在eclipse環境下寫個小的事務處理的數據庫程序。在這里談談Java MySQL數據庫利用程序的開發。首先應當在本地機器上安裝MySQL數據庫,具體安裝進程見新手上路中提供的鏈接;然后最好安裝輔助的可視化工具:HeidiSQL,具體進程見HeidiSQL文中提供的鏈接。然互就是MySQL
JDBC驅動的安裝了,在這里提供1個鏈接:MySQL JDBC驅動 。
依照上述的步驟,剩下的就是利用程序的編寫,JDBC編程中相干流程是通用的,應當側重看看,在此我談談我的理解。
JDBC: Java database connection。JDBC是1組編程接口,數據庫系統的底層開發者實現接口,Java開發者調用JDBC提供的接口進行與數據庫的創建、鏈接、更新等操作。JDBC提供兩種API,分別是面向開發人員的API和面向底層的JDBC驅動程序API,底層主要通過直接的JDBC驅動和JDBC-ODBC橋驅動實現與數據庫的連接。
1)、加載數據庫驅動程序;
Class.forName(driver)//此處driver指驅動的路徑
2)、建立數據庫連接;
Connection con = DriverManager.getConnection(url, user, password);//以特定的用戶訪問指定的
數據庫
3)、操作數據庫,履行SQL語句;
4)、斷開數據庫連接。
下面轉1段介紹, 完全java開發中JDBC連接數據庫代碼和步驟,在此表示感謝:
1、加載JDBC驅動程序:
在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機),這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//加載
MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,加載驅動失??!");
e.printStackTrace() ;
}
成功加載后,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
連接URL定義了連接數據庫時的協議、子協議、數據源標識。書寫情勢:協議:子協議:數據源標識;協議:在JDBC中總是以jdbc開始;子協議:是橋連接的驅動程序或是數據庫管理系統名稱;數據源標識:標記找到數據庫來源的地址與連接端口。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字符集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字符編碼方式。
3、創建數據庫的連接
要連接數據庫,需要向java.sql.DriverManager要求并取得Connection對象,該對象就代表1個數據庫的連接。使用DriverManager的getConnectin(String url,String username,String password )方法傳入指定的欲連接的數據庫的路徑、數據庫的用戶名和密碼來取得。
例如:
//連接
MySql數據庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("
數據庫連接失??!");
se.printStackTrace() ;
}
4、創建1個Statement
要履行SQL語句,必須取得java.sql.Statement實例,Statement實例分為以下3種類型:
1)、履行靜態SQL語句。通常通過Statement實例實現。
2)、履行動態SQL語句。通常通過PreparedStatement實例實現。
3)、履行數據庫存儲進程。通常通過CallableStatement實例實現。
具體的實現方式: Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
5、履行SQL語句
Statement接口提供了3種履行SQL語句的方法:executeQuery 、executeUpdate和execute
1)、ResultSet executeQuery(String sqlString):履行查詢數據庫的SQL語句,返回1個結果集(ResultSet)對象。
2)、int executeUpdate(String sqlString):用于履行INSERT、UPDATE或DELETE語句和SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3)、execute(sqlString):用于履行返回多個結果集、多個更新計數或2者組合的語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1)、履行更新返回的是本次操作影響到的記錄數。
2)、履行查詢返回的結果是1個ResultSet對象。
ResultSet包括符合SQL語句中條件的所有行,并且它通過1套get方法提供了對這些行中數據的訪問。使用結果集(ResultSet)對象的訪問方法獲得數據: while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比較高效
}
(列是從左到右編號的,并且從列1開始)
7、關閉JDBC對象
操作完成以后要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:
1)、關閉記錄集
2)、關閉聲明
3)、關閉連接對象-數據庫
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
上面那段文字介紹的挺好的,還有我自己也是初學,就直接轉載了,在此表示感謝!下面貼上我的1段入門級代碼,要畢業了,馬上要工作了,想多接觸1點工作上可能用得到的JDBC數據庫開發,有無時間寫個很大的項目,所以就只是描寫1下大致流程,見笑了!
import java.sql.*;
public class JDBCDemo {
public static void main(String[] args) {
String user = "root";
String password = "199203211410xfcy";
String url = "jdbc:mysql://localhost:3306/studentdb";//建立
數據庫服務器的地址
String tableName = "student_information";
String driver = "com.mysql.jdbc.Driver";
String sqlSentence;
Connection con = null;//連接對象
Statement stmt = null;//操作對象
ResultSet rs = null;//查詢結果
try {
Class.forName(driver);//加載
數據庫驅動程序Driver類
con = DriverManager.getConnection(url, user, password);//
數據庫連接,以特定的用戶訪問指定的
數據庫
stmt = con.createStatement();
sqlSentence = "insert into " + tableName + " values (9,'honey',21)";
stmt.executeUpdate(sqlSentence);
sqlSentence = "select * from " + tableName;
rs = stmt.executeQuery(sqlSentence);
ResultSetMetaData rsmd = rs.getMetaData();
int j = 0;
j = rsmd.getColumnCount();
for (int k = 0; k < j; k++) {
System.out.print(rsmd.getColumnName(k + 1));
System.out.print(" ");
}
System.out.println();
while (rs.next()) {
for (int i = 0; i < j; i++) {
System.out.print(rs.getString(i + 1));
System.out.print(" ");
}
System.out.println();
}
} catch (ClassNotFoundException e1) {
System.out.println("
數據庫驅動不存在!");
System.out.println(e1.toString());
} catch (SQLException e2) {
System.out.println("
數據庫存在異常!");
System.out.println(e2.toString());
} finally {
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (con != null)
con.close();
} catch (SQLException e) {
System.out.println(e.toString());
}
}
}
}
條件是要有1個studentdb的
數據庫,和1張屬性1致的student_information表。
由于時間有限,在寫博文的進程中參考過1些文獻,在此表示感謝;同時鑒于水平緣由,你難免有不足的地方,歡迎斧正!
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈