首先你需要在該頁面上下載支持java連接mysql的驅動程序:
得到:
將其中的jar解壓出來放入任意位置(我的是放在jre的ext中),然後在eclipse中引入jar:
在eclipse中創建類MySQLConnect.java:
這是mysql給我們連接數據庫的例子:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
Connection conn = null;
...
try {
//不難看出,這裏的user是指mysql用戶名,password是指密碼,而localhost後面緊跟着的test是數據庫名
conn =DriverManager.getConnection("jdbc:mysql://localhost/test?" +
"user=monty&password=greatsqldb");
// Do something with the Connection
...
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
由此我們可以寫出一個getConn方法,當有人實例化MySQLConnect時直接生成一個Conn,沒錯,在構造器中調用這個方法,而構造器傳遞參數user,password,dbName。
接下來讓我們實現幾個sql語句,同樣先看mysql提供的實例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
// assume that conn is an already created JDBC connection (see previous examples)
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT foo FROM bar");
// or alternatively, if you don't know ahead of time that
// the query will be a SELECT...
if (stmt.execute("SELECT foo FROM bar")) {
rs = stmt.getResultSet();
}
// Now do something with the ResultSet ....
}
catch (SQLException ex){
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
finally {
// it is a good idea to release
// resources in a finally{} block
// in reverse-order of their creation
// if they are no-longer needed
if (rs != null) {
try {
rs.close();
} catch (SQLException sqlEx) { } // ignore
rs = null;
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException sqlEx) { } // ignore
stmt = null;
}
}
現在需要說明一下JDBC如何工作的:
1、在開發環境中加載指定數據庫的驅動程序(即jar)。
2、在Java程序中加載驅動程序。在Java程序中,可以通過 “Class.forName(“指定數據庫的驅動程序”)” 方式來加載添加到開發環境中的驅動程序,例如加載MySQL的數據驅動程序的代碼爲: Class.forName(“com.mysql.jdbc.Driver”)
3、創建數據連接對象:通過DriverManager類創建數據庫連接對象Connection。DriverManager類作用於Java程序和JDBC驅動程序之間,用於檢查所加載的驅動程序是否可以建立連接,然後通過它的getConnection方法,根據數據庫的URL、用戶名和密碼,創建一個JDBC Connection 對象。如:Connection connection = DriverManager.geiConnection(“連接數據庫的URL", "用戶名", "密碼”)。其中,URL=協議名+IP地址(域名)+端口+數據庫名稱;用戶名和密碼是指登錄數據庫時所使用的用戶名和密碼。具體示例創建MySQL的數據庫連接代碼如下:
Connection connectMySQL = DriverManager.geiConnection(“jdbc:mysql://localhost:3306/myuser","root" ,"root" );
(上面的便是寫到這一步)
4、創建Statement對象:Statement 類的主要是用於執行靜態 SQL 語句並返回它所生成結果的對象。通過Connection 對象的 createStatement()方法可以創建一個Statement對象。例如:Statement statament = connection.createStatement(); 具體示例創建Statement對象代碼如下:
Statement statamentMySQL =connectMySQL.createStatement();
5、調用Statement對象的相關方法執行相對應的 SQL 語句:通過execuUpdate()方法用來數據的更新,包括插入和刪除等操作,例如向staff表中插入一條數據的代碼:
statement.excuteUpdate( "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Tom1', 321, 'M', 'china','Personnel','3','3000' ) ") ;
通過調用Statement對象的executeQuery()方法進行數據的查詢,而查詢結果會得到 ResulSet對象,ResulSet表示執行查詢數據庫後返回的數據的集合,ResulSet對象具有可以指向當前數據行的指針。通過該對象的next()方法,使得指針指向下一行,然後將數據以列號或者字段名取出。如果當next()方法返回null,則表示下一行中沒有數據存在。使用示例代碼如下:
ResultSet resultSel = statement.executeQuery( "select * from staff" );
6、關閉數據庫連接:使用完數據庫或者不需要訪問數據庫時,通過Connection的close() 方法及時關閉數據連接。
我們可以在自己的類中將CRUD方法全部進行封裝,以下是我自己寫的一個例子:
public void queryFromUser() {
ResultSet result = null;
try {
String sql = "select * from user";
stem = getSt();
result = stem.executeQuery(sql);
System.out.println("數據如下:");
while (result.next()) {
int id = result.getInt("id");
String user = result.getString("user");
String name = result.getString("name");
String passwd = result.getString("passwd");
System.out.println("id:" + id + "user:" + user + "name:" + name
+ "password:" + passwd);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close();
try {
if (result != null) {
result.close();
result = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
裏面的getSt方法包含了getConn方法,因爲若是一直連接數據庫對於資源也是一種損耗。 這個方法對於訪問我數據庫中的user沒有問題,但是不能用於訪問任意表,本來想找到一個抽象化訪問所有表的方法,但是一時之間想不出來,暫時定義爲這個,希望有什麼好主意的朋友指教一下。