目录
前言
1、实现的功能
2、具体的代码实现
前言
想了解QSqlDatabase基本知识的,以及增删改查的用法,可以浏览上一篇文章:
QSqlDatabase(1)基本接口,以及(增删改除)的简单实例_Ivy_belief的博客-CSDN博客
这篇主要实战,写了一个数据动态库。
1、实现的功能
先来看看要实现的页面信息:
数据库的动态库主要实现了:数据库的增、删、改、查的功能。
(1)增加数据的功能;
(2)删除数据的功能;
(3)修改数据的功能;
(4)查找数据的功能;
(5)用QTableView显示数据库表数据;
(6)直接执行sql语句的功能;
2、具体的代码实现
数据库测试工具GUI页面的主要功能:
(1)增加数据:
bool RobotDataBaseManager::addData2DB(string strOrderId, string strEntry, string strMoney, string strPlate, string strType, string strWeight)
{
if (isOrderIdExist(strOrderId))
return false;
QString orderId = QString::fromStdString(strOrderId);
QString entry = QString::fromStdString(strEntry);
QString money = QString::fromStdString(strMoney);
QString plate = QString::fromStdString(strPlate);
QString type = QString::fromStdString(strType);
QString weight = QString::fromStdString(strWeight);
QSqlQuery query;
QString sql = "INSERT INTO orderData (orderId, entry, money, plate, type, weight) VALUES (:orderId, :entry, :money, :plate, :type, :weight);";
query.prepare(sql);
query.bindValue(":orderId", orderId);
query.bindValue(":entry", entry);
query.bindValue(":money", money);
query.bindValue(":plate", plate);
query.bindValue(":type", type);
query.bindValue(":weight", weight);
if (!query.exec())
{
qDebug()<
(2)删除数据的功能;
bool RobotDataBaseManager::DeleteDataById(string strOrderId)
{
qDebug() << "RobotDataBaseManager::DeleteDataById: " << QString::fromStdString(strOrderId);
QString orderId = QString::fromStdString(strOrderId);
QSqlQuery query;
QString sql = "DELETE FROM orderData WHERE orderId=:orderId;";
query.prepare(sql);
query.bindValue(":orderId", orderId);
if (!query.exec())
{
qDebug() << "into DeleteDataById ERROR: " << query.lastError().text();
return false;
}
if(m_mutex4OrderId.tryLock(1*1000)==false)
return false;
m_curOrderId = orderId;
m_mutex4OrderId.unlock();
return true;
}
(3)修改数据的功能;
bool RobotDataBaseManager::UpdateDataById(string strOrderId, string strEntry, string strMoney, string strPlate, string strType, string strWeight)
{
if (!isOrderIdExist(strOrderId))
return false;
QString orderId = QString::fromStdString(strOrderId);
QString entry = QString::fromStdString(strEntry);
QString money = QString::fromStdString(strMoney);
QString plate = QString::fromStdString(strPlate);
QString type = QString::fromStdString(strType);
QString weight = QString::fromStdString(strWeight);
qDebug()<< "orderId: " << orderId;
qDebug()<< "entry: " << entry;
qDebug()<< "money: " << money;
qDebug()<< "plate: " << plate;
qDebug()<< "type: " << type;
qDebug()<< "weight: " << weight;
QSqlQuery query;
QString sql = "UPDATE orderData SET entry = :entry, money = :money, plate = :plate, type = :type, weight = :weight WHERE orderId=:orderId;";
query.prepare(sql);
query.bindValue(":orderId", orderId);
query.bindValue(":entry", entry);
query.bindValue(":money", money);
query.bindValue(":plate", plate);
query.bindValue(":type", type);
query.bindValue(":weight", weight);
if (!query.exec())
{
qDebug() << "UpdateDataById ERROR: " << query.lastError().text();
return false;
}
if(m_mutex4OrderId.tryLock(1*1000)==false)
return false;
m_curOrderId = orderId;
m_mutex4OrderId.unlock();
return true;
}
(4)查找数据的功能;
bool RobotDataBaseManager::getDataById(string strOrderId, string& strEntry, string& strMoney, string& strPlate, string& strType, string& strWeight)
{
qDebug() << "[数据库]:getDataById 查询所有数据: 开始~~~~~~~~~~~~~~~~~";
QString orderId = QString::fromStdString(strOrderId);
QSqlQuery query;
QString sql = "SELECT * FROM orderData WHERE orderId=:orderId;";
query.prepare(sql);
query.bindValue(":orderId", orderId);
if (!query.exec())
{
qDebug() << "into getDataById ERROR: " << query.lastError().text();
return false;
}
while (query.next())
{
QString orderId = query.value("orderId").toString();
qDebug() << "取得1条订单缓存数据: " << orderId;
if (!orderId.isEmpty())
{
strEntry = query.value("entry").toString().toStdString();
strMoney = query.value("money").toString().toStdString();
strPlate = query.value("plate").toString().toStdString();
strType = query.value("type").toString().toStdString();
strWeight = query.value("weight").toString().toStdString();
}
}
query.exec("SELECT * FROM orderData");
qDebug() << "[数据库]:SELECT * FROM orderData:";
while (query.next())
{
// 读取字段值
QString name = query.value("entry").toString();
QString money = query.value("money").toString();
QString plate = query.value("plate").toString();
QString type = query.value("type").toString();
QString weight = query.value("weight").toString();
// 输出结果
qDebug() << "entry:" << name << ", money:" << money << ", plate:" << plate << ", type:" << type << ", weight:" << weight;
}
qDebug() << "[数据库]:getDataById 查询所有数据: 结束~~~~~~~~~~~~~~~~~";
return true;
}
(5)用QTableView显示数据库表数据;
void RobotDataBaseManager::on_btn_showAll_clicked()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "Connection1");
db.setDatabaseName("trawe.db"); // 数据库文件名
if (!db.open())
{
qDebug() << "Failed to connect to database 1.";
return;
}
QSqlQuery query(db);
QString selectQuery = "SELECT * FROM orderData";
if (!query.exec(selectQuery))
{
qDebug() << "Failed to select data from trawe.db.";
return;
}
QSqlTableModel * model = new QSqlTableModel(this,db);
model->setTable("orderData");
ui->tableView->setModel(model);
model->select();
QStringList tables;
tables << "id"<< "订单id" << "入口" << "金额" << "车牌" << "车型" << "重量" << "时间";
for(int i = 1 ; i < tables.count(); i++)
model->setHeaderData(i,Qt::Horizontal,tables[i]);//设置显示框表头显示
model->setSort(1, Qt::AscendingOrder);//设置按照第0列排序
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置单元格不可编辑
ui->tableView->horizontalHeader()->setStretchLastSection(true);//设置最后一列填充后面表格
//ui->tableView->setColumnHidden(0,true);//设置第0行隐藏
ui->tableView->setColumnWidth(1,100);//设置列宽,界面看起来更舒适
ui->tableView->setColumnWidth(2,100);//设置列宽,界面看起来更舒适
}
(6)直接执行sql语句的功能;
/*
(1)INSERT INTO orderData (orderId, entry, money, plate, type, weight) VALUES ("63945", "滘口", "99", "粤A777Q1", "客一", "1800");
(2)UPDATE orderData SET entry = "滘口", money = "99", plate = "粤A777Q1", type = "客一", weight = "客一" WHERE orderId="22834";
(3)DELETE FROM orderData WHERE orderId=1234567;
*/
bool RobotDataBaseManager::queryExec(string strSql)
{
QString sql = QString::fromStdString(strSql);
QSqlQuery query;
query.prepare(sql);
if (!query.exec())
{
qDebug() << " queryExec ERROR: " << query.lastError().text();
return false;
}
qDebug() << "[数据库]: sql 语句执行成功: 结束~~~~~~~~~~~~~~~~~";
return true;
}
上面基本也涵盖主要的代码了。
完整的项目代码已上传,需要的可以下载。
QSqlDatabase实现数据库的基本功能,以及QTableView显示数据库表数据资源-CSDN文库
你可能感兴趣的:(QT,数据库,qt,c++,oracle)
c++实现贪吃蛇游戏
lyh不会打代码
算法 c++ 贪吃蛇 游戏策划
摘要:本文将介绍以C++编写贪吃蛇游戏的过程,包括游戏规则、设计思路、主要功能的实现以及注意事项。最后,我们给出了完整的C++代码,供读者参考和学习。目录引言游戏规则设计思路蛇的移动:食物生成:碰撞检测:画面绘制:具体实现注意事项最终代码总结引言贪吃蛇是一款经典的电子游戏,最初是在20世纪70年代普及的,现在已经成为了一种普遍的游戏形式。玩家操纵一个蛇,在屏幕上移动并吃掉食物,每吃掉一个食物,蛇就
Bug处理之执行自己编写代码中出现的AttributeError: ‘XXX’ object has no attribute’xxx’
NormanG
量化 编程基础
操作系统Windows10.0;PythonIDE:Pycharm2018.02Python版本:python3.6(anaconda平台)自己编写脚本搭建股票数据库问题描述:自己编写python脚本解决一些数据库搭建过程中的繁琐过程,方便以后重复调用;编写的类在导入应用时报错AttributeError:‘XXX’objecthasnoattribute’xxx’,之前未出现过,因为是重新修改代
快速排序_详解快速排序算法
网站推广优化yetaoaiueo
排序算法 算法
快速排序(Quicksort),计算机科学词汇,适用领域Pascal,c++等语言,是对冒泡排序算法的一种改进。快速排序的排序流程快速排序算法通过多次比较和交换来实现排序,其排序流程如下:(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值
Spring Boot整合RabbitMQ
Java架构设计
Java程序员 经验分享 程序人生 Java架构 spring boot
应用场景1.异步处理场景:用户注册完成后,需要发注册成功的邮件和短信,传统的做法有两种:串行的方式:将注册信息写入数据库后,发送注册成功的邮件,邮件发送成功后,再发送注册成功的短信。以上三个任务全部完成后才将注册成功的信息返回给客户端。存在的问题是:邮件和短信并不是必须的,它只是一个通知,串行的方式会让客户端等待没有必要等待的时间。并行的方式:将注册信息写入数据库后,同时发送注册成功的邮件和短信。
百问网imx6ullpro调试记录(linux+qt)
嵌入式修炼师
linux驱动 linux qt
调试记录文章目录调试记录进展1.开发板相关1.1百问网乌班图密码1.2换设备开发环境搭建串口调试网络互通nfs文件系统挂载1.3网络问题1.4系统启动1.5进程操作2.QT2.1tslib1.获取源码2.安装依赖文件3.编译2.2qt移植1.获取qt源码2.配置编译器3.编译2.3拷贝到开发板1.拷贝2.修改开发板配置文件qttslib3.验证是否生效2.4安装QtCreator1.获取安装包2.
Docker部署项目,Mysql数据库总是宕机并且上传数据全部被删除了
lemonMann
开发过程中遇到的问题及解决方案 数据库 docker 容器
刚开始排查原因我以为是一些内存占用问题的原因,后来查看数据库日志发现有多个异常ip尝试连接数据库并且也连接成功了随后数据库就被异常关闭了,然后我就重启容器远程连接数据库发现数据全没了,又在数据库中找到了如下内容:Allyourdataisbackedup.Youmustpay0.0080BTCtobc1q8r9zejh0ch22frh4pfdx2tlwf864sv42756yemIn48hours
MySQL——并发事务所带来的问题是什么?怎样去解决?MySQL的默认隔离级别是什么
lemonMann
MySQL mysql 数据库
一、并发事务所带来的问题1、脏读:就是一个事务对数据进行查询操作时而另一个事物在修改这条数据但未提交,这时进行查询操作的事务就会读取到未提交的数据也就是脏数据2、不可重复读:事务A查询一次数据接着事务B修改了数据并且已提交事务A继续执行操作查询数据读到了不一样的数据。3、幻读:事务执行查询数据时不存在,插入数据时却报错,再次查询时还是在。原因在于事务A查询的时候数据库确实没有对应索引的数据但之后事
mysql 记录客户端ip_MySQL查看所有连接的客户端ip
辉萱0623
mysql 记录客户端ip
有时候我们需要查看当前的mysql数据库中,有哪些客户端保持了连接,每个客户端分别保持了多少连接,可以使用下面的语句查询结果,可以直观的看到连接数。SELECTsubstring_index(host,':',1)AShostname,state,count(*)FROMinformation_schema.processlistGROUPBYstate,hostname;输出结果:mysql>S
Spring 事务隔离级别 事务传播特性 @Transactional使用
chudaxiakkk
spring的事务处理能力,本质上是数据库提供的。一个数据库具备事务,那么它必然支持4个特性,事务的4大特性原子性一致性隔离性持久性这4个特性,保证了数据库处理单事务是有保障的,正确的。更多应用处理场景下,是多事务并行出现的。同时,两个或两个以上的事务,操作同一张表,就会引起冲突。为了解决事务间交互产生的问题,数据库设置了4个隔离级别数据库的4大隔离级别readuncommitted(读未提交)B
qt 图形视图框架详解以及举例
爱学习的大牛123
qt开发 qt 数据库 开发语言
1基础介绍Qt的图形视图框架是一个强大的工具,用于创建和管理大量的2D图形项目。它由三个主要类组成:QGraphicsScene、QGraphicsView和QGraphicsItem。下面我将详细解释这个框架,并提供一些示例代码。1.框架组成a)QGraphicsScene(场景):-用于管理大量的2D图形项目-提供了一个高效的接口来添加、删除和查找项目b)QGraphicsView(视图):-
Qt Creator用法详解
不如温暖过生活
C++界面开发框架Qt最新资讯 Qt qtcreator
Qt自带集成开发环境(IDE),名为QtCreator。它可以在Linux、OSX和Windows上运行,并提供智能代码完成、语法高亮、集成帮助系统、调试器和剖析器集成,还集成了所有主要的版本控制系统(如git、Bazaar)。除了QtCreator外,Windows上的开发人员还可以使用Qt的VisualStudio插件。也可以使用其他的IDE(如KDE上的KDevelop)。但当然绝不是必须使
C#托管类型与非托管类型简析
_DRAGON__XU
C# c# 开发语言
C#托管类型与非托管类型定义托管对象指的是.net可以自动进行回收的资源,主要是指托管对象在堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,有.net运行库在合适的时间进行回收。当然,也可以使用GC.Collect手动回收。非托管对象指.net不知道如何回收的资源。例如文件、窗口、网络连接、数据库连接、画刷、图标等。这类资源,垃圾回收器在清理的时候会调用Object.Finalize()
QT 3D渲染技术详解
QT性能优化QT原理源码QT界面美化
qt 3d qt6.3 qt5 c++ QT教程
QT3D渲染技术详解使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费看免费QT视频课程QT界面美化视频免费看1QT_3D渲染技术概述1.13D渲染技术简介1.1.13D渲染技术简介3D渲染技
为什么数据库和数据库连接池不采用类似java nio的IO多路复用技术使用一个连接来维护和数据库的数据交换?
harmful_sheep
springboot 数据库 java nio
类似java的nio相比于传统阻塞io模型来说,有效率高(特别在高并发情况下)和资源耗费相对较少的优点。传统的阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(大部分情况下一个连接即可)。那么请问,数据库和数据库连接池为什么不采用这种方式?。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcatconnectionp
Qt QOpenGLFunctions详解
码农客栈_V13427279549
Qt qt
1.概述QOpenGLFunctions是Qt提供的一个工具类,用于封装OpenGL的函数调用。它使得在Qt应用程序中使用OpenGL更加方便和安全,同时提供了跨平台的兼容性。通过继承QOpenGLFunctions,开发者可以轻松地访问OpenGL的核心功能,而无需直接调用原生的OpenGLAPI。QOpenGLFunctions提供了大量封装的OpenGL函数,这些函数与OpenGL的原生函数
【C++】双指针算法专题
啊QQQQQ
c++ 数据结构 开发语言
目录前言对撞指针快慢指针习题练习1.移动零.-力扣(LeetCode)算法思路算法流程代码实现2.复写零.-力扣(LeetCode)算法思路算法流程代码实现3.快乐数.-力扣(LeetCode)算法思路算法流程代码实现4.盛水最多的容器.-力扣(LeetCode)算法思路代码实现5.有效三角形的个数.-力扣(LeetCode)算法思路代码实现6.和为S的两个数.-力扣(LeetCode)算法思路代
C/C++程序在不同环境中迁移时的注意事项
coolhuhu~
cpp 工程问题 linux c++ linux 工程实践
问题在你的开发环境中,编译、链接、运行测试都没问题,迁移到其他机器上运行程序时,程序运行不起来或运行异常。场景一开发环境的机器CPU为ARM架构,而测试环境的机器CPU为x86架构。场景二测试环境中缺乏程序依赖的库。体现在没有把开发环境中编译时所依赖的相关库迁移到测试环境中。场景三测试环境中程序运行时,所依赖库的版本不一致。一种场景是,程序在开发环境中编译、链接依赖libstdc++.so.6.0
golang 调用 c++ (cgo)
LRZ0001
Go c++ golang
文章目录目录结构各文件对应的代码library.hpplibrary.cpplibrary-bridge.hlibrary-bridge.cppmain.go方式一:调用静态链接库编译静态链接库运行方式二:调用动态链接库生成动态链接库运行注意:调用动态库会有加载不到的情况参考文章目录结构[root@localhostexample03]#tree.├──library│├──library-bri
golang调用c库函数
wx_kingstone
cpp golang c++ golang go c语言 cgo
golang调用c库函数c语言相关代码golang相关代码golang编译本文章介绍了golang如何调用c语言库函数。如果想调用c++库函数,建议在c++上再封一层c语言代码,编译成c语言动态库,再被golang调用。c语言相关代码cc文件、so编译省略c头文件,mytest.h#ifndef__MYTEST_H_#define__MYTEST_H_#ifdef__cplusplusextern
C#+SqlSugar实现主从库读写分离
管理大亨
大数据专题 c# 数据库 开发语言
在使用**SqlSugar**进行分库操作时,可以通过配置多个数据库连接,并根据业务逻辑动态切换数据库。以下是一个完整的分库示例,展示如何实现分库功能。---###**1.安装NuGet包**安装`SqlSugarCore`:```bashdotnetaddpackageSqlSugarCore```---###**2.分库场景**假设有两个数据库:-**主库**:用于写操作。-**从库**:用于
Spring Boot 示例项目:从零开始构建 Web 应用
梦落青云
JAVA spring boot java
一、项目概述本文档将指导您通过一个示例项目,了解如何使用SpringBoot框架构建一个简单的Web应用程序。该项目涵盖了从数据模型定义到控制器、服务层以及数据访问层的完整开发流程,帮助您快速掌握SpringBoot的基本使用方法。二、项目结构1.项目模块本示例项目分为以下几个主要模块:数据模型模块:负责定义与数据库表对应的实体类,使用JPA注解进行映射。控制器模块:处理客户端的HTTP请求,调用
使用PGVecto.rs在Postgres中进行向量数据库操作
dgay_hua
数据库 python
使用PGVecto.rs在Postgres中进行向量数据库操作技术背景介绍向量数据库是一种用于存储和检索高维向量数据的数据库,非常适合应用于自然语言处理、推荐系统等领域。在这篇文章中,我们将介绍如何使用PGVecto.rs在Postgres中进行向量数据库操作。核心原理解析PGVecto.rs是基于Postgres的向量数据库实现,可以轻松地实现向量的存储和高效检索。它通过Postgres的扩展实
单片机、嵌入式Linux开发大学自学路径
Oriental Son
嵌入式 MCU 单片机 单片机 学习 stm32 mcu linux
笔者所修读的专业为物联网工程,物联网工程是一门新兴的、热门的专业,其所涉及的学科更是又多又杂,既有计算机方向的编程语言(如C、C++、Java、Python等)、数据结构与算法、操作系统、移动端应用开发、机器学习等;软硬结合的方向有数字电路单片机开发、嵌入式Linux开发等;硬件、电路方向有电路分析、数字电路、模拟电路、传感器原理、RFID、FPGA开发等;涉及信号处理的有信号与系统、通信原理等。
SQL注入技术详解与过滤绕过方法
Cyc1e
sql 数据库 web 安全 网络
SQL注入技术详解与过滤绕过方法1.什么是SQL注入?SQL注入(SQLInjection)是一种常见的Web安全漏洞,指攻击者将恶意的SQL代码插入到应用程序的输入字段中,并通过应用程序发送到数据库进行执行,进而对数据库进行未授权操作。其可能导致敏感数据泄露、篡改、删除等严重后果。1.1SQL注入的工作原理SQL注入的核心在于,攻击者通过操控输入字段,使服务器端的SQL查询语句发生意料之外的变化
数据库(sql语句)
四代目 水门
数据库 数据库 sql
数据的操作1、插入数据,1.1单条记录插入:insertinto表名(字段1,字段2,字段3,……)values(值1,值2,值3,…);1.2批量记录插入:insertinto表名(字段1,字段2,字段3,……)values(值11,值21,值31,…),(值12,值22,值32,…),……;2、更新数据。2.1更新所有数据update表名set字段1=值1,字段2=值2,字段3=值2.2更新特
oracle 如果两条记录的id是相同的,如何删除其中一条
&loopy&
oracle 数据库
在Oracle数据库中,如果两条记录的id相同且需要删除其中一条记录,可以使用以下几种方法之一。以下示例假设你有一个名为your_table的表,其中id是主键或唯一标识符字段。方法一:使用ROWID由于Oracle允许使用ROWID来唯一标识表中的每一行,你可以使用ROWID来删除特定的记录。假设你已经确定要删除哪一条记录(例如,通过其他字段的差异),你可以执行以下操作:DELETEFROMyo
Redis 主从复制的原理详解
海里真的有鱼
redis 数据库 缓存
引言Redis作为一种高性能的内存数据库,广泛应用于高并发、低延迟的场景中。然而,单机版的Redis存在一定的局限性,尤其是在高可用性和负载均衡方面。为了应对这些挑战,Redis提供了主从复制(Replication)机制,使得一个Redis实例(主节点)可以将数据同步到其他多个实例(从节点)。主从复制是Redis集群高可用架构的基础,它不仅提高了系统的可用性,还为读写分离、数据备份等场景提供了支
从 size_t 到面试官的微笑:我的 C++ 面试历险记
Vitalia
C/C++ # 面试经验 c++ 面试 C
面试复盘之前面试遇到一些很好玩的事情,也学到了很多知识,积累了很多经验。某中厂面试的虚拟表演的第三轮:有一道题我用了经典for循环,大概这样:vectorarr={0,1,2);for(inti=0;i=0;i--){//xxxxxxxx}然后就搞笑了,超时,循环退不出来了。我一拍脑门,size_t是无符号类型诶,赶紧改成int,然后美滋滋。面试官一脸冷漠看完全程,说:我不会C++,也不知道你说的
【C++】类和对象-上
此生只爱蛋
C++ c++
>本系列为初阶C++的内容,如果感兴趣,欢迎订阅>个人主页:[小编的个人主页])小编的个人主页>欢迎大家点赞收藏⭐文章>✌️☝️目录前言类定义访问限定符类域实例化对象对象的大小this指针前言C语言是一门面向过程的语言,在C语言中,我们用结构体来定义复合数据类型的结构。C++在设计中保留了结构体(struct)类型的优点,C++引入了类,类已经包括了结构体类型的所有功能,并且功能更强,更符合面向对
C++设计模式9:装饰器模式
令狐掌门
C++/C# 设计模式 C++装饰器模式
C++23种设计模式系列文章目录创建型模式第1式工厂方法模式第2式抽象工厂模式第3式单例模式第4式建造者模式第5式原型模式结构型模式第6式适配器模式
java观察者模式
3213213333332132
java 设计模式 游戏 观察者模式
观察者模式——顾名思义,就是一个对象观察另一个对象,当被观察的对象发生变化时,观察者也会跟着变化。
在日常中,我们配java环境变量时,设置一个JAVAHOME变量,这就是被观察者,使用了JAVAHOME变量的对象都是观察者,一旦JAVAHOME的路径改动,其他的也会跟着改动。
这样的例子很多,我想用小时候玩的老鹰捉小鸡游戏来简单的描绘观察者模式。
老鹰会变成观察者,母鸡和小鸡是
TFS RESTful API 模拟上传测试
ronin47
TFS RESTful API 模拟上传测试。
细节参看这里:https://github.com/alibaba/nginx-tfs/blob/master/TFS_RESTful_API.markdown
模拟POST上传一个图片:
curl --data-binary @/opt/tfs.png http
PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式
dcj3sjt126com
设计模式 PHP
// 多态, 在JAVA中是这样用的, 其实在PHP当中可以自然消除, 因为参数是动态的, 你传什么过来都可以, 不限制类型, 直接调用类的方法
abstract class Tiger {
public abstract function climb();
}
class XTiger extends Tiger {
public function climb()
hibernate
171815164
Hibernate
main,save
Configuration conf =new Configuration().configure();
SessionFactory sf=conf.buildSessionFactory();
Session sess=sf.openSession();
Transaction tx=sess.beginTransaction();
News a=new
Ant实例分析
g21121
ant
下面是一个Ant构建文件的实例,通过这个实例我们可以很清楚的理顺构建一个项目的顺序及依赖关系,从而编写出更加合理的构建文件。
下面是build.xml的代码:
<?xml version="1
[简单]工作记录_接口返回405原因
53873039oycg
工作
最近调接口时候一直报错,错误信息是:
responseCode:405
responseMsg:Method Not Allowed
接口请求方式Post.
关于java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 的区别
程序员是怎么炼成的
真正完成类的加载工作是通过调用 defineClass来实现的;
而启动类的加载过程是通过调用 loadClass来实现的;
就是类加载器分为加载和定义
protected Class<?> findClass(String name) throws ClassNotFoundExcept
JDBC学习笔记-JDBC详细的操作流程
aijuans
jdbc
所有的JDBC应用程序都具有下面的基本流程: 1、加载数据库驱动并建立到数据库的连接。 2、执行SQL语句。 3、处理结果。 4、从数据库断开连接释放资源。
下面我们就来仔细看一看每一个步骤:
其实按照上面所说每个阶段都可得单独拿出来写成一个独立的类方法文件。共别的应用来调用。
1、加载数据库驱动并建立到数据库的连接:
Html代码
St
rome创建rss
antonyup_2006
tomcat cms xml struts Opera
引用
1.RSS标准
RSS标准比较混乱,主要有以下3个系列
RSS 0.9x / 2.0 : RSS技术诞生于1999年的网景公司(Netscape),其发布了一个0.9版本的规范。2001年,RSS技术标准的发展工作被Userland Software公司的戴夫 温那(Dave Winer)所接手。陆续发布了0.9x的系列版本。当W3C小组发布RSS 1.0后,Dave W
html表格和表单基础
百合不是茶
html 表格 表单 meta 锚点
第一次用html来写东西,感觉压力山大,每次看见别人发的都是比较牛逼的 再看看自己什么都还不会,
html是一种标记语言,其实很简单都是固定的格式
_----------------------------------------表格和表单
表格是html的重要组成部分,表格用在body里面的
主要用法如下;
<table>
&
ibatis如何传入完整的sql语句
bijian1013
java sql ibatis
ibatis如何传入完整的sql语句?进一步说,String str ="select * from test_table",我想把str传入ibatis中执行,是传递整条sql语句。
解决办法:
<
精通Oracle10编程SQL(14)开发动态SQL
bijian1013
oracle 数据库 plsql
/*
*开发动态SQL
*/
--使用EXECUTE IMMEDIATE处理DDL操作
CREATE OR REPLACE PROCEDURE drop_table(table_name varchar2)
is
sql_statement varchar2(100);
begin
sql_statement:='DROP TABLE '||table_name;
【Linux命令】Linux工作中常用命令
bit1129
linux命令
不断的总结工作中常用的Linux命令
1.查看端口被哪个进程占用
通过这个命令可以得到占用8085端口的进程号,然后通过ps -ef|grep 进程号得到进程的详细信息
netstat -anp | grep 8085
察看进程ID对应的进程占用的端口号
netstat -anp | grep 进程ID
&
优秀网站和文档收集
白糖_
网站
集成 Flex, Spring, Hibernate 构建应用程序
性能测试工具-JMeter
Hmtl5-IOCN网站
Oracle精简版教程网站
鸟哥的linux私房菜
Jetty中文文档
50个jquery必备代码片段
swfobject.js检测flash版本号工具
angular.extend
boyitech
AngularJS angular.extend AngularJS API
angular.extend 复制src对象中的属性去dst对象中. 支持多个src对象. 如果你不想改变一个对象,你可以把dst设为空对象{}: var object = angular.extend({}, object1, object2). 注意: angular.extend不支持递归复制. 使用方法: angular.extend(dst, src); 参数:
java-谷歌面试题-设计方便提取中数的数据结构
bylijinnan
java
网上找了一下这道题的解答,但都是提供思路,没有提供具体实现。其中使用大小堆这个思路看似简单,但实现起来要考虑很多。
以下分别用排序数组和大小堆来实现。
使用大小堆:
import java.util.Arrays;
public class MedianInHeap {
/**
* 题目:设计方便提取中数的数据结构
* 设计一个数据结构,其中包含两个函数,1.插
ajaxFileUpload 针对 ie jquery 1.7+不能使用问题修复版本
Chen.H
ajaxFileUpload ie6 ie7 ie8 ie9
jQuery.extend({
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context || s, xhr, status, e );
}
[机器人制造原则]机器人的电池和存储器必须可以替换
comsci
制造
机器人的身体随时随地可能被外来力量所破坏,但是如果机器人的存储器和电池可以更换,那么这个机器人的思维和记忆力就可以保存下来,即使身体受到伤害,在把存储器取下来安装到一个新的身体上之后,原有的性格和能力都可以继续维持.....
另外,如果一
Oracle Multitable INSERT 的用法
daizj
oracle
转载Oracle笔记-Multitable INSERT 的用法
http://blog.chinaunix.net/uid-8504518-id-3310531.html
一、Insert基础用法
语法:
Insert Into 表名 (字段1,字段2,字段3...)
Values (值1,
专访黑客历史学家George Dyson
datamachine
on
20世纪最具威力的两项发明——核弹和计算机出自同一时代、同一群年青人。可是,与大名鼎鼎的曼哈顿计划(第二次世界大战中美国原子弹研究计划)相 比,计算机的起源显得默默无闻。出身计算机世家的历史学家George Dyson在其新书《图灵大教堂》(Turing’s Cathedral)中讲述了阿兰·图灵、约翰·冯·诺依曼等一帮子天才小子创造计算机及预见计算机未来
小学6年级英语单词背诵第一课
dcj3sjt126com
english word
always 总是
rice 水稻,米饭
before 在...之前
live 生活,居住
usual 通常的
early 早的
begin 开始
month 月份
year 年
last 最后的
east 东方的
high 高的
far 远的
window 窗户
world 世界
than 比...更
在线IT教育和在线IT高端教育
dcj3sjt126com
教育
codecademy
http://www.codecademy.com codeschool
https://www.codeschool.com teamtreehouse
http://teamtreehouse.com lynda
http://www.lynda.com/ Coursera
https://www.coursera.
Struts2 xml校验框架所定义的校验文件
蕃薯耀
Struts2 xml校验 Struts2 xml校验框架 Struts2校验
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年7月11日 15:54:59 星期六
http://fa
mac下安装rar和unrar命令
hanqunfeng
mac
1.下载:http://www.rarlab.com/download.htm 选择
RAR 5.21 for Mac OS X 2.解压下载后的文件 tar -zxvf rarosx-5.2.1.tar 3.cd rar sudo install -c -o $USER unrar /bin #输入当前用户登录密码 sudo install -c -o $USER rar
三种将list转换为map的方法
jackyrong
list
在本文中,介绍三种将list转换为map的方法:
1) 传统方法
假设有某个类如下
class Movie {
private Integer rank;
private String description;
public Movie(Integer rank, String des
年轻程序员需要学习的5大经验
lampcy
工作 PHP 程序员
在过去的7年半时间里,我带过的软件实习生超过一打,也看到过数以百计的学生和毕业生的档案。我发现很多事情他们都需要学习。或许你会说,我说的不就是某种特定的技术、算法、数学,或者其他特定形式的知识吗?没错,这的确是需要学习的,但却并不是最重要的事情。他们需要学习的最重要的东西是“自我规范”。这些规范就是:尽可能地写出最简洁的代码;如果代码后期会因为改动而变得凌乱不堪就得重构;尽量删除没用的代码,并添加
评“女孩遭野蛮引产致终身不育 60万赔偿款1分未得”医腐深入骨髓
nannan408
先来看南方网的一则报道:
再正常不过的结婚、生子,对于29岁的郑畅来说,却是一个永远也无法实现的梦想。从2010年到2015年,从24岁到29岁,一张张新旧不一的诊断书记录了她病情的同时,也清晰地记下了她人生的悲哀。
粗暴手术让人发寒
2010年7月,在酒店做服务员的郑畅发现自己怀孕了,可男朋友却联系不上。在没有和家人商量的情况下,她决定堕胎。
12月5日,
使用jQuery为input输入框绑定回车键事件 VS 为a标签绑定click事件
Everyday都不同
jsp input 回车键绑定 click enter
假设如题所示的事件为同一个,必须先把该js函数抽离出来,该函数定义了监听的处理:
function search() {
//监听函数略......
}
为input框绑定回车事件,当用户在文本框中输入搜索关键字时,按回车键,即可触发search():
//回车绑定
$(".search").keydown(fun
EXT学习记录
tntxia
ext
1. 准备
(1) 官网:http://www.sencha.com/
里面有源代码和API文档下载。
EXT的域名已经从www.extjs.com改成了www.sencha.com ,但extjs这个域名会自动转到sencha上。
(2)帮助文档:
想要查看EXT的官方文档的话,可以去这里h
mybatis3的mapper文件报Referenced file contains errors
xingguangsixian
mybatis
最近使用mybatis.3.1.0时无意中碰到一个问题:
The errors below were detected when validating the file "mybatis-3-mapper.dtd" via the file "account-mapper.xml". In most cases these errors can be d