mysql——JDBC 心已赠人 2022-10-01 12:53 114阅读 0赞 # 概述 # JDBC:java Data Base Connectivity ,java数据库连接,它是一种用于执行sql语句的java API,为多种关系数据库提供统一访问。 其实就是一组用java编写的类和接口。 JDBC API 提供两类主要接口: 1)面向开发人员的java.sql程序包,使得Java程序员能够进行数据库连接,执行SQL查询,并得到结果集合。 2)面向底层数据库厂商的JDBC Drivers。 程序员只需要写一个程序,就可以访问所有的数据库。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70][] 提供者:sun公司 内容: 集成在java.sql和javax.sql包下,比如: DriverManager类:管理各种驱动 Connection接口:数据库连接 Statement接口:发送命令得到结果 等等。。。 # JDBC访问数据库步骤 # 1.加载数据库的驱动程序– \------------Class.forName(“driverName”); 2.建立数据库连接 \------------Connection conn=DriverManager.getConnection(String url, String user, String password ) \------------url的格式:"jdbc:<JDBC驱动程序名:端口号>:数据源" \------------例子:"jdbc:mysql://localhost:3306/myuser" 3.执行数据库操作SQL \------------Statement stmt = conn.createStatement(); \------------ResultSet rs = stmt.executeQuery(sql); 4.得到ResultSet进行结果处理 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 1][] •5.关闭数据库连接 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 2][] PreparedStatement类 :是Statement的子接口 •用PreparedStatement类效率会更高。使用PreparedStatement有很多优势,总结如下: –防止SQL注入攻击(使用占位符“?”)。 –提高SQL的执行性能(在执行之前有预处理)。 –避免使用SQL方言提高JDBC中有关SQL代码的可读性。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 3][] ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 4][] 简单的写一个例子熟悉大体流程: 花卉类: package pojo; /** * 花卉实体类 * @author fan * */ public class Flower { private int id;//编号 private String name;//名称 private double price;//价格 private String prodution;//产地 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getProdution() { return prodution; } public void setProdution(String prodution) { this.prodution = prodution; } } 对应的mysql: CREATE TABLE `flower` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '编号', `name` varchar(100) NOT NULL COMMENT '名称', `price` double(10,2) NOT NULL COMMENT '价格', `production` varchar(100) NOT NULL COMMENT '产地', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 我们要JDBC完成对所有花卉的读取操作: package dao.impl; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import com.sun.crypto.provider.RSACipher; import com.sun.java.util.jar.pack.Package.Class; import com.sun.org.apache.regexp.internal.recompile; import dao.FlowerDao; import pojo.Flower; public class FlowerDaoImpl implements FlowerDao{ //查询所有花卉信息 @Override public List<Flower> getFlowerInfoDao() { //声明jdbc变量 Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; //创建集合 List<Flower> lf=null; try { //加载驱动 Class.forName("com.mysql.jdbc.Driver"); //创建连接对象 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "ytywan1314"); //sql命令 String sql="select * from flower"; //创建sql命令对象 ps=conn.prepareStatement(sql); //给占位符赋值 //执行 rs=ps.executeQuery(); lf=new ArrayList<>(); //遍历,封装到对象中 while(rs.next()) { Flower f=new Flower(); f.setId(rs.getInt("id")); f.setName(rs.getString("name")); f.setPrice(rs.getDouble("price")); f.setProdution(rs.getString("production")); lf.add(f); } } catch (Exception e) { e.printStackTrace(); }finally { //关闭资源 rs.close(); ps.close(); conn.close(); } //返回 return lf; } } # util # 我们发现,增删改其实都差不多,我们写的时候都是把其中一个的代码拿来改一改,并且打开啊关闭啊这些操作也类似,所以我们要把操作们都得封装到一个类里,需要时直接传入sql语句还有参数调用即可。 public class BaseDao { private static String driver = "com.mysql.jdbc.Driver"; //数据库驱动字符串 private static String url ="jdbc:mysql://localhost:3306/jeep"; private static String user ="sa"; //用户名 private static String password =""; //密码 protected Connection conn; protected PreparedStatement pstmt; protected java.sql.ResultSet rs; /** * * 获取数据库连接对象 */ public Connection getConnection(){ Connection conn = null; //数据库连接对象 //获取连接并捕捉异常 try { Class.forName(driver); conn = DriverManager.getConnection(url,user,password); } catch (Exception e) { e.printStackTrace(); } return conn; //返回连接对象 } /** * * 关闭数据库连接 */ public void closeAll(Connection conn, Statement stmt, java.sql.ResultSet rs){ //若结果集对象不为空,则关闭 if (rs !=null){ try { rs.close(); } catch (Exception e){ e.printStackTrace(); } } //若Statement对象不为空,则关闭 if (stmt !=null){ try { stmt.close(); } catch (Exception e){ e.printStackTrace(); } } //若数据库连接对象不为空,则关闭 if (conn !=null){ try { conn.close(); } catch (Exception e){ e.printStackTrace(); } } } /** * 增删改 */ public int exceuteUpdate(String sql,Object...prams){ int result = 0; //获取连接 conn = this.getConnection(); try { pstmt = conn.prepareStatement(sql); for (int i=0;i<prams.length;i++){ pstmt.setObject(i+1, prams[i]); } result = pstmt.executeUpdate(); } catch (SQLException e){ e.printStackTrace(); } finally { //关闭资源 closeAll(conn,pstmt,rs); } return result; } } # properties # 对于常量信息,如果每次都修改代码无疑是痛苦的事,所以我们可以提取出相应的配置文件。 比如:dbinfo.properties文件内容: db.driver=com.mysql.jdbc.Driver db.connectUrl=jdbc:mysql://127.0.0.1:3306/myqq_db?useUnicode=true&characterEncoding=UTF-8 db.user=root db.pwd= java: private static Properties dbProps = new Properties(); InputStream is = DBUtil.class.getResourceAsStream("/dbinfo.properties"); dbProps.load(is); Class.forName(dbProps.getProperty("db.driver")); 之后我们连接时就可以根据文件的记录来取值了。 public static Connection getCon() { try { return DriverManager.getConnection( dbProps.getProperty("db.connectUrl"), dbProps.getProperty("db.user"), dbProps.getProperty("db.pwd")); }catch(Exception e) { e.printStackTrace(); return null; } } # JDBC知识积累 # 1、数据连接池的工作机制? 考察点:连接池 ### 参考回答: ### J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70]: /images/20220118/2279625c9b6a4f298374288995707bcb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 1]: /images/20220118/f42c4a9b364d43888cc07a7e886e35df.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 2]: /images/20220118/8c005d91efbf4757bc279415b1e27975.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 3]: /images/20220118/e20d085edb2b4a7ca2bb048e9991845b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9mYW50aWFuenVvLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 4]: /images/20220118/b0840ef514e94902a686b6cc1467bbad.png
相关 mysqljdbc设置参数 如果安装mysql软件时忘了进行参数的配置,那么应该怎么做才能重新进入mysql的参 如果安装mysql软件时忘了进行参数的配置,那么应该怎么做才能重新进入mysql的参 今天药忘吃喽~/ 2023年09月25日 10:19/ 0 赞/ 139 阅读
还没有评论,来说两句吧...