MyEclipse連接SQL

package database;

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 DbUtils {
	//driver 
	public final static String DRIVER="com.mysql.jdbc.Driver";
	public final static String URL="jdbc:mysql:127.0.0.1:3306/labtask_db";
	public final static String USER="root";
	public final static String PASSWORD="root";
	
	/**
	 * 獲取連接
	 * @return
	 */
	public Connection getConn(){
		Connection conn=null;	//數據庫連接
		try{
			//加載驅動:在靜態初始化器中已經註冊,所以調用JDBC的時候只需Class.forName(XXX);
			Class.forName(DRIVER);
			//通過驅動管理的DriverManager中的getConnection方法獲得連接對象:建立數據庫連接池
			conn=DriverManager.getConnection(URL, USER, PASSWORD);
		}catch(Exception e){
			//e.getMessage:獲得具體的異常名稱
			//e.printStackTrace():獲得詳細異常,異常名稱、具體位置等
			System.out.println("連接失敗"+e.getMessage());
		}
		return conn;	//連接數據庫返回值不能爲空
	}
	
	/**
	 * 創建執行SQL命令的Statement對象
	 * @param conn
	 * @return
	 */
	//Statement是一個接口,沒有具體實現,通過conn.createStatement()創建具體對象
	public Statement createStatement(Connection conn){
		Statement stmt=null;	//數據庫操作
		try{
			//由當前數據庫連接生成一個數據操作對象stmt,不可new,所有操作都經過操作對象傳達給數據庫服務器
			stmt=conn.createStatement();
		}catch(SQLException e){
			System.out.println("創建執行SQL命令的Statement對象!"+e.getMessage());
		}
		return stmt;
	}
	
	/**
	 * 
	 * @param conn
	 * @param sql
	 * @return
	 */
	//PreparedStatement:預編譯語句,相同SQL語句執行多次就使用
	//prepareStatement會先初始化SQL,先把這個SQL提交到數據庫中進行預處理,多次使用可提高效率
	//createStatement不會初始化,沒有預處理,沒次都是從0開始執行SQL
	public PreparedStatement creaPreparedStatement(Connection conn,String sql){
		PreparedStatement stmt=null;	//申明一個爲PreparedStatement的對象
		try{
			stmt=conn.prepareStatement(sql);
		}catch(SQLException e){
			e.printStackTrace();
		}
		return stmt;
	}
	
	/**
	 * 
	 * @param conn
	 * @param stmt
	 * @param sql
	 * @return
	 */
	//執行SQL語句,返回的是單個ResultSet對象
	public ResultSet executeQuery(Connection conn,Statement stmt,String sql){
		ResultSet rs=null;
		try{
			rs=stmt.executeQuery(sql);
		}catch(SQLException e){
			e.printStackTrace();
		}
		return rs;
	}
	
	/**
	 * 
	 * @param sql
	 * @return
	 */
	//執行給定SQL語句,返回值是更新的數據記錄量
	public int executeUpdate(String sql){
		Connection conn=null;
		Statement stmt=null;
		int c=0;
		try{
			conn=getConn();
			//用這個stmt數據操作對象進行數據更新
			stmt=createStatement(conn);
			c=stmt.executeUpdate(sql);
		}catch(SQLException e){
		}finally{//異常發生,方法返回之前,總是要執行的代碼
			closeConnAndStmt(conn,stmt,null);	//關閉連接
		}
		return c;
	}
	
	/**
	 * 
	 * @param conn
	 * @param stmt
	 * @param rs
	 */
	//關閉連接,避免佔用資源
	public void closeConnAndStmt(Connection conn,Statement stmt,ResultSet rs){
		try{
			if(rs!=null){
				rs.close();
			}
			if(stmt!=null){
				stmt.close();	//操作關閉
			}
			if(conn!=null){
				conn.close();	//數據庫關閉
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
	
	/**
	 * 測試
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception{
		DbUtils dbUtils=new DbUtils();
		Connection conn=dbUtils.getConn();
		Statement stmt=dbUtils.createStatement(conn);
		String stuNo="20120304";
		String stuName="可可";
		String sql="select * from t_student where 1=1";
		ResultSet rs=dbUtils.executeQuery(conn, stmt, sql);
		while(rs.next()){
			String clumn=rs.getString(1);
			System.out.println(clumn);
		}
	}
	
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章