JDBC概念:
JDBC簡而言之就是java數據庫連接。
JDBC訪問數據庫支持兩層模型,也支持三層模型。
我使用的服務端是mysql,在使用JDBC操作數據庫之前必須的做如下工作:
下載mysql-connector-java-5.1.39-bi.jar包,將其放到工程目錄的lib文件下,添加buildpath即可。
JDBC只要掌握3個主要類基本上就算入門了(注意jdbc用到的類均應用java.sql包下)。
1.Connection
程序與數據庫的連接類,是基於TCP協議的連接,連接需要三次握手花時相對較長,因此連接需要進行重用,且連接完畢需要關閉否則容易導致數據庫連接次數用完。獲得Connection對象的方法如下:
/** * url指的是jdbc協議地址 * user 連接mysql的用戶名 * password 密碼 */ Connection conn = DriverManager.getConnection(url, user, password);
2.Statement
執行SQL語句的類,代碼如下://獲取Statement對象 Statement st = conn.createStatement(); //該方法對應的是sql語句中的select st.executeQuery(sql); //該語句對應的是sql語句中的insert,delete,update st.executeUpdate(sql);
3.ResultSet
結果集,這個是statement執行executeQuery()方法時纔會返回的結果集。下面就要敲代碼來看看怎麼連接mysql的了:
在這之前先要寫入連接數據庫的配置信息db.properties,包含url,user,password
放在src目錄下,結構如下
db.properties裏面代碼如下
根據Connection要求,我們需要對連接類進行重用,所以我把連接的操作封裝到一個工具類中DBUtil,利用餓漢式單例,代碼如下:
然後就是三大類讀取操作數據庫信息登場,我這裏只實現了查詢數據,代碼如下import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * 惡漢單例,重用conn * */ public class DBUtil { private static Connection conn; /** * 獲取Connection實例的方法 * @return */ public static Connection getConnection() { if (conn == null) { Properties p = getProperties(); try { conn = DriverManager.getConnection(p.getProperty("url"), p.getProperty("user"), p.getProperty("password")); } catch (SQLException e) { e.printStackTrace(); } } return conn; } /** * 獲取db文件屬性類的方法 */ private static Properties getProperties() { Properties p = new Properties(); try { p.load(DBUtil.class.getClassLoader().getResourceAsStream( "db.properties")); return p; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 關閉資源 * @param rs * @param st * @param conn */ public static void close(ResultSet rs, Statement st, Connection conn){ if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.csdn.bean.Dept; public class ConnectionDemo { Connection conn = DBUtil.getConnection(); public static void main(String[] args) { ConnectionDemo cd = new ConnectionDemo(); Dept dept = cd.setectDept(10); System.out.println(dept); } /** * 根據部門id * 查詢dept表中數據方法 */ private Dept setectDept(int deptno) { Statement st = null; ResultSet rs = null; Dept dept = null; try { st = conn.createStatement(); String sql = "select * from dept where deptno = '" + deptno + "'"; rs = st.executeQuery(sql); if (rs.next()) { dept = new Dept(); dept.setDeptno(rs.getInt("deptno")); dept.setDname(rs.getString("dname")); dept.setLoc(rs.getString("loc")); } } catch (SQLException e) { e.printStackTrace(); }finally{ DBUtil.close(rs,st,conn); } return dept; } }
to be continue......