`

javadb在jdbc中的应用

阅读更多

摘要

学习如何在Java桌面应用中部署基于Apache Derby的Java DB。该文章使用住址名册例子来向你演示一个嵌入式数据库Java DB是如何工作的。

 

正文

       Sun Microsystems最近公布发行支持基于100%Java技术的开源数据库Java DB——Apache Derby数据库。Derby之前是以Cloudscape的名字存在并被人使用,它是由Cloudscape、Informix和IBM共同所有。后来,IBM把Derby产品源代码捐赠给Apache基金会作为一个开源项目。Sun、IBM 其他企业和个人作为Apache Derby社区的一部分也积极参与该关系数据库的开发。Java DB遍布在Sun许多产品中,包括Sun Java Enterprise System和Sun Java System Application Server。NetBeans集成开发环境(IDE) 5.0也支持Java DB。

       Java DB是一个只有2MB的轻量级数据库,并可嵌入到Java技术的桌面应用中。目前桌面应用可以访问带有触发器、存储过程和支持SQL语句的强大数据库存储器,Java Database Connectivity(JDBC)和Java Platform, Enterprise Edition(Java EE,以前称为J2EE),都嵌入了同样的Java虚拟机(JVM)。(见脚注)

       这篇文章描述了如何下载、安装、集成和在桌面应用中部署Java DB。住址名册这个例子将演示一个嵌入式数据库Java DB是如何工作的。

 

内容

-创建住址名册示例

-安装Java DB

-在NetBeans IDE 5.0里集成Java DB

-装载数据库驱动

-连接Java DB数据库

-创建数据库

-使用数据库

-发布你的应用程序

-概要

 

创建住址名册示例

       住址名册示例使用Java DB来存储地址信息。这个示例存储名字、电话号码、email地址和邮政地址。它答应你建立一个新地址条目并可以存储、编辑和删除它们。这个应用程序在用户的主目录下名为.addressbook的子目录下创建它的数据库。这个数据库嵌入在应用程序中的,所以这里不需要设立和治理一个分开的服务器或系统。要发布这个嵌入式数据库应用程序,我们仅仅需要应用程序JAR文件和数据库类JAR文件。插图1展示该示例的用户界面(UI)。

 

在桌面应用中使用JAVA DB(图一)

插图1:住址名册使用嵌入式的数据库Java DB

       住址名册的主框架窗口是AddressFrame类,它继续于Java Foundation Classes/Swing(JFC/Swing)JFrame。AddressFrame类是一个放置其他图形组件的容器,同时也担当控制和处理子组件产生的不同事件。这些子组件是JPanel的子类,每个都有不同的职责:

l         AddressPanel显示地址记录。它也提供编辑存在的记录和创建新记录的UI。它包含显示Address对象的所有主要属性的文本域。

l         AddressActionPanel设置该程序所需的按钮。AddressFrame必须处理这个面板所产生的事件。例如:当用户点击Save按钮,这个面板产生一个事件。AddressFrame监听并处理这个面板的所有重要事件。

l         AddressListPanel设定一个带滚动条的列表来列出名册姓名,显示在AddressFrame的左边。这个列表控制一个ListEntry对象。ListEntry存储数据库记录的唯一标识。这个记录标识(ID)答应应用程序找到该记录的全部信息并显示在AddressPanel上。

该应用程序是用Data Access Object(DAO)去分离数据库特定的代码。DAO封装了数据库connections和statements。一个DAO是一个有益的设计模式,它答应在应用程序和持久化存储机制之间的松耦合。应用程序的AddressDao类是一个DAO的例子。当AddressFrame编辑、保存或修改Address对象时,它总是使用一个AddressDao类的实例。虽然住址名册应用程序使用的是Java DB,你也可以改变它,并使用一个完全不同的数据库,仅仅需要修改这个类而已。

 

安装Java DB

       获取Java DB最简单的方法就是从Sun Developer Network的Java DB站点去下载。二进制版本文件包提供你编写嵌入式数据库应用程序所需要的文件。当你下载完该文件后,你将得到Java DB目录结构,它包含下面一些子目录:

l         Demo子目录有两个示例程序。一个例子显示如何创建一个普通的嵌入式应用。另一个例子则显示如何在客户端-服务器环境下使用Java DB。

l         Frameworks子目录包含的功能有环境变量设置和建立和启动数据库。对于住址名册的示例,这个类是没有用的,因为我们的应用程序将是完全独立的。没有外部的功能被使用。

l         Javadoc子目录包含API文档。这个目录非常有用的,当你配置你的IDE时,都要指明Java DB API javadoc的位置。

l         Docs子目录包含关于Java DB产品的一些文档:安装、治理和参考指南。

 

l         最后,lib子目录包含Java DB库打包成的JAR文件。阅读Java DB文档可以找到不同的库。对于一个嵌入式数据库应用程序,我们们只需要derby.jar库文件。

安装Java DB只需要在你的应用程序环境变量里加入derby.jar文件。它是如此的简单。你可以在你的Solaris,Linux,Windows里设置环境变量,或者在其他主环境里导入这个JAR文件,或者你可以在编译和运行的时候通过命令行参数导入这个文件。假如你使用ANT,住址名册示例的ANT脚本将告诉你在发布工程时如何导入这些JAR文件。另外,某些IDE,包括NetBeans IDE 5.0,答应你设置工程的环境变量。

 

在NetBeans IDE 5.0里集成Java DB

       大多数IDE都提供了添加库文件到开发环境的方法。下面将指导你如何在NetBean IDE5.0里添加Java DB库文件:

1.       在Tools菜单里选择库治理器,如插图2。

在桌面应用中使用JAVA DB(图二)

插图2:库治理器答应你添加第三方库文件到你的工程里

2.       在库治理器窗口,创建一个名为JavaDBEmbedded的新库,如插图3。点击OK。

在桌面应用中使用JAVA DB(图三)

插图3:设置你工程需要的库的名字

3.       添加derby.jar文件到JavaDBEmbedded库,在库治理器窗口里点击Add JAR/Folder…。通过文件选择框选择derby.jar文件。如插图4。

在桌面应用中使用JAVA DB(图四)

插图4:添加derby.jar文件到JavaDBEmbedded库

4.       在同样的库治理器窗口的JavaDBEmbedded库里,选择Javadoc标签。从你安装的Java DB目录里添加javadoc子目录。现在,当你在NetBeans IDE工程里使用JavaDBEmbedded库时,就可用的Java DB API javadoc。

 

 

你现在可以使用工程的属性设置来为NetBeans IDE 5.0工程添加JavaDBEmbedded库文件。当你在IDE下编译,调试和运行该应用程序时,IDE将能找到所需要的derby.jar文件。

为了适用用户使用其他的IDE,我将derby.jar文件放在提供下载的地址名册工程的lib子目录里。也附带了只使用NetBeans IDE就能直接构建和运行该示例的ANT脚本。

 

装载数据库驱动

       装载JDBC技术驱动启动数据库治理系统。Java DB的驱动来自于derby.jar文件,因此你不需要再下载任何东西。装载JDBC驱动通过引用Class.forName方法。嵌入式驱动名是org.apache.derby.jdbc.EmbeddedDriver,你也可以使用其他的JDBC驱动装载它。

 

Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

 

       地址名册示例从配置属性文件里读取驱动名,并传递该名字到loadDriver方法。另外,之前提到的,地址名册封装所有的数据库功能到Data Access Object(DAO),core Java EE design pattern习惯访问数据从多样的来源。在Java SE应用程序中,就像地址名册一样,DAO模式工作得相当好。下面的代码片段表示AddressDao文件如何读取驱动名和装载驱动:

 

private Properties bProperties = null;

 

public AddressDao(String addressBookName) {

    this.dbName = addressBookName;

    setDBSystemDir();

    dbProperties = loadDBProperties();

    String driverName = dbProperties.getProperty("derby.driver");

    loadDatabaseDriver(driverName);

 

    ...

}

 

private Properties loadDBProperties() {

    InputStream dbPropInputStream = null;

    dbPropInputStream =

        AddressDao.class.getResourceAsStream("Configuration.properties");

    dbProperties = new Properties();

    try {

        dbProperties.load(dbPropInputStream);

    } catch (IOException ex) {

        ex.printStackTrace();

    }

 

    return dbProperties;

}

 

private void loadDatabaseDriver(String driverName) {

    // Load the Java DB driver.

    try {

        Class.forName(driverName);

    } catch (ClassNotFoundException ex) {

        ex.printStackTrace();

    }

 

连接Java DB数据库

       JDBC技术连接定义一个独立的数据库并答应你执行治理任务。任务包括启动,停止,复制,甚至删除数据库。驱动治理器提供所有数据库连接。从驱动治理器获得一个连接,倘若定义了URL字符串和一组属性值,将改变数据库连接的交互性。一个非常普通的方法是在连接时关联用户名和密码属性。

       所有连接的URL都使用下面的格式:

 

jdbc:derby:<dbName>[propertyList]

 

 

       dbName是定义一个独立数据库的URL。一个数据库可以有一个或多个位置:在当前工作目录里,在classpath里,在JAR文件里,在一个独有的Java DB数据库主目录里,或者是你的文件系统里的绝对位置。治理数据库位置的最简单方法是在你嵌入式环境里设置derby.system.home系统属性。这个属性告诉Java DB里所有数据库的默认主位置。通过设置这些属性,地址名册示例确保Java DB总是能找到正确的应用程序数据库。应用程序数据库名字为DefaultAddressBook,它将存在于derby.system.home属性所指示的目录里。连接该数据库的URL应该像这样:

 

jdbc:derby:DefaultAddressBook

 

可选值propertyList是一组属性,你可以传递给数据库系统。你可以传递属性到Java DB系统,要么是URL它本身,或是是分开的属性对象。假如属性是URL的一部分,应该用分号来隔开每个属性值。最常用的属性是:

 

l         create=true

l         databaseName=nameOfDatabase

l         user=username

l         passWord=userPassword

l         shutdown=true

 

       要连接DefaultAddressBook数据库,该示例必须首先设置derby.system.home系统属性。该示例使用的是用户主目录的.addressbook子目录。使用System类去找到用户的主目录。然后使用该类来设置derby.system.home属性:

 

private void setDBSystemDir() {

    // Decide on the db system Directory: <userhome>/.addressbook/

    String userHomeDir = System.getProperty("user.home", ".");

 

    String systemDir = userHomeDir + "/.addressbook";

 

    // Set the db system directory.

    System.setProperty("derby.system.home", systemDir);

}

 

一旦应用程序有了明确的指示,所有的数据库都将存在,它可以获得一个数据库连接。在这个例子里,注重,我添加了连接属性到数据库URL。

 

Connection dbConnection = null;

String strUrl = "jdbc:derby:DefaultAddressBook;user=dbuser;password=dbuserpwd";

try {

    dbConnection = DriverManager.getConnection(strUrl);

} catch (SQLException sqle) {

    sqle.printStackTrace();

}

 

       或者,你可以把这些属性放在Properties对象里。当获取连接时,使用这个Properties对象做参数:

 

 

Connection dbConnection = null;

String strUrl = "jdbc:derby:DefaultAddressBook";

 

Properties props = new Properties();

props.put("user", "dbuser");

props.put("password", "dbuserpwd");

try {

    dbConnection = DriverManager.getConnection(strUrl, props);

} catch(SQLException sqle) {

    sqle.printStackTrace();

}

 

创建数据库

       地址名册示例应用程序没有现成的数据库。换句话说,当该应用程序启动时,必须创建数据库。在这个应用程序中使用嵌入式数据库最大的好处是不需要用户关心数据库设置的细节。应用程序可以控制数据库存在的地方,存在那些表和如何进行处理。

       地址名册创建了一个名为DefaultAddressBook的数据库,在用户主目录的一个子目录里,它不会告诉用户任何附加的信息。当获得一个数据库连接后,通过使用create=true属性,你可以在Java DB里创建一个新的数据库。由于我们的数据库将使用DefaultAddressBook数据库,我们首先应该创建这个数据库。假设我们在之前讨论时已经设置了derby.system.home属性值,应用程序创建数据库和连接如下:

 

 

Connection dbConnection = null;

String strUrl = "jdbc:derby:DefaultAddressBook;create=true";

 

try {

    dbConnection = DriverManager.getConnection(strUrl);

} catch (SQLException ex) {

    ex.printStackTrace();

}

 

       因为create=true属性值被包含在里面,Java DB首先会尝试创建数据库文件。创建数据库并不是实际创建任何应用表。然而,你应该能在你的主目录下找到一个名为.addressbook/DefaultAddressBook的子目录。

       在数据库被创建后,应用程序将创建表。该示例仅使用一个ADDRESS表在默认应用程序APP计划。下面是创建ADDRESS表的SQL代码:

 

CREATE table APP.ADDRESS (

    ID          INTEGER NOT NULL

                PRIMARY KEY GENERATED ALWAYS AS IDENTITY

 

                (START WITH 1, INCREMENT BY 1),

    LASTNAME    VARCHAR(30),

    FIRSTNAME   VARCHAR(30),

    MIDDLENAME  VARCHAR(30),

    PHONE       VARCHAR(20),

    EMAIL       VARCHAR(30),

    ADDRESS1    VARCHAR(30),

    ADDRESS2    VARCHAR(30),

    CITY        VARCHAR(30),

    STATE       VARCHAR(30),

    POSTALCODE  VARCHAR(20),

    COUNTRY     VARCHAR(30) )

       每个记录有一个记录标识或ID域。Java DB为每条新记录产生这些值,它将添加到数据。在每条地址记录的ID域是一个要害值。

 

       其他的地址记录域都是不同长度的varchar类型。例如,LASTNAME域能容纳最大30个varchar字符。Varchar类型等价于UTF-16 Java char类型。

       Java技术编码使用下面的代码用上面的SQL语句去创建ADDRESS表。dbConnection是与先前提到的代码相同的。我们把它传递到createTable方法中,创建一个新的Statement,并在新建的数据库里调用execute方法运行SQL代码。strCreateAddressTable实例变量保存SQL语句文本。

 

private boolean createTables(Connection dbConnection) {

    boolean bCreatedTables = false;

    Statement statement = null;

    try {

        statement = dbConnection.createStatement();

        statement.execute(strCreateAddressTable);

        bCreatedTables = true;

    } catch (SQLException ex) {

        ex.printStackTrace();

    }

   

 

    return bCreatedTables;

}

 

       现在,数据库和ADDRESS表都存在于主目录下名为.addressbook/DefaultAddressBook子目录里。虽然你可以浏览这个子目录,避免修改任何文件。假如你直接编辑或删除这些数据库文件,你就破坏了你数据库的完整性。

 

使用数据库

       一旦数据库和它的表被创建,你的应用程序可以创建一个新的连接和声明去增加,编辑,删除,或获得记录。在地址名册中,这些响应是由AddressActionPanel里的按钮所控制。插图5显示了这几个可选项。

l         New.创建一个新的地址记录

l         Delete.删除当前显示的地址记录

l         Edit.编辑当前的地址记录

l         Save.保存新的和编辑过的地址记录

l         Cancel.取消任何编辑或任何尝试新建的记录

在桌面应用中使用JAVA DB(图五)

插图5:地址名册有几个按钮与记录交互

       应用程序的主窗口是AddressFrame,它同时担当控制和显示。它用AddressActionPanel注册它自己去接收通知,当用户点击响应区的按钮时。

       New按钮清除地址条目面版,并答应用户去编辑所有文本框。这里没有使用SQL命令,不过UI应该答应你登录一个新地址。

       Delete按钮尝试删除当前选种的地址记录。AddressFrame从AddressPanel获取当前选择的Address标识,并使用AddressDao删除该记录。该面板调用它自己的deleteAddress方法。该方法用正确的ID做参数调用DAO的deleteRecord方法。在删除数据库记录后,应用程序必须删除AddressListPanel的ListEntry。

 

 

private void deleteAddress() {

    int id = addressPanel.getId();

    if (id != -1) {

        db.deleteRecord(id);

        int selectedIndex = addressListPanel.deleteSelectedEntry();

        ...

    }

    ...

}

 

       在AddressDao里,deleteRecord方式实际上是从数据库删除一条记录。当第一次创建数据库连接时,AddressDao就创建了一个PreparedStatement。

 

stmtDeleteAddress = dbConnection.prepareStatement(

        "DELETE FROM APP.ADDRESS " +

        "WHERE ID = ?");

 

 

       PreparedStatement可以使用多次,每次只需要一个参数就能确定删除哪条记录。在设置了ID参数后,deleteRecord方法执行Update。

 

public boolean deleteRecord(int id) {

    boolean bDeleted = false;

    try {

        stmtDeleteAddress.clearParameters();

        stmtDeleteAddress.setInt(1, id);

        stmtDeleteAddress.executeUpdate();

        bDeleted = true;

    } catch (SQLException sqle) {

        sqle.printStackTrace();

    }  

    return bDeleted;

}

 

 

       Edit按钮答应用户在AddressPanel里编辑当前选择的Address记录。在这个例子中,你可以修改记录的名字,城市或电话号码。

       Save按钮要么是在AddressPanel里创建和编辑新的Address,要么就尝试编辑更新存在的记录。假如用户是编辑一个记录。Save按钮将使用新的信息来更新记录。假如用户是创建一个新的记录,Save按钮将插入一个新的记录到数据库。新的还没有被保存。这时,它的ID域仍然设置的是默认值-1。一旦你保存这条记录,这个值是自动生成的,并成为该记录的唯一标识。

       下面是AddresFrame里的代码是通过调用DAO的editRecord或saveRecord方法来保存编辑后或新建的地址记录。当然,当你创建一条新记录,应用程序也必须更新AddressListPanel。

 

private void saveAddress() {

    if (addressPanel.isEditable()) {

        Address address = addressPanel.getAddress();

        int id = address.getId();

        if (id == -1) {

            id = db.saveRecord(address);

            address.setId(id);

            String lname = address.getLastName();

            String fname = address.getFirstName();

 

            String mname = address.getMiddleName();

 

            ListEntry entry = new ListEntry(lname, fname, mname, id);

            addressListPanel.addListEntry(entry);

         } else {

            db.editRecord(address);

        }

        addressPanel.setEditable(false);

    }

}

 

       DAO的editRecord方法必须更新Address记录里更改的域。由于该应用程序示例不能分辨修改和未修改的域,它就更新了记录的所有域。下面是PreparedStatement对象和editRecord方法:

stmtUpdateExistingRecord = dbConnection.prepareStatement(

    "UPDATE APP.ADDRESS " +

 

    "SET LASTNAME = ?, " +

    "    FIRSTNAME = ?, " +

    "    MIDDLENAME = ?, " +

    "    PHONE = ?, " +

    "    EMAIL = ?, " +

    "    ADDRESS1 = ?, " +

    "    ADDRESS2 = ?, " +

    "    CITY = ?, " +

    "    STATE = ?, " +

    "    POSTALCODE = ?, " +

    "    COUNTRY = ? " +

    "WHERE ID = ?");

   

 

    ...

 

public boolean editRecord(Address record) {

 

分享到:
评论

相关推荐

    利用Simulink实现混合储能系统在直流微网中的下垂控制策略研究:保持直流母线电压稳定的实践与探究,Simulink仿真下的光储直流微网混合储能系统下垂控制策略优化研究(注意版本要求为2021A以上

    利用Simulink实现混合储能系统在直流微网中的下垂控制策略研究:保持直流母线电压稳定的实践与探究,Simulink仿真下的光储直流微网混合储能系统下垂控制策略优化研究(注意版本要求为2021A以上),混合储能系统 光储微网 下垂控制 Simulink仿真 注意版本2021A以上 由光伏发电系统和混合储能系统构成直流微网。 混合储能系统由超级电容器和蓄电池构成,通过控制混合储能系统来维持直流母线电压稳定。 混合储能系统采用下垂控制来实现超级电容和蓄电池的功率分配,蓄电池响应低频量,超级电容响应高频量。 通过改变光照来影响光伏出力,控制混合储能系统保持微网直流母线电压稳定在380V,不受光伏出力变化影响。 ,混合储能系统; 光储微网; 下垂控制; Simulink仿真; 版本2021A; 直流母线电压稳定; 光伏出力变化; 超级电容器; 蓄电池。,2021A+混合储能系统:光储微网下垂控制Simulink仿真研究

    JavaScript入门到精通: 全栈编程语言的基础与进阶学习指南

    内容概要:本文档是针对JavaScript这一跨平台解释型语言的详尽入门手册,首先概述了JavaScript的概念及其重要特性,强调它不仅适用于前端同时也活跃于Node.js的服务器环境之中,从而成为全栈开发的重要技能。紧接着文档阐述了JavaScript的基本语法元素如变量声明、数据类型、运算符及控制结构,让新手理解JavaScript的语法规则,并通过函数与对象操作加深印象。之后介绍了一些常见的实用工具和高级用法,例如模板字符串、解构赋值以及异步编程手段(比如Promise)。对于想要深入探索的应用场景给出了广泛的指引,无论是传统的web开发还是新兴领域的IoT或自动化脚本编写皆有所涉猎。 适合人群:对于那些没有编程背景或有其他编程经验但仍希望了解并擅长运用JavaScript的个人来说非常适合。 使用场景及目标:目的是向初学者提供足够的理论指导和技术实践机会,使他们能够在不同平台上利用JavaScript创造出有意义的作品;不论是想要从事专业软件开发或是业余项目爱好者都能够从中受益。 其他说明:文档还提供了大量权威且有用的外部链接供进一步深造学习,包括但不限于主流的在线课程、权威的技术参考资料及充满活力的支持社区。

    2D3D 中弗里德里希常数和庞加莱常数的计算 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均

    级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,不平衡电网下的svg无功补偿,级联H桥svg无功补偿statcom,采用三层控制策略。 (1)第一层采用电压电流双闭环pi控制,电压电流正负序分离,电压外环通过产生基波正序有功电流三相所有H桥模块直流侧平均电压恒定,电流内环采用前馈解耦控制; (2)第二层相间电压均衡控制,注入零序电压,控制通过注入零序电压维持相间电压平衡; (3)第三层相内电压均衡控制,使其所有子模块吸收的有功功率与其损耗补,从而保证所有H桥子模块直流侧电压值等于给定值。 有参考资料。 639,核心关键词: 1. 不平衡电网下的SVG无功补偿 2. 级联H桥SVG无功补偿STATCOM 3. 三层控制策略 4. 电压电流双闭环PI控制 5. 电压电流正负序分离 6. 直流侧平均电压恒定 7. 前馈解耦控制 8. 相间电压均衡控制 9. 零序电压注入 10. 相内电压均衡控制 以上十个关键词用分号分隔的格式为:不

    基于时空RBF-NN的混沌时间序列预测 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于主从博弈的动态定价策略与电动汽车充电管理优化在智能小区的实践(MATLAB+CPLEX gurobi实现),基于主从博弈理论的智能小区电动汽车充电与代理商动态定价策略优化研究,MATLAB代码:基

    基于主从博弈的动态定价策略与电动汽车充电管理优化在智能小区的实践(MATLAB+CPLEX gurobi实现),基于主从博弈理论的智能小区电动汽车充电与代理商动态定价策略优化研究,MATLAB代码:基于主从博弈的智能小区代理商定价策略及电动汽车充电管理 关键词:电动汽车 主从博弈 动态定价 智能小区 充放电优化 参考文档:《基于主从博弈的智能小区代理商定价策略及电动汽车充电管理》基本复现 仿真平台:MATLAB+CPLEX gurobi平台 主要内容:代码主要做的是一个电动汽车充电管理和智能小区代理商动态定价的问题,将代理商和车主各自追求利益最大化建模为主从博弈,上层以代理商的充电电价作为优化变量,下层以电动汽车的充电策略作为优化变量,通过优化得出最优电价策略以及动态充电策略。 ,电动汽车; 主从博弈; 动态定价; 智能小区; 充放电优化; MATLAB; CPLEX; gurobi平台。,基于主从博弈的电动汽车充电管理与定价策略优化MATLAB代码实现

    (程序、GUI、思路)MATLAB打印纸缺陷检测GUI设计.zip

    基于Matlab语言实现的设计项目 2、适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计中的部分功能,作为“参考资料”使用。 3、解压说明:本资源需要电脑端使用WinRAR、7zip等解压工具进行解压,没有解压工具的自行百度下载即可。 4、免责声明:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。

    《基于 Transformer 的恶意软件检测器》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是均来自个人的课程设计、毕业设计或者具体项目,代码都测试ok,都是运行成功后才上传资源,答辩评审绝对信服的,拿来就能用。放心下载使用!源码、说明、论文、数据集一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 4、如有侵权请私信博主,感谢支持

    Labiew噪音与振动检测模块源码揭秘:傅里叶变换与倍频程技术应用于实际项目,LabVIEW平台噪声与振动检测模块源码解析:基于傅里叶变换与倍频程原理的实用功能模块,已成功应用于实际项目,虚拟产品退换

    Labiew噪音与振动检测模块源码揭秘:傅里叶变换与倍频程技术应用于实际项目,LabVIEW平台噪声与振动检测模块源码解析:基于傅里叶变换与倍频程原理的实用功能模块,已成功应用于实际项目,虚拟产品退换政策严谨执行,Labiew噪音与振动检测模块源码,改功能模块已运用到实际项目,原理是利用傅里叶变和倍频程实现的,产品一旦发概不 。 需要的可以联系哟 ,Labiew源码; 噪音与振动检测模块; 傅里叶变换; 倍频程; 实际项目运用,Labiew傅里叶变换倍频程噪音振动检测模块源码

    基于Comsol多物理场仿真的光伏集热器异形体建模技术研究,探索comsol多物理场仿真技术:光伏集热器异形体建模应用,comsol多物理场仿真,光伏集热器,异形体建模 ,comsol多物理场仿真;

    基于Comsol多物理场仿真的光伏集热器异形体建模技术研究,探索comsol多物理场仿真技术:光伏集热器异形体建模应用,comsol多物理场仿真,光伏集热器,异形体建模 ,comsol多物理场仿真; 光伏集热器仿真; 异形体建模,Comsol多物理场仿真在光伏集热器及异形体建模中的应用

    器官3D分割-基于WinForm框架开发的医学影像系统源码+sln+演示视频(毕设基于c#和python开发).zip

    器官3D分割-基于WinForm框架开发的医学影像系统源码+sln+演示视频(毕设基于c#和python开发).zip 【项目简单介绍】 主要功能 肺炎诊断 器官 3D 分割 该系统具备肺炎诊断和器官 3D 分割的功能,并模仿了罗万科技的系统界面风格。 python和c#开发实现

    界面GUI设计MATLAB BP的水果识别.zip

    MATLAB可以用于开发水果识别系统。这种系统通常利用机器学习和图像处理技术,对输入的水果图像进行特征提取和分类识别。以下是开发水果识别系统的一般步骤: 1. 数据收集:收集包含各种水果类别的图像数据集。 2. 数据预处理:对图像进行预处理,包括裁剪、缩放、灰度化等操作。 3. 特征提取:从每个水果图像中提取特征,例如颜色直方图、纹理特征、形状特征等。 4. 数据标记:为每个图像标记水果类别,形成训练集和测试集。 5. 模型训练:使用机器学习算法(如支持向量机、卷积神经网络等)对训练集进行训练,建立水果识别模型。 6. 模型测试:使用测试集对模型进行测试和评估,调整模型超参数以提高准确率。 7. 系统集成:将训练好的模型集成到MATLAB应用程序中,实现水果识别功能。 8. 用户界面设计:设计用户友好的界面,以便用户上传水果图像并查看识别结果。 MATLAB提供了丰富的图像处理工具箱和机器学习工具箱,可以帮助开发者快速构建水果识别系统。通过结合这些工具箱,可以实现水果的快速、准确识别。

    COMSOL声子晶体仿真研究:一维至三维能带与带隙分析及色散曲线弹性波声波分析,声子晶体仿真:COMSOL代做能带图、带隙图及弹性波、声波分析与优化设计,COMSOL代做 声子晶体仿真,一维,二维,三

    COMSOL声子晶体仿真研究:一维至三维能带与带隙分析及色散曲线弹性波声波分析,声子晶体仿真:COMSOL代做能带图、带隙图及弹性波、声波分析与优化设计,COMSOL代做 声子晶体仿真,一维,二维,三维能带图,带隙图,色散曲线,弹性波,声波。 ,COMSOL代做;声子晶体仿真;一维/二维/三维能带图;带隙图;色散曲线;弹性波仿真;声波分析,COMSOL声子晶体仿真专家:一至三维声波模拟及能带图绘制

    Matlab Simulink仿真探究Flyback反激式开关电源性能表现与优化策略,Matlab Simulink仿真探究Flyback反激式开关电源的工作机制,Matlab Simulimk仿真

    Matlab Simulink仿真探究Flyback反激式开关电源性能表现与优化策略,Matlab Simulink仿真探究Flyback反激式开关电源的工作机制,Matlab Simulimk仿真,Flyback反激式开关电源仿真 ,Matlab; Simulink仿真; Flyback反激式; 开关电源仿真,Matlab Simulink在Flyback反激式开关电源仿真中的应用

    陪读租房系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计

    陪读租房系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 本系统有三个角色:管理员、租客和房主,要求具备以下功能: (a) 管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、租客管理、房主管理、房源信息管理、房源类型管理、教育书籍管理、文章分类管理、租房信息管理、合同信息管理、在线咨询管理、咨阅回复管理、教育论坛、系统管理等功能。 (b) 租客;进入前台系统可以实现首页、房源信息、教育书籍、教育论坛、公告信息、后台管理等功能进行操作。 (C) 房主;进入系统可以实现首页、个人中心、房源信息管理、租房信息管理、合同信息管理、在线咨询管理、咨询回复管理等功能进行操作。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。

    vue3的一些语法以及知识点

    vue3的一些语法以及知识点

    libicu-doc-50.2-4.el7-7.x64-86.rpm.tar.gz

    1、文件内容:libicu-doc-50.2-4.el7_7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libicu-doc-50.2-4.el7_7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    水果销售商城(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计

    水果销售商城(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 水果购物网站用户可以注册登录,在首页开通会员卡,查看水果,购买水果,查看水果信息,以及个人中心修改个人资料,在自己的后台查看自己的购买记录等。 水果购物网站管理员功能:个人中心管理,用户管理,会员管理,会员卡管理,开通会员记录管理,积分管理,水果管理,购买水果订单管理,积分兑换管理,积分兑换记录管理,加积分记录管理,减积分记录管理。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。

    基于Matlab的双输入深度学习模型构建指南:处理序列与图像数据的创新性应用,Matlab双输入深度学习模型搭建指南:如何处理两种输入数据并实现创新与优势,Matlab搭建双输入深度学习模型,双输入网

    基于Matlab的双输入深度学习模型构建指南:处理序列与图像数据的创新性应用,Matlab双输入深度学习模型搭建指南:如何处理两种输入数据并实现创新与优势,Matlab搭建双输入深度学习模型,双输入网络。 相比普通的单输入网络,双输入网络能处理两种输入数据,在科研上也更具有优势和创新性。 如何用Matlab搭建双输入网络也是困扰本人很长时间的一个问题,现已弄明白。 注意,需要Matlab 2022b及以上版本,以下版本估计是都不行。 本程序是两个输入全为一维序列的情况(第二个输入序列是第一个输入序列的特征值,或者变后的序列)。 也可改为两边输入都是图像,或者一边输入图像,一边输入图像的一维特征序列。 本程序工作如下: 1、加载数据,两种输入数据一一对应,第二个数据是第一个数据做FFT之后的序列,属于一个类别。 两种数据样本数相等,序列长度不相等。 2、搭建双输入网络,此网络一边是CNN-LSTM,一边是CNN。 3、训练。 4、测试,输出准确率。 注:程序可直接运行,包教会和调通。 可以有偿修改为两边输入都是图像,或一边输入图像一边输入序列的模型。 可有偿替数据,调通程序。 程序注释详

    十大管理的49个过程组强化记忆

    包含十大管理49个过程组的输入与输出和解释,还有EVA铮值管理的公式汇总和解释

Global site tag (gtag.js) - Google Analytics