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);
}
}
}
MyEclipse連接SQL
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.