准備工作:mysql-connector-java-5.1.6-bin.jar配置
package com.job;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class yy {
// JDBC 驅動器名稱 和數據庫地址
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//數據庫的名稱為 EXAMPLE
static final String DB_URL = "jdbc:mysql://localhost/EXAMPLE";
// 數據庫用戶和密碼
static final String USER = "root";
static final String PASS = "123456";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
//注冊JDBC 驅動程序
Class.forName("com.mysql.jdbc.Driver");
//打開連接
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//執行查詢
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, name, age FROM Students";
ResultSet rs = stmt.executeQuery(sql);
//得到和處理結果集
while(rs.next()){
//檢索
int id = rs.getInt("id");
int age = rs.getInt("age");
String name = rs.getString("name");
//顯示
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", Name: " + name);
System.out.println();
}
//清理環境
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// JDBC 操作錯誤
se.printStackTrace();
}catch(Exception e){
// Class.forName 錯誤
e.printStackTrace();
}finally{
//這里一般用來關閉資源的
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
****************************************************prepareStatement+UPDATE用法:有利於高效地執行多次使用的 SQL 語句
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//執行查詢
System.out.println("Creating statement...");
String sql = "UPDATE Students set age=? WHERE id=?";
stmt = conn.prepareStatement(sql);
//將值綁定到參數,參數從左至右序號為1,2...
stmt.setInt(1, 6667); // 綁定 age 的值(序號為1)
stmt.setInt(2, 3);
int rows1 = stmt.executeUpdate();
stmt.setInt(1, 6667); // 綁定 age 的值(序號為1)
stmt.setInt(2, 2); // 綁定 ID 的值
int rows = stmt.executeUpdate();
System.out.println("被影響的行數 : " + rows+rows1 );
***********************************************************************結果集rs導航方法
rs.next();意思是光標移動到最后一個數據出,可顯示最后一個數據
rs.first();
rs.last();。。。
*************************************************************************************conn.setAutoCommit(false);關閉了自動提交后,我們要提交更改,可以調用 commit() 方法:
不要忘記,在catch塊內添加回滾事務,表示操作出現異常,撤銷事務:conn.rollback();
public class JdbcTest {
// JDBC 驅動器名稱 和數據庫地址
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//數據庫的名稱為 EXAMPLE
static final String DB_URL = "jdbc:mysql://localhost/EXAMPLE";
// 數據庫用戶和密碼
static final String USER = "root";
static final String PASS = "";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
//注冊JDBC 驅動程序
Class.forName("com.mysql.jdbc.Driver");
//打開連接
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
conn.setAutoCommit(false);
//執行查詢
System.out.println("Creating statement...");
stmt = conn.createStatement();
//插入
String sql = "INSERT INTO Students " +
"VALUES (5, 20, 'Rose')";
stmt.executeUpdate(sql);
//查找
sql = "SELECT id, name, age FROM Students";
ResultSet rs = stmt.executeQuery(sql);
//提交事務
conn.commit();
//得到和處理結果集
while(rs.next()){
//檢索
int id = rs.getInt("id");
int age = rs.getInt("age");
String name = rs.getString("name");
//顯示
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", Name: " + name);
System.out.println();
}
//清理環境
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// JDBC 操作錯誤
se.printStackTrace();
// conn.rollback();
try{
if(conn!=null)
conn.rollback();
}catch(SQLException se2){
se2.printStackTrace();
}
}catch(Exception e){
// Class.forName 錯誤
e.printStackTrace();
}finally{
//這里一般用來關閉資源的
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
*************************************************************************************8批量處理sql語句
Statement stmt = conn.createStatement();
// 關閉自動提交
conn.setAutoCommit(false);
// 創建 SQL 語句
String SQL = "INSERT INTO Students (id, name, age) VALUES(6,'Mike', 21)";
// 將 SQL 語句添加到批處理中
stmt.addBatch(SQL);
// 創建更多的 SQL 語句
String SQL = "INSERT INTO Students (id, name, age) VALUES(7, 'Angle', 23)";
// 將 SQL 語句添加到 批處理中
stmt.addBatch(SQL);
// 創建整數數組記錄更新情況
int[] count = stmt.executeBatch();
//提交更改
conn.commit();
——————————
String SQL = "INSERT INTO Employees (id, name, age) VALUES(?, ?, ?)";
// 創建 PrepareStatement 對象
PreparedStatemen pstmt = conn.prepareStatement(SQL);
//關閉自動連接
conn.setAutoCommit(false);
// 綁定參數
pstmt.setInt( 1, 8 );
pstmt.setString( 2, "Cindy" );
pstmt.setInt( 3, 17 );
// 添入批處理
pstmt.addBatch();
// 綁定參數
pstmt.setInt( 1, 9 );
pstmt.setString( 2, "Jeff" );
pstmt.setInt( 3, 22 );
// 添入批處理
pstmt.addBatch();
//創建數組記錄更改
int[] count = pstmt.executeBatch();
//提交更改
conn.commit();
callablestatement 調用存儲過程和函數 connection.preparecall(過程、函數名字)
過程無返回值用out代替 存儲函數有返回值return
例子:xxx=connection.preparecall("{call 過程名(?,?,?)}")
xxx.setInt(1,xx)
xxx.setInt(2,xx)
xxx.execute()
xxx.registeroutparameter(3,Types.INTEGER)//設置返回值類型
int result=xxx.get(3)