草庐IT

JDBC

第七天堂 2023-04-04 原文

JDBC 就是用 JAVA 语言操作关系型数据库的一套 API

全称:(Java DataBase Connectivity) Java 数据库连接

快速入门

写 JDBC 前需导入驱动 jar 包(以 mysql 数据库为例)

//注册驱动(mysql5 之后的版本此步可省略)
Class.forName("com.mysq.jdbc.Driver");
//获取连接,Java代码需要发送SQL给MySQL服务端,就需要先建立连接
Connection conn = DriverManager.getConnection(url, username, password);
//定义SQL语句
String sql =  “update…” ;
//获取执行SQL对象,执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象
Statement stmt = conn.createStatement();
//执行SQL
stmt.executeUpdate(sql);  
//处理结果
...;
//释放资源
stmt.close();
conn.close();

API 详解

1.DriverManager

  • 注册驱动

    DriverManager.registerDrever();
    

    Class.forName() 底层便是通过调用该方法来实现驱动的注册

  • 获取数据库连接

    static Connection getConnection(String url, String user, String password) 尝试建立与给定数据库URL的连接

    参数说明:

    • url : 连接路径

      语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…

      示例:jdbc:mysql://127.0.0.1:3306/db1

      细节:

      • 如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对

      • 配置 useSSL=false 参数,禁用安全连接方式,解决警告提示

    • user :用户名

    • poassword :密码

2.Connection

作用:获取执行 SQL 的对象,管理事务

  • 获取执行对象

    • 普通执行SQL对象

      Statement createStatement()
      

      快速入门中就是通过该方法获取的执行对象

    • 预编译SQL的执行SQL对象:防止SQL注入

      PreparedStatement  prepareStatement(sql)
      

      通过这种方式获取的 PreparedStatement SQL语句执行对象可以防止SQL注入

    • 执行存储过程的对象

      CallableStatement prepareCall(sql)
      

      通过这种方式获取的 CallableStatement 执行对象是用来执行存储过程的

  • 事务管理

    • 开启事务

      void setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态

      参与autoCommit 表示是否自动提交事务,true表示自动提交事务,false表示手动提交事务。而开启事务需要将该参数设为为false。

    • 提交事务

      void commit() 提交事务,并释放此 Connection对象当前持有的所有数据库锁
    • 回滚事务

      void rollback() 回滚事务,并释放此 Connection对象当前持有的所有数据库锁
    • 例:

      try {
          // ============开启事务==========
          conn.setAutoCommit(false);
          //5. 执行sql
          int count1 = stmt.executeUpdate(sql1);//受影响的行数
          //6. 处理结果
          System.out.println(count1);
          int i = 3/0;
          //5. 执行sql
          int count2 = stmt.executeUpdate(sql2);//受影响的行数
          //6. 处理结果
          System.out.println(count2);
          // ============提交事务==========
          //程序运行到此处,说明没有出现任何问题,则需求提交事务
          conn.commit();
      } catch (Exception e) {
          // ============回滚事务==========
          //程序在出现异常时会执行到这个地方,此时就需要回滚事务
          conn.rollback();
          e.printStackTrace();
      }
      

3.Statement

Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样

  • 执行DDL、DML语句

    int executeUpdate(String sql) 执行给定的SQL语句
  • 执行DQL语句

    ResultSet executeQuery(String sql) 执行给定的SQL语句,返回单个ResultSet对象

4.ResultSet

作用:封装了SQL查询语句的结果

注意:使用后需释放资源

而执行了DQL语句后就会返回该对象,对应执行DQL语句的方法如下:

ResultSet  executeQuery(sql);

要从 ResultSet 对象中获取我们想要的数据。ResultSet 对象提供了操作查询结果数据的方法

boolean  next()
  • 将光标从当前位置向前移动一行
  • 判断当前行是否为有效行
xxx  getXxx(参数)

xxx : 数据类型;如: int getInt(列的编号) ;String getString(列的名称)

5.PreparedStatement

作用:通过将敏感字符进行转义预防SQL注入问题

  • 获取 PreparedStatement 对象

    // SQL语句中的参数值,使用?占位符替代
    String sql = "select * from user where username = ? and password = ?";
    // 通过Connection对象获取,并传入对应的sql语句
    PreparedStatement pstmt = conn.prepareStatement(sql);
    
  • 为设置为 ? 参数赋值

    PreparedStatement对象:setXxx(?的位置编号<从1 开始>,?的值);

  • 执行SQL语句

    executeUpdate(); 执行DDL语句和DML语句
    executeQuery(); 执行DQL语句

    注意:调用这两个方法时不需要传递SQL语句,因为获取SQL语句执行对象时已经对SQL语句进行预编译了。

数据库连接池

负责分配、管理数据库连接(Connection),它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

  • 标准接口:DataSource

    官方(SUN) 提供的数据库连接池标准接口,由第三方组织实现此接口。该接口提供了获取连接的功能:

    Connection getConnection()
    

    那么以后就不需要通过 DriverManager 对象获取 Connection 对象,而是通过连接池(DataSource)获取 Connection 对象。

    常用的数据库连接池:Druid(德鲁伊)

    • Druid连接池是阿里巴巴开源的数据库连接池项目

    • 功能强大,性能优秀,是Java语言最好的数据库连接池之一

  • Driud使用

    public static void main(String[] args) throws Exception {
        //1.导入jar包
        //2.定义配置文件
        //3. 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("配置文件路径"));
        //4. 获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
    
        //5. 获取数据库连接 Connection
        Connection connection = dataSource.getConnection();
        //获取到了连接后就可以继续做其他操作了
    }
    

有关JDBC的更多相关文章

  1. 【JAVAEE】JAVA数据库连接(JDBC) - 2

    1.什么是JDBC?Java数据库连接,(JavaDatabaseConnectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是SunMicrosystems的商标。我们通常说的JDBC是面向关系型数据库的。简而言之,JDBC就是JDK提供的关于数据库操作的一套接口规范,不同数据库厂商来负责实现这个接口,完成指定的操作。用程序和数据建立连接,分为三步骤:1.连接数据库2.执行SQL语句3.把查询到的结果集转换成JAVA对象2.对于MySQL的JDBC编程的前期准备工作知识拓展:JAR文件(Java归

  2. MySQL的JDBC 编程 - 2

    目录1.数据库编程:JDBC2.JDBC工作原理3.JDBC使用3.1驱动包的下载与导入3.2JDBC使用步骤(插入)4.JDBC修改删除查询1.将数据库驱动包,添加到项目依赖中创建目录,拷贝jar包,然后addaslibrary2.创建数据源DataSourse:数据源,描述了数据库服务器在哪里3.和数据库建立连接使用JDBC里的Connection将代码和数据库服务器进行连接一个程序中,通常有一个数据源对象,可以有多个Connection对象4.构造sql语句PreparedStatement:表示一个预处理过的SQL语句对象5.执行sql语句(1)executeUpdate对应插入到删除

  3. oracle - Golang用的是JDBC还是ODBC或者什么连接类型 - 2

    goversiongo1.8.1windows/amd64我正在导入"github.com/mattn/go-oci8""database/sql"用于连接到我的oracle数据库。在这里,当我在连接字符串中提供数据库用户名、密码、端口和表名时funcopenAndConnectToDb(sbconfigConnectorConfig)*sql.DB{logger:=sbgoclient.Loglogger.Println("Openthedatabase")//oraprop:=LoadConfig("oraproperties.yml")fmt.Println("Loadconfi

  4. xml - 将 JDBC url 从 Maven 传递到 hibernate.cfg.xml - 2

    我有一个hibernate.cfg.xml,其中配置了JDBCUrl:jdbc:mysql://${server.hostname}:3306/dsm?zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=true&autoReconnect=true这些&是必需的(而不仅仅是&)以避免异常:对实体“jdbcCompliantTruncation”的引用必须以“;”结尾分隔符。为了能够通过Maven选择不同的目标数据库,我想将其更改为:${jdbc.url}其中${jdbc.url}是Maven中定义的属性

  5. java - Spring 3 applicationContext-security-JDBC.xml 有 bean :bean not bean? - 2

    有人可以告诉我在我的ApplicationContext中我必须使用beans:bean而不是bean的什么以及如何修复它。 最佳答案 说明。基本上,您在这里处理的是XML命名空间。Spring配置允许您使用来自不同命名空间的配置元素作为一种扩展基本beans命名空间配置的方式,具有方便的特定于域的配置,如上述案例中的安全配置。如果您的配置文件集中在这些扩展命名空间之一——再次,让我们以安全性为例——如果您将默认命名空间声明为扩展命名空间而不是标准beans命名空间。就是这样xmlns="http://www.springframe

  6. java - 从 JDBC 结果集中获取 XML 的最佳方式 - 2

    我正在寻找从JDBC结果集中获取XML文档的最佳方法。XML的结构不是很重要,但它应该相当快。为了清楚起见,我想要结果集中的数据和足够的元数据来识别数据(本质上是字段名称)。我目前正在使用MySQL、DB2、SQLServer,但解决方案需要与数据库无关(对于SQLServer中的XML不是一个可行的选择)。 最佳答案 通过使用WebRowSet,一次可以将整个ResultSet转换成XML。WebRowSet生成的XML非常清晰和简单,我不确定速度,因为它还取决于驱动程序实现。这里有一篇关于WebRowSetusingOracle

  7. java - Log4j2 - 如何将 XML 配置转换为 JDBC appender 的 .properties 格式 - 2

    如何将此log4j2.xml配置片段转换为log4j2.properties格式?我不能在我的maven+netbeans项目中使用XML格式,因为我根本无法让log4j2解析和响应log4j2.xml文件-无论我将它放在项目中的什么位置,它都会被log4j2忽略。但是main/resource中的log4j2.properties被解析并响应,所以我-必须-使用.properties...:我通过官方ApacheMavenlog4j工件使用log4j22.10.0。什么是-correct-log4j2.properties配置才能100%等同于上述配置?我几乎连续两天都在让JDBCa

  8. Java:Oracle XMLType + JDBC - 2

    如何将oracleXMLElement获取到JDBC?java.sql.Statementst=connection.createStatement();//worksoracle.jdbc.OracleResultSetrs=st.execute("SELECTXMLElement("name")FROMdual");rs.getString(1);//returnsnull,why?oracle.sql.OPAQUE=(OPAQUE)rs.getObject(1);//thisworks,butwtfisOPAQUE?基本上,我想读取像这样的字符串或任何XML格式的输出。但是我总是

  9. xml - 最好的 JDBC 数据源 bean 类 - 2

    我看到有些人使用org.apache.commons.dbcp.BasicDataSource而其他配置有com.mchange.v2.c3p0.ComboPooledDataSource。Spring有自己的:org.springframework.jdbc.datasource.DriverManagerDataSource可能还有更多。但哪个最好?我有一个需要连接池的JPA/Hibernate三层应用程序,但看起来它们都支持这个.... 最佳答案 Springhasitsown:org.springframework.jdbc

  10. sql-server - Windows 2003 中 JDBC 连接可用的套接字数 - 2

    我的团队使用带有JTDS驱动程序的纯JDBC(无连接池),用Java构建了一个连接到Windows2003Server中的SQLServer2005的Windows服务。一段时间后,打开数据库连接的方法开始使用以下堆栈跟踪引发异常:java.net.BindException:Addressalreadyinuse:connectatjava.net.PlainSocketImpl.socketConnect(NativeMethod)atjava.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)atjava.net.Pla

随机推荐