1. 下載Mysql驅動。
Link:http://dev.mysql.com/downloads/connector/j/
2.加載JDBC
在Eclipse中,選中相應的工程,Properties->Java Build path->add external jars->ok.
3.JDBC操作數據庫的一般步驟
注冊驅動 (只做一次)
Class.forName(“com.mysql.jdbc.Driver”);
建立連接(Connection)
Connection conn = DriverManager.getConnection(url, user, password);
url格式:JDBC:子協議:子名稱//主機名:端口/數據庫名?屬性名=屬性值&…
User,password可以用“屬性名=屬性值”方式告訴數據庫;
example:
String url="jdbc:mysql://localhost:3306/test";
Connection conn;
conn = DriverManager.getConnection(url,"root","root");
創建執行SQL的語句(Statement)
執行語句
Statement是一個SQL執行器,可以用來執行一個靜態的SQL語句。
Statement st = conn.createStatement();
st.executeQuery(sql);
example:
Statement stmt = conn.createStatement(); //創建Statement對象
String sql= "select * from writers";
ResultSet rs = stmt.executeQuery(sql);
執行存儲過程
CallableStatement(從PreperedStatement擴展來)
cs = connection.prepareCall(“{call psname(?,?,?)}”);
cs.registerOutParameter(index, Types.INTEGER);
cs.setXXX(i, xxxx);
cs.executeUpdate();
int id=cs.getInt(index);
處理執行結果(ResultSet)
ResultSet表示一個查詢結果集。
ResultSet rs = statement.executeQuery(sql);
While(rs.next()){
rs.getString(“col_name”);
rs.getInt(“col_name”);
//…
}
釋放資源
釋放資源的順序是ResultSet, Statement,Connection;
Connection在使用完成后,必須關閉,ResultSet, Statement無所謂,只要Connection關閉了,它們也會被自動關閉(但資源不是立即被釋放)。
Connection的使用原則是盡量晚創建,盡量早的釋放。
例子:
package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class connect { private Connection conn = null; private Statement stmt = null; private PreparedStatement preparedStatement = null; private ResultSet rs = null; public void readDataBase() throws Exception{ try{ Class.forName("com.mysql.jdbc.Driver"); System.out.println("成功加載MySQL驅動!"); }catch(ClassNotFoundException e1){ System.out.println("找不到MySQL驅動!"); e1.printStackTrace(); } String url="jdbc:mysql://localhost:3306/test"; //JDBC的URL try { //調用DriverManager對象的getConnection()方法,獲得一個Connection對象 conn = DriverManager.getConnection(url,"root","root"); //創建一個Statement對象 stmt = conn.createStatement(); //創建Statement對象 System.out.println("成功連接到數據庫!"); String sql= "select * from writers"; rs = stmt.executeQuery(sql); writeMetaData(rs); writeResultSet(rs); String sql2= "insert into writers values(?,?)"; preparedStatement=conn.prepareStatement(sql2); preparedStatement.setString(1, "11"); preparedStatement.setString(2, "TestEmail"); preparedStatement.executeUpdate(); rs = stmt.executeQuery(sql); writeMetaData(rs); writeResultSet(rs); } catch (Exception e) { throw e; } } private void writeMetaData(ResultSet rs)throws SQLException{ System.out.println("The columns in the table are: "); System.out.println("Table: " + rs.getMetaData().getTableName(1)); for (int i = 1; i<= rs.getMetaData().getColumnCount(); i++){ System.out.print( rs.getMetaData().getColumnName(i)+"\t"); } System.out.println(); } public void writeResultSet(ResultSet rs) throws SQLException{ while(rs.next()){ System.out.print(rs.getString(1)+"\t"); System.out.print(rs.getString(2)); System.out.println(); } } private void close() { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (Exception e) { } } }
main:
import com.jdbc.connect; public class Main { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub connect ms= new connect(); ms.readDataBase(); } }