JDBC (下)

什么是JDBC?JDBC的作用是什么? JDBC是Java数据库连接(Java Database Connectivity)的简称,它是一套用于执行SQL语句的Java API。 JDBC的作用在于为Java程序提供了一个标准化的接口,用于访问和操作各种关系型数据库。通过JDBC,开发者可以使用Java语言编写的程序来连接数据库,执行查询、更新、删除等操作,而无需关心底层数据库的具体实现细节。 阅读详情

9、数据库事务

-> 一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操作的一个执行单元。

9.1、事务概述

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执
行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更
新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误
恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、
隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务
的处理。
事务开始于

  • 连接到数据库上,并执行一条DML语句insert、update或delete
  • 前一个事务结束后,又输入了另一条DML语句

事务结束于

  • 执行commit或rollback语句。
  • 执行一条DDL语句,例如create table语句,在这种情况下,会自动执行commit语句。
  • 执行一条DDL语句,例如grant语句,在这种情况下,会自动执行commit。
  • 断开与数据库的连接
  • 执行了一条DML语句,该语句却失败了,在这种情况中,会为这个无效的DML语句执行rollback语
    句

9.2、事务的四大特点

(ACID)

  • actomicity(原子性)
    表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败
  • consistency(一致性)
    表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态
  • isolation(隔离性)
    事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修
    改它之后的状态,事务不会查看中间状态的数据。
  • durability(持久性)
    持久性事务完成之后,它对于系统的影响是永久性的。

9.3、 JDBC中事务应用

如果JDBC连接处于自动提交模式,默认情况下,则每个SQL语句在完成后都会提交到数据库。
事务使您能够控制是否和何时更改应用于数据库。它将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,则整个事务将失败。
要启用手动事务支持,而不是JDBC驱动程序默认使用的自动提交模式,请使用Connection对象的setAutoCommit()方法。如果将boolean false传递给setAutoCommit(),则关闭自动提交。我们可以传递一个布尔值true来重新打开它。

9.4、事务的提交和回滚

完成更改后,我们要提交更改,然后在连接对象上调用commit()方法,如下所示:

conn.commit( );

否则,要使用连接名为conn的数据库回滚更新,请使用以下代码 -

conn.rollback( );

9.5、Savepoints

新的JDBC 3.0 Savepoint接口为您提供了额外的事务控制。
设置保存点时,可以在事务中定义逻辑回滚点。如果通过保存点发生错误,则可以使用回滚方法来撤消所有更改或仅保存在保存点之后所做的更改。
Connection对象有两种新的方法来帮助您管理保存点 -

  • setSavepoint(String savepointName):定义新的保存点。它还返回一个Savepoint对象。
  • releaseSavepoint(Savepoint savepointName):删除保存点。请注意,它需要一个Savepoint
    对象作为参数。此对象通常是由setSavepoint()方法生成的保存点。

1、要取消掉JDBC的自动提交:void setAutoCommit(boolean autoCommit)
2、执行各个SQL语句,加入到批处理之中
3、如果所有语句执行成功,则提交事务 commit();如果出现了错误,则回滚:rollback()
数据库事务通常要借助补捉异常语句

10.JDBC批处理

批量处理允许您将相关的SQL语句分组到批处理中,并通过对数据库的一次调用提交它们。
当您一次向数据库发送多个SQL语句时,可以减少连接数据库的开销,从而提高性能。

10.1、 Statement批处理

以下是使用语句对象的批处理的典型步骤序列

  • 使用createStatement()方法创建Statement对象。
  • 使用setAutoCommit()将auto-commit设置为false 。
  • 使用addBatch()方法在创建的语句对象上添加您喜欢的SQL语句到批处理中。
  • 在创建的语句对象上使用executeBatch()方法执行所有SQL语句。
  • 最后,使用commit()方法提交所有更改。
Statement stmt = conn.createStatement();
conn.setAutoCommit(false);
//sql1
String SQL = "INSERT INTO Employees (id, first, last, age) VALUES(200,'Zia',
'Ali', 30)";
stmt.addBatch(SQL);
//sql2
String SQL = "INSERT INTO Employees (id, first, last, age) VALUES(201,'Raj',
'Kumar', 35)";
stmt.addBatch(SQL);
//sql3
String SQL = "UPDATE Employees SET age = 35 WHERE id = 100";
stmt.addBatch(SQL);
int[] count = stmt.executeBatch();
conn.commit();

10.2、PreparedStatement批处理

  1. 使用占位符创建SQL语句。
  2. 使用prepareStatement() 方法创建PrepareStatement对象。
  3. 使用setAutoCommit()将auto-commit设置为false 。
  4. 使用addBatch()方法在创建的语句对象上添加您喜欢的SQL语句到批处理中。
  5. 在创建的语句对象上使用executeBatch()方法执行所有SQL语句。
  6. 最后,使用commit()方法提交所有更改。
String SQL = "INSERT INTO Employees (id, first, last, age) VALUES(?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(SQL);
conn.setAutoCommit(false);
// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();
// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
// Add it to the batch
pstmt.addBatch();
//add more batches
//Create an int[] to hold returned values
int[] count = stmt.executeBatch();
//Explicitly commit statements to apply changes
conn.commit();

11、反射处理结果集

接口:

//查询所有的学生信息
public List<Student> findallstudent(Class cla);

实现类:

@Override
public List<Student> findallstudent(Class cla) {
 Connection con = null;
 PreparedStatement pps = null;
 ResultSet rs =null;
 try {
   Class.forName("com.mysql.jdbc.Driver");
   con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yhp",
"root", "123456");
   List list=new ArrayList();
   String sqla = "select * from student";
   pps = con.prepareStatement(sqla);
   rs = pps.executeQuery();
   //得到数据库中的所有的列有哪些?
   ResultSetMetaData metaData = rs.getMetaData();//返回数据库中的相关信息
   int count=metaData.getColumnCount();//得到列数
   String[] columnnames=new String[count];
   for (int i = 0; i < count; i++) {
     // System.out.println(metaData.getColumnName(i+1));//列的位置从1开始
     columnnames[i]=metaData.getColumnName(i+1);
   }
   //得到实体类中的所有的方法
   Method[] methods =cla.getDeclaredMethods();
   while(rs.next()){
     Object s=cla.newInstance();//调取无参构造创建对象
     for (String columnname : columnnames) {
        String name="set"+columnname;//setstuid
       for (Method method : methods) {
         if(method.getName().equalsIgnoreCase(name)){
           method.invoke(s,rs.getObject(columnname));//执行了对应的
set方法
           break;
         }
       }
     }
     list.add(s);
   }
   System.out.println("执行成功");
   return list;
 } catch (Exception e) {
     e.printStackTrace();
 } finally {
   try {
     if (rs != null) {
       rs.close();
     }
     if (pps != null) {
       pps.close();
     }
     if (con != null) {
       con.close();
     }
   } catch (SQLException e) {
     e.printStackTrace();
   }
 }
 return null;
}

12、工具类的定义

public class DbUtils {
 //1.定义需要的工具类对象
 protected Connection connection=null;
 protected PreparedStatement pps=null;
 protected ResultSet rs=null;
 protected int k=0;//受影响的行数
 private String url="jdbc:mysql://localhost:3306/yhp";
 private String username="root";
 private String password="123456";
 //2.加载驱动
 static{
   try {
     Class.forName("com.mysql.cj.jdbc.Driver");
   } catch (ClassNotFoundException e) {
     e.printStackTrace();
   }
 }
 //3.获得连接
 protected  Connection getConnection(){
   try {
     connection=DriverManager.getConnection(url,username,password);
   } catch (SQLException e) {
     e.printStackTrace();
   }
   return connection;
 }
 //4.创建通道
 protected PreparedStatement getPps(String sql){
   try {
     getConnection();//insert into users values(?,?,?,?,)
     pps=connection.prepareStatement(sql);
   } catch (SQLException e) {
     e.printStackTrace();
   }
   return pps;
 }
 //5.给占位符赋值 list中保存的是给占位符所赋的值
 private void setParams(List list){
   try {
     if(list!=null&&list.size()>0){
       for (int i=0;i<list.size();i++) {
         pps.setObject(i+1,list.get(i));
       }
     }
   } catch (SQLException e) {
     e.printStackTrace();
   }
 }
 //6.增删改调取的方法
 protected int update(String sql,List params){
   try {
     getPps(sql);
     setParams(params);
     k= pps.executeUpdate();
   } catch (SQLException e) {
     e.printStackTrace();
   }
   return k;
 }
 //7.查询的时候调取一个方法
 protected ResultSet query(String sql,List list){
   try {
     getPps(sql);
     setParams(list);
     rs=pps.executeQuery();
     return rs;
   } catch (SQLException e) {
     e.printStackTrace();
   }
   return null;
 }
 //8.关闭资源
 protected void closeall(){
   try {
     if (rs != null) {
       rs.close();
     }
     if (pps != null) {
       pps.close();
     }
     if (connection != null) {
       connection.close();
     }
   } catch (SQLException e) {
     e.printStackTrace();
   }
 }
}

12.1、 properties文件保存数据库信息-特点:key-value存储方式

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/yhp
user=root
password=123456

工具类中读取属性文件:

InputStream inputStream = 当前类名.class.getClassLoader()
         .getResourceAsStream("db.properties");
     Properties properties = new Properties();
     properties.load(inputStream);
     dirverName = properties.getProperty("driver");
     url = properties.getProperty("url");
     username = properties.getProperty("user");
     password = properties.getProperty("password");

方式2:

static{
     //参数只写属性文件名即可,不需要写后缀
ResourceBundle bundle = ResourceBundle.getBundle("db");
driver = bundle.getString("driver");
url = bundle.getString("url");
username = bundle.getString("user");
password = bundle.getString("password");
}

说明:
使用ResourceBundle访问本地资源
在设计时,我们往往需要访问一些适合本地修改的配置信息,如果作为静态变量,那么每次修改都需要重新编译一个class,.config保存此类信息并不适合,
这时我们需要 ResourceBundle。
通过ResourceBundle,我们需要访问位于/WEB-INF/classes目录下的一个后缀名为properties的文本类型文件,从里面读取我们需要的值。

13、连接池

数据连接池原理
连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数
据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户
也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连
接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数
以及每个连接的最大使用次数、最大空闲时间等等,也可以通过其自身的管理机制来监视数据库连接的
数量、使用情况等。

13.1 自定义连接池

我们可以通过自定义的方式实现连接池!分析连接池类应该包含特定的属性和方法!
属性: 集合 放置Connection
方法: 获取连接方法
回收连接方法
具体实现代码:

public class Pool{
static LinkedList<Connection> list = new LinkedList<Connection>();
 static{
   for (int i = 0; i < 10; i++) {
     Connection connection = JDBCUtils.newInstance().getConnection();
     list.add(connection);
   }
 }
 /**
  * 从连接池子中获取连接的方式
  * @return
  */
 public static Connection getConnection(){
   
   if (list.isEmpty()) {
     //JDBCUtils类是自定义类,封装了连接数据库的信息代码
     Connection connection = JDBCUtils.newInstance().getConnection();
     list.addLast(connection);
   }
   
   Connection conn = list.removeFirst();
   
   return conn;
 }
 /**
  * 返回到连接池子中
  */
 public static void addBack(Connection conn){
   
   if (list.size() >= 10) {
     try {
       conn.close();
     } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
   }else{
     list.addLast(conn); //10
   }
   
 }
 
 
 /**
  * 获取连接池子中连接数量的方法
  */
 
 public static int getSize(){
   return list.size();
 }
}

13.2 java规范实现连接池

Java为连接池实现提供了一个规范(接口),规范的写法,我们需要实现DataSource接口!
但是实现DataSource接口有一个弊端,没有提供回收链接方法!这里我们将使用装饰者模式
装饰Connection!具体实现代码如下:

  1. 创建装饰Connection
public class MyConnection  implements Connection{
 
 //将被装饰者导入
 private Connection conn;
 private LinkedList<Connection> list;
 public MyConnection(Connection conn, LinkedList<Connection> list) {
   super();
   this.conn = conn;
   this.list = list;
 }
 @Override
 public <T> T unwrap(Class<T> iface) throws SQLException {
   return conn.unwrap(iface);
 }
 @Override
 public boolean isWrapperFor(Class<?> iface) throws SQLException {
   return conn.isWrapperFor(iface);
 }
 @Override
 public Statement createStatement() throws SQLException {
   return conn.createStatement();
 }
 @Override
 public PreparedStatement prepareStatement(String sql) throws SQLException {
   return conn.prepareStatement(sql);
 }
 @Override
 public CallableStatement prepareCall(String sql) throws SQLException {
   return null;
 }
 @Override
 public String nativeSQL(String sql) throws SQLException {
   return null;
 }
 @Override
 public void setAutoCommit(boolean autoCommit) throws SQLException {    
 }
 @Override
 public boolean getAutoCommit() throws SQLException {
   return false;
 }
 @Override
 public void commit() throws SQLException {
   conn.commit();
 }
 @Override
 public void rollback() throws SQLException {
   conn.rollback();
 }
 @Override
 public void close() throws SQLException {
   list.addLast(conn);
   
 }
 ...
}

基于规范实现的连接池

/**
* 创建一个规范的连接池子
*/
public class DataSourcePool implements DataSource{
 static LinkedList<Connection> list = new LinkedList<Connection>();
 static{
   
   for (int i = 0; i < 10; i++) {
     Connection connection = JDBCUtils.newInstance().getConnection();
     list.add(connection);
   }
 }
 
 public static int getSize(){
   return list.size();
 }
 @Override
 public Connection getConnection() throws SQLException {
   Connection conn = list.removeFirst();
   MyConnection conn1 = new MyConnection(conn, list);
   return conn1;
 }  
 @Override
 public PrintWriter getLogWriter() throws SQLException {
   return null;
 }
 @Override
 public void setLogWriter(PrintWriter out) throws SQLException { 
 }
 @Override
 public void setLoginTimeout(int seconds) throws SQLException { 
 }
 @Override
 public int getLoginTimeout() throws SQLException {
   return 0;
 }
 @Override
 public Logger getParentLogger() throws SQLFeatureNotSupportedException {
   return null;
 }
 @Override
 public <T> T unwrap(Class<T> iface) throws SQLException {
   return null;
 }
 @Override
 public boolean isWrapperFor(Class<?> iface) throws SQLException {
   return false;
 }
 @Override
 public Connection getConnection(String username, String password) throws
SQLException {
   return null;
 }
}

最小连接数:
是数据库一直保持的数据库连接数,所以如果应用程序对数据库连接的使用量不大,将有大量的数据库资源被浪费。
初始化连接数:
连接池启动时创建的初始化数据库连接数量。
最大连接数:
是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求被加入到等待队列中。
最大等待时间:
当没有可用连接时,连接池等待连接被归还的最大时间,超过时间则抛出异常,可设置参数为0或者负数使得无限等待(根据不同连接池配置)。

常用:Druid(德鲁伊)连接池

使用步骤:

1 导入jar包
2 编写工具类

/**
* 阿里的数据库连接池
* 性能最好的
* Druid
* */
public class DruidUtils {
 //声明连接池对象
 private static DruidDataSource ds;
 static{
   ///实例化数据库连接池对象
   ds=new DruidDataSource();
   //实例化配置对象
   Properties properties=new Properties();
   try {
     //加载配置文件内容
  
properties.load(DruidUtils.class.getResourceAsStream("dbcpconfig.properties"));
     //设置驱动类全称
     ds.setDriverClassName(properties.getProperty("driverClassName"));
     //设置连接的数据库
     ds.setUrl(properties.getProperty("url"));
     //设置用户名
     ds.setUsername(properties.getProperty("username"));
     //设置密码
     ds.setPassword(properties.getProperty("password"));
     //设置最大连接数量
    
ds.setMaxActive(Integer.parseInt(properties.getProperty("maxActive")));
   } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }
 }
 //获取连接对象
 public static Connection getConnection() {
   try {
     return ds.getConnection();
   } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }
   return null;
 }  
}

注:在Druid连接池的配置中,driverClassName可配可不配,如果不配置会根据url自动识别dbType(数
据库类型),然后选择相应的driverClassName

VS2015编译配置GDAL(图文并茂、超详细!!!) 文章目录一、GDAL介绍二、下载GDAL三、修改源代码四、工具命令提示符操作五、编译GDAL六、安装GDAL七、在VS2015的项目中配置GDAL八、添加环境变量九、测试是否配置成功 一、GDAL介绍 GDAL(Geospatial Data Abstraction Library)是一个在XMIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。因此 阅读详情

相关推荐

超声信号处理——硬件电路中的混频应用

本文介绍了超声多普勒系统的信号处理原理。系统通过波形振荡器产生高频信号,经换能器转换为超声波发射,接收反射信号后与原始信号混频,利用三角函数的积化和差特性产生包含多普勒频移的低频差频信号和高频和频信号。通过低通滤波器滤除高频成分后,即可获得纯净的多普勒信号。这种处理方法将MHz级高频信号转换为可听低频信号,降低了系统复杂度与成本。数学推导表明,差频信号频率正好

fcxgfdjy的博客 1125

MySQL数据库中,对事物设置中间点,使用setSavepoint()方法的测试

package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Savepoint; /** *测试事务中设置中间点 setSavepoint(...

zenghuanyu_big的博客 672

Carsim和Matlab/Simulink联合仿真时Carsim匹配不到Matlab的解决方法

      本人使用Carsim和Matlab/Simulink联合仿真做过用机器学习方法解决ACC和简单换道的仿真,曾将8.02 2016 2018三个版本Carsim反复安装N次,有相同方向的同学或安装过程遇到问题的同学可以加本人qq505625869一起交流经验心得。 一.前言       Carsim是一款很好的联合仿真软件,使用Carsim,可以避免搭建很多非常复杂的动力学模型

Kaikai_Liao的博客 8770

JDBC事务保存点(setSavepoint, releaseSavepoint )实例

以下是使用事务教程中描述的setSavepoint和回滚的代码示例。 此示例代码是基于前面章节中完成的环境和数据库设置编写的。 复制并将以下示例代码保存到:JDBCSavepoint.java中,编译并运行如下 - //STEP 1. Import required packages // See more detail at http://www.yiibai.com/jdb...

dengjuanshou7445的博客 491

从NVLINK到EthLink:GPU互联技术演进全解析(含最新行业趋势)

本文深入解析了从NVLINK到EthLink的GPU互联技术演进,重点剖析了Scale-up与Scale-out两种核心范式。文章详细对比了NVLINK、UALINK及革命性的EthLink技术,后者创新性地将以太网改造为支持Load/Store与RDMA双语义的高性能互联网络,旨在打破封闭生态,实现高性能与开放性的统一。最后,文章提供了技术选型指南并展望了未来以以太网为主导、语义融合的行业趋势。

weixin_29204749的博客 179

C#开发者必备:VSPD虚拟串口快速配置指南(附汉化教程)

本文为C#开发者提供了VSPD虚拟串口的快速配置与汉化教程。详细介绍了如何安装、汉化VSPD,并创建稳定的虚拟串口对,重点讲解了如何将其集成到C#开发工作流中,使用SerialPort类进行数据通信测试、协议模拟及故障排查,有效提升硬件通信开发的效率。

weixin_29224529的博客 258

第十二节 JDBC事务保存点(setSavepoint, releaseSavepoint )实例

第十二节 JDBC事务保存点(setSavepoint, releaseSavepoint )实例

weixin_43860634的博客 1519

网络协议——Modbus-RTU

网络协议——Modbus-RTU,简介、消息格式、Modbus寄存器种类说明、功能码01H、功能码02H、功能码03H、功能码04H、功能码05H、功能码06H、功能码0FH、功能码10H。

计算机硕士的博客 9905

java中使用savepoint_Java Connection setSavepoint()方法与示例

保存点是事务中的逻辑回滚点。设置保存点时,只要在保存点之后发生错误,就可以使用该rollback()方法撤消在保存点之前所做的事件。您可以使用Connection接口的setSavepoint(String savepointName)方法在数据库中设置保存点。//设置保存点SavepointsavePoint=con.setSavepoint("MysavePoint");此方法接受表示保...

weixin_42584758的博客 1252

【C2000系列DSP的Bootloader详解】如何打包源文件为库文件且加密仅授权使用,一步步教你如何实现

如果想要在 TI 的 CCS 开发环境中为 C2000 系列 MCU 生成 lib 库文件,并对这些库文件进行加密保护,确保只有授权方(持有密钥)才能调用和使用,以此保护源代码的知识产权。

昔时扬尘处 177

2、TrustZone(内含链接)——长期学习内容

ARM系列学习路径整理,希望对大家有用。

HoneyIC的博客 234

设置savepoint的命令

设置 savepoint 的命令是: SAVEPOINT savepoint_name; 其中,savepoint_name 是你自己为 savepoint 命名的名称。你可以通过这条命令来创建一个 savepoint,之后可以使用 ROLLBACK 命令撤销在 savepoint 之后的所有更改,或者使用 RELEASE 命令来放弃 savepoint 并且提交之后的所有更改。 例如: SAV...

weixin_35756373的博客 265

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1659

jdbc

文章目录一,什么是JDBC二,JDBC的原理三,程序员,JDBC,JDBC驱动的关系及说明四,JDBC的总结五,JDBC连接数据的步骤六,JDBC连接数据的详细步骤 一,什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。 二,JDBC的原理 早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他

qq_43623447的博客 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JDBC是什么

JDBC(Java Database Connectivity, Java 数 据 库 连 接)是 一 种可用于执行 SQL 语句的 Java API(Application Programming Interface, 应用程序设计接口)。它由一些 Java 语言编写的类和接口组成。JDBC 为数据库应用开发人员、数据库前台开发人员提供了一种标准的应用程序设计接口, 使开发人员可以用纯 Java 语言编写完整的数据库应用程序。

顺其自然~专栏 2万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JDBC概述(什么是JDBC?JDBC的原理、Mysql和Sql Server入门JDBC操作)

本篇文章主要介绍JDBC概述(什么是JDBC?JDBC的原理、Mysql和Sql Server入门JDBC操作)简单入门知识以及部分理论知识 JDBC是Java Database Connectivity的缩写 是一种用于Java程序访问关系型数据库的API(应用程序接口)。 1. Java语言的跨平台性:JDBC可以在各种操作系统和计算机体系结构上运行,这使得使用Java开发的应用程序可以方便地与不同类型的数据库进行交互。 2. 标准化:JDBC是一个标准化的API,提供了一致的访问关系数据库的方法,使

Jin_Xiang123的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JDBC | JDBC快速入门

本文讲解了JDBC的基础代码,帮助大家可以快速上手JDBC,感受JDBC的使用过程

BoBooY的Java学习笔记 1787

JDBC详解——JDBC常用接口

JDBC: JDBC的全称是Java Database Connectivity,即Java数据库连接,它是一种可以执行SQL语句的Java API。程序可以通过JDBC API连接到关系数据库,并使用结构化查询语言(SQL,数据库标准的查询语言)来完成对数据库的查询和更新。 JDBC执行事件: 建立与数据库的连接; 执行SQL语句; 获得SQL语句的执行结果。 JDBC驱动程序: ...

threelifeadv的博客 8112

Spring JDBC - Spring JDBC模版使用

Spring JDBC模版;Spring JDBC支持类

weixin_52937170的博客 1580

Java数据库连接—JDBC(JDBC详解、JDBC控制事务、C3P0连接池、Druid连接池、Spring JDBC-JDBC Template)

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。下面有部分截图希望能对大家有所帮助。

2401_84003809的博客 993

JDBC原理&浅析HIVE-JDBC

目录 {:toc} 什么是JDBC? JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。Java8 JDBC API 使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。 例如,我们在Java代码中如果要访问MySQL,那么必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是.

梦境迷离 3583

JDBC总结——JDBC工具类

文章目录JDBC工具类一、JDBC工具类概述1、定义JDBC工具类的目的2、封装的操作二、JDBC工具类的封装1、dbcp.properties2、JdbcUtil3.java3、JdbcTemplate.java JDBC工具类 一、JDBC工具类概述 1、定义JDBC工具类的目的 每次使用JDBC的时候都要书写冗长的代码段,不符合复用的理念,于是要单独写一个类,将通用的JDBC操作写到一个类...

weixin_44157233的博客 1932

JDBC

标题 今日内容 1. JDBC基本概念 2. 快速入门 3. 对JDBC中各个接口和类详解 JDBC: 1. 概念:(Java DataBase Connectivity) Java 数据库连接, Java语言操作数据库 * JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。 * 各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。 2. 快速入门: * 步骤: 1. 导入驱动j

qq_28728655的博客 3085

JDBC是什么?JDBC连接Mysql完整操作案例

是Java平台下用于数据库连接和操作的标准API,是一套接口和类的集合,它是由Sun Microsystems公司(现已被Oracle公司收购)最早提出的,目的是让Java应用程序能够与各种数据库系统进行交互。通过JDBC,Java程序员可以使用统一的接口来执行SQL语句、处理结果集,并与关系型数据库管理系统(RDBMS)进行通信。

wangyufei0815的博客 1257

【JDBC上篇】什么是JDBC

既然是一套接口,接口都有调用者和实现者,面向接口调用,面向接口写实现类,都属于面向接口编程。面向接口编程的优势是解耦合,降低程序的耦合度,提高程序的扩展力。数据库的驱动大多以jar包的形式存在,解压后得到很多class文件,这些class文件就是对JDBC接口的实现,驱动由各大数据库厂家提供。getString方法传入列名的时候,传入的是查询结果集的列名。getString方法可以传入列的下标(JDBC中下标从1开始),也可以传入列名,但后者更加健壮。实际开发中,不要把数据库的信息写死在Java程序中。

llg___的博客 787

JDBC版本简介

JDBC 版本是 JDBC 软件的发布,在 JDK 实现中有多个可用的 JDBC 版本。JDBC 目前的稳定版本是 4.3,发布于2017 年 9 月21日,版本 4.3 是一个稳定的版本,这意味着我们可以使用此版本实现 API 软件。第一个版本于1997年发布,其版本名称为JDBC 1.2,这是JDBC的第一个稳定版本。在发布版本 1.2 之后,许多稳定版本在 JDK 实现中发布,JDBC 4.0 及更高版本都支持 java SE 环境。

allway2的博客 3165
上一篇: JDBC (上)
下一篇: HTML笔记(上)
githubbbb
博客等级 码龄7年 2粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值