JDBC簡單一句話,就是用java代碼去控制資料庫,對資料庫進行增刪改查 JDBC 的相關API 總結 最常用是阿裡巴巴的德魯伊資料庫連接池技術 資料庫連接步驟 必須先創建資料庫哈 引入德魯伊的jar包 加入配置文件(properties),要放在src目錄下,根據一些提示信息去做相應的配置,如果是 ...
-
JDBC簡單一句話,就是用java代碼去控制資料庫,對資料庫進行增刪改查
-
JDBC 的相關API 總結
-
最常用是阿裡巴巴的德魯伊資料庫連接池技術
-
資料庫連接步驟
- 必須先創建資料庫哈
- 引入德魯伊的jar包
- 加入配置文件(properties),要放在src目錄下,根據一些提示信息去做相應的配置,如果是web程式,需要用properties
-
JDBCUtilsByDruid工具類連接資料庫
package com.yc.ajax.Utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.FileInputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * 連接資料庫 */ public class JDBCUtilsByDruid { private static DataSource ds; //在靜態代碼塊完成 ds初始化 static { Properties properties = new Properties(); try { //目前我們是javaweb方式啟動,所以要獲得src目錄下的文件,需要用類載入器 properties.load(JDBCUtilsByDruid.class.getClassLoader().getResourceAsStream("druid.properties")); ds = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } //編寫getConnection方法 public static Connection getConnection() throws SQLException { return ds.getConnection(); } //關閉連接, 老師再次強調: 在資料庫連接池技術中,close 不是真的斷掉連接 //而是把使用的Connection對象放回連接池 public static void close(ResultSet resultSet, Statement statement, Connection connection) { try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { throw new RuntimeException(e); } } }
-
BasicDao 根據連接的資料庫 用德魯伊去處理改查
package com.yc.ajax.dao; import com.yc.ajax.Utils.JDBCUtilsByDruid; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import java.sql.Connection; import java.sql.SQLException; import java.util.List; /** * 根據連接的資料庫 用德魯伊去處理改查 * @param <T> */ public class BasicDAO<T> {//泛型指定具體類型 需要創建一個javabean private QueryRunner qr = new QueryRunner(); //開發通用的 dml 針對任意的表 //改 public int update(String sql, Object... parameters) { Connection connection = null; try { connection = JDBCUtilsByDruid.getConnection(); int update = qr.update(connection, sql, parameters); return update; } catch (SQLException e) { throw new RuntimeException(); } finally { JDBCUtilsByDruid.close(null, null, connection); } } //返回多個對象(即查詢的結果是多行), 針對任意表 /** * @param sql sql 語句,可以有 ? * @param clazz 傳入一個類的 Class 對象 比如 Actor.class * @param parameters 傳入 ? 的具體的值,可以是多個 * @return 根據 Actor.class 返回對應的 ArrayList 集合 */ public List<T> queryMulti(String sql, Class<T> clazz, Object... parameters) { Connection connection = null; try { connection = JDBCUtilsByDruid.getConnection(); List<T> query = qr.query(connection, sql, new BeanListHandler<T>(clazz), parameters); return query; } catch (SQLException e) { throw new RuntimeException(e); } finally { JDBCUtilsByDruid.close(null, null, connection); } } //查詢單行結果 的通用方法 public T querySingle(String sql, Class<T> clazz, Object... parameters) { Connection connection = null; try { connection = JDBCUtilsByDruid.getConnection(); return qr.query(connection,sql, new BeanHandler<T>(clazz), parameters); } catch (SQLException e) { throw new RuntimeException(e); } finally { JDBCUtilsByDruid.close(null, null, connection); } } //查詢單行單列的方法,即返回單值的方法 public Object queryScalar(String sql, Object... parameters) { Connection connection = null; try { connection = JDBCUtilsByDruid.getConnection(); return qr.query(connection,sql,new ScalarHandler(),parameters); } catch (SQLException e) { throw new RuntimeException(e); }finally { JDBCUtilsByDruid.close(null,null,connection); } } }
- UserDao 然後再去繼承 BasicDao 範型是一個javabean
package com.yc.ajax.dao; import com.yc.ajax.entity.User; public class UserDao extends BasicDAO<User>{ }
- UserServict 去創建 UserDao的實例然後咱根據業務邏輯調用裡面改或者查的方法
import com.yc.ajax.dao.UserDao; import com.yc.ajax.entity.User; public class UserServlet { private UserDao userDao = new UserDao(); public User getUserByName(String username){ User user = userDao.querySingle("select * from user1 where name=?", User.class, username); return user; } }
- 最後拿到返回的結果進行判斷或者修改資料庫
public class CheckUserServlet extends HttpServlet { private UserServlet userServlet = new UserServlet(); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("CheckUserServlet .. 被調用"); response.setContentType("text/html;charset=utf-8"); //接收 ajax 提交的數據 String username = request.getParameter("username"); // if ("king".equals(username)){ // User king = new User(100, "king", "[email protected]", "12345"); // String user_king = new Gson().toJson(king); // response.getWriter().write(user_king); // }else { // response.getWriter().write(""); // } User userByName = userServlet.getUserByName(username); if (userByName != null){ //說明用戶已經存在 //返回一個json Gson gson = new Gson(); String s = gson.toJson(userByName); response.getWriter().write(s); }else { response.getWriter().write(""); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }