qt的数据库
⑴ qt的数据库实现是怎样的
完整的代码给你了:
data.h
#define DB_SALES_DRIVER "QMYsql3"
#define DB_SALES_DBNAME "CAAS"
#define DB_SALES_USER "root"
#define DB_SALES_PASSWD ""
#define DB_SALES_HOST ""
main.cpp
#include <qapplication.h>
#include <qsqldatabase.h>
#include <qsqlquery.h>
#include <qsqlcursor.h>
#include <qtextedit.h>
#include <qstring.h>
#include <qtextcodec.h>
#include <qvbox.h>
#include "data.h"
#include <stdio.h>
#include <qpushbutton.h>
class MyQVBox : public QVBox
{
public:
MyQVBox( QWidget *parent=0, const char *name=0 );
//public slots:
// refValue(QSrting lzw);
};
MyQVBox::MyQVBox( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QString Lzw("\n");
QSqlDatabase *defaultDB = QSqlDatabase::addDatabase(DB_SALES_DRIVER);
if ( defaultDB )
{
defaultDB->setDatabaseName( DB_SALES_DBNAME );
defaultDB->setUserName( DB_SALES_USER );
defaultDB->setPassword( DB_SALES_PASSWD );
defaultDB->setHostName( DB_SALES_HOST );
if ( defaultDB->open() )
{
//插入数据
QSqlQuery query("INSERT INTO test(ID,Name,Age) VALUES(1155, 'Ginger', 125);" );
//提取数据
QSqlCursor cur( "test" ); // 指定表/视图名称
cur.select(); // 我们将检索每一条记录
while ( cur.next() )
{
qDebug( cur.value( "ID" ).toString() + ": " +
cur.value( "Name" ).toString() + " " +
cur.value( "Age" ).toString() );
Lzw.append(cur.value( "ID" ).toString() + ": " +
cur.value( "Name" ).toString() + " " +
cur.value( "Age" ).toString()+"\n");
}
//qDebug(Lzw);
printf("aaaaaaa");
}
}
QString ustr = (QTextCodec::codecForLocale())->toUnicode(Lzw);
QString sstr = (QTextCodec::codecForLocale())->toUnicode("刷新");
QTextEdit *myEdit = new QTextEdit(this,0);
myEdit->setText(ustr);
QPushButton *quit = new QPushButton(sstr, this, "quit" );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
}
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
MyQVBox *mybox = new MyQVBox(0,0);
//mybox->setText(ustr);
app.setMainWidget(mybox);
mybox->show();
return app.exec();
}
⑵ QT中数据库问题
1.query内封装了sql语句,调用sql语句操作数据库第一步先构建QSqlQuery。
2.str 是一条sql语句,意思是查找list表中num=%1的所有行,%1的值由num赋予。
3.query.exec执行了str这条sql语句。此时如果sql语句没问题,query中已经保存了查询结果。
4.query.next意思是如果查询结果中有下一条(默认从第0条开始),返回true 否则返回false.
是人都应该懂了
⑶ QT中怎么把edit的值更新到数据库中
一、引入
数据库创建的问题解决了,接下来就该使用数据库实现应用程序功能的时候了。基
本的操作包括创建、读取、更新、删除,即我们通常说的 CRUD(Create, Read, Update, Delete)。
在实现这些操作的时候,我们会使用到两个比较重要的类 SQLiteDatabase 类和 Cursor 类。
二、创建表
1,execSQL(String sql):执行一条 sql 语句,且执行操作不能为 SELECT
因为它的返回值为 void,所以推荐使用 insert、update 方法等
2.,execSQL (String sql,Object[] bindArgs)
sql:执行一条 sql 语句
bindArgs:为 sql 语句中的?赋值
三、添加数据
1、execSQL(String sql)
2、使用对象的 insert 方法
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
db.insert(TABLE_NAME, null, values);
参数:
table:数据库中的表名
nullColumnHack:指定默认插入字段,为 null 时能插入数据
values:表示插入字段所对应的值,使用 put 方法。
四、删除数据
1、execSQL(String sql)
2、使用对象的 delete 方法
String whereClaues="_id=?";
String [] whereArgs={String.valueOf(id)};
//db.delete(TABLE_NAME, "_id="+id, null);
db.delete(TABLE_NAME, whereClaues, whereArgs);
参数
table:数据库的表名
whereClause:where 子句,比如:_id=?
whereArgs:where 子句中?的值
五、修改数据
1、execSQL(String sql)
2、使用对象的 delete 方法
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
String whereClaues="_id=?";
String [] whereArgs={String.valueOf(user.getId())};
db.update(TABLE_NAME, values, whereClaues, whereArgs);
参数
table:数据库的表名
values:代表要修改的值,修改方法还是 put(key,values)
whereClause:条件子句,比如 id=?,name=?
whereArgs:为 whereClause 中的?赋值,比如:new String[]{"1","张三"}
图:
参考代码:
程序内使用SQLite数据库是通过SQLiteOpenHelper进行操作
1. 自己写个类继承SQLiteOpenHelper,重写以下3个方法
public void onCreate(SQLiteDatabase db)
{//创建数据库时的操作,如建表}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//版本更新的操作
}
2. 通过SQLiteOpenHelper的getWritableDatabase()获得一个SQLiteDatabase数据库,以后的操作都是对SQLiteDatabase进行操作。
3. 对得到的SQLiteDatabase对象进行增,改,删,查等操作。
代码
package cx.myNote;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
//DBOptions for login
public class DBOptions {
private static final String DB_NAME = "notes.db";
private static final String DB_CREATE="create table logininf(name text,pwd text)";
public class DBHelper extends SQLiteOpenHelper
{
public DBHelper(Context context) {
super(context,DB_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
//建表
db.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("drop table if exists logininf");
onCreate(db);
}
}
private Context context;
private SQLiteDatabase db;
private DBHelper dbHelper;
public DBOptions(Context context)
{
this.context = context;
dbHelper = new DBHelper(context);
db=dbHelper.getReadableDatabase();
}
//自己写的方法,对数据库进行操作
public String getName()
{
Cursor cursor = db.rawQuery("select name from logininf", null);
cursor.moveToFirst();
return cursor.getString(0);
}
public int changePWD(String oldP,String pwd)
{
ContentValues values = new ContentValues();
values.put("pwd", pwd);
return db.update("logininf", values,"pwd="+oldP, null);
}
}
insert方法插入的一行记录使用ContentValus存放,ContentValues类似于Map,它提供了put(String key, Xxx value)(其中key为数据列的列名)方法用于存入数据、getAsXxxx(String key)方法用于取出数据
⑷ qt怎样创建数据库以及数据库的操作
QT创建和插入的操作代码如下:
bool database::createDatabase()
{
QSqlQuery query; // 此处请查询 query的相关操作
qDebug() << "Start to create table...";
//create table: User
query.exec("CREATE TABLE [User] ( [userId] VARCHAR(40) NOT NULL, [username] VARCHAR(40) NOT NULL, [email] VARCHAR(40), [password] VARCHAR(40), [city] VARCHAR(20), PRIMARY KEY([userId]) )"); // 一定注意不要拼写错误,引号内是不提示拼写错误的。
//create table: Connect
query.exec("CREATE TABLE [Connect] ( [LeftUser] VARCHAR(40) NOT NULL, [RightUser] VARCHAR(40) NOT NULL, [relation] INTEGER DEFAULT '0' NULL, PRIMARY KEY ([LeftUser], [RightUser]))");
if (query.lastError().isValid())
{
qDebug() << query.lastError();
return false;
}
else
{
qDebug() << "Create database successfully.";
}
return true;
}
插入操作
bool database::adser( User user )
{
if (!db.isOpen())
{
createconnection();
}
QSqlQuery query;
qDebug() << "start to insert data";
query.exec("INSERT INTO [User] ( userId, username, email, password, city) VALUES(?,?,?,?,?)");
QVariantList userId;
userId << user.getUserId();
query.addBindValue(userId);
QVariantList username;
username << user.getUserName();
query.addBindValue(username);
QVariantList email;
email << user.getEmail();
query.addBindValue(email);
QVariantList password;
password << user.getPassword();
query.addBindValue(password);
QVariantList city;
city << user.getCity();
query.addBindValue(city);
try
{
if (!query.execBatch())
{
qDebug() << query.lastQuery();
qDebug() << query.lastError();
return NULL;
}
}
catch(...)
{
QMessageBox::critical(0, "Add New Node error!",
"Unable to add a new Node!/n/n"
"Click Cancel to exit.", QMessageBox::Cancel);
}
if( !UpdateConnectTable(user.getUserId(),user.getUserId(),2))
{
QMessageBox::critical(0,"","Update table Connect error");
return NULL;
}
return true;
}
⑸ 查看Qt支持哪些数据库
Qt默认是支持QSQLITE数据库的
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setHostName("acidalia"); db.setDatabaseName("customdb"); db.setUserName("mojito"); db.setPassword("J0a1m8"); bool ok = db.open();
⑹ Qt的数据库
query对象未与db绑定 -- 在哪执行啊?
⑺ 用qt库做设计用mysql数据库好还是用sqlserver好
都很强大,具体选用哪个跟你用数据库的需求以及使用环境等有关。如果你的编程环境是微软windows服务器,使用微软系的编程语言,比如C#、VB等,那么sql server肯定是首选;如果你对数据库的企业化要求非常高,比如非常完善的日志管理、sql代码优化等,oracle这方面做的不错;如果你是用php等来做轻量级网站编程,mysql则是非常好的搭档,php自带的mysqli工具包对操作mysql来说非常方便。
另外,从好学不好学这个角度来说的话,想入门都很好学,想精通都得下一番功夫!
⑻ 怎么在QT的类中打开一个数据库,让所有的对象都能够使用
定义一个QTcpSocket对象被实例化在了前面,它是使用线路传递到每个窗体的指针。 QObject的类及其子类不能被复制,常常使用指针,以便用啊。
⑼ QT数据库
网上下载“精通QT4编程.pdf”或“QT4从入门到精通.pdf”,里面有较详细的说明
⑽ qt creator怎么查询数据库内容
qt creator怎么查询数据库内容:
U-boot中有一个用来保存很多有用信息的全局结构体 --gd_t(global data缩写),其中包括了bd变量,可以说gd_t结构体包括了u-boot中所有重要全局变量。最后传递给内核的参数,都是从gd和bd中来的,如上 述的setup_memory_tags函数的作用就是用bd中的值来初始化RAM相应的tag。
对于ARM平台这个结构体的定义大致如下:
include/asm-arm/global_data.h
typedef struct global_data {
bd_t *bd;
unsigned long flags;
unsigned long baudrate;
unsigned long have_console; /* serial_init() was called */
unsigned long reloc_off; /* Relocation Offset */
unsigned long env_addr; /* Address of Environment struct */
unsigned long env_valid; /* Checksum of Environment valid? */
unsigned long fb_base; /* base address of frame buffer */
void **jt; /* jump table */
} gd_t;
在U-boot中使用gd结构之前要用先用宏DECLARE_GLOBAL_DATA_PTR来声明。这个宏的定义如下:
include/asm-arm/global_data.h
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")
从这个宏的定义可以看出,gd是一个保存在ARM的r8寄存器中的gd_t结构体的指针。
说明:本文的版本为U-boot-1.3.4、Linux-2.6.28,平台是ARM。