本人數據庫新手,在創建表時出現問題,最后經查證,找出問題所在。下面的程序是部分節選,在創建數據庫表的時候,起先使用的L24的CreateDB,經測試,一直輸出 Create testResult Fail,
query->isActive()也為false,這就說明問題出在createDB上,也就是說這個QString應該是不符合要求才出錯的。后來逐個測試,最后發現是
check varchar(100)的原因,經查看check是數據庫關鍵字。
1 //創建數據庫文件路徑 2 testResultPath = APPDIR + "/TestReport/"; 3 QDir my_dir(testResultPath); 4 if (!my_dir.exists()) 5 my_dir.mkpath(testResultPath); 6 testResultPath += "testResult.db"; 7 8 //創建數據庫 9 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 10 //db.setHostName("easybook-3313b0"); //可以省略 11 db.setDatabaseName(testResultPath); 12 //db.setUserName("CETG54th"); //設置數據庫用戶名,可以省略 13 //db.setPassword("123456"); //設置數據庫密碼,可以省略 14 db.open(); 15 if (!db.isOpen()) 16 { 17 qDebug() << "db is not open"; 18 return; 19 } 20 21 22 //創建數據庫表 23 QSqlQuery *query = new QSqlQuery("", db); 24 //const QString createDB = "create table testResult(id int primary key,testDevice varchar(100),project varchar(100),exc varchar(100),display varchar(100),result varchar(100),time varchar(100),check varchar(100))"; //fail 25 26 const QString createDB = "create table testResult(id int primary key,testDevice varchar(100),project varchar(100),exc varchar(100),display varchar(100),result varchar(100),time varchar(100),viewInfo varchar(100))"; //success 27 28 if (query->exec(createDB)) 29 qDebug() << "Create testResult Successful"; 30 else 31 qDebug() << "Create testResult Fail"; 32 33 qDebug() << query->isActive();
下面羅列了數據庫關鍵字
A
ABSOLUTE ACTION ADD ADMINDB
ALL ALLOCATE ALPHANUMERIC ALTER
AND ANY ARE AS
ASC ASSERTION AT AUTHORIZATION
AUTOINCREMENT AVG
B
BAND BEGIN BETWEEN BINARY
BIT BIT_LENGTH BNOT BOR
BOTH BXOR BY BYTE
C
CASCADE CASCADED CASE CAST
CATALOG CHAR CHARACTER CHAR_LENGTH
CHARACTER_LENGTH CHECK CLOSE COALESCE
COLLATE COLLATION COLUMN COMMIT
COMP COMPRESSION CONNECT CONNECTION
CONSTRAINT CONSTRAINTS CONTAINER CONTINUE
CONVERT CORRESPONDING COUNT COUNTER
CREATE CREATEDB CROSS CURRENCY
CURRENT CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
CURRENT_USER CURSOR
D
DATABASE DATE DATETIME DAY
DEALLOCATE DEC DECIMAL DECLARE
DEFAULT DEFERRABLE DEFERRED DELETE
DESC DESCRIBE DESCRIPTOR DIAGNOSTICS
DISALLOW DISCONNECT DISTINCT DOMAIN
DOUBLE DROP
E
ELSE END END-EXEC ESCAPE
EXCEPT EXCEPTION EXCLUSIVECONNECT EXEC
EXECUTE EXISTS EXTERNAL EXTRACT
F
FALSE FETCH FIRST FLOAT
FLOAT4 FLOAT8 FOR FOREIGN
FOUND FROM FULL
G
GENERAL GET GLOBAL GO
GOTO GRANT GROUP GUID
H
HAVING HOUR
I
IDENTITY IEEEDOUBLE IEEESINGLE IGNORE
IMAGE IMMEDIATE IN INDEX
INDICATOR INHERITABLE INITIALLY INNER
INPUT INSENSITIVE INSERT INT
INTEGER INTEGER1 INTEGER2 INTEGER4
INTERSECT INTERVAL INTO IS
ISOLATION
J
JOIN
K
KEY
L
LANGUAGE LAST LEADING LEFT
LEVEL LIKE LOCAL LOGICAL
LOGICAL1 LONG LONGBINARY LONGCHAR
LONGTEXT LOWER
M
MATCH MAX MEMO MIN
MINUTE MODULE MONEY MONTH
N
NAMES NATIONAL NATURAL NCHAR
NEXT NO NOT NOTE
NULL NULLIF NUMBER NUMERIC
O
OBJECT OCTET_LENGTH OF OLEOBJECT
ON ONLY OPEN OPTION
OR ORDER OUTER OUTPUT
OVERLAPS OWNERACCESS
P
PAD PARAMETERS PARTIAL PASSWORD
PERCENT PIVOT POSITION PRECISION
PREPARE PRESERVE PRIMARY PRIOR
PRIVILEGES PROC PROCEDURE PUBLIC
Q
R
READ REAL REFERENCES RELATIVE
RESTRICT REVOKE RIGHT ROLLBACK
ROWS
S
SCHEMA SCROLL SECOND SECTION
SELECT SELECTSCHEMA SELECTSECURITY SESSION
SESSION_USER SET SHORT SINGLE
SIZE SMALLINT SOME SPACE
SQL SQLCODE SQLERROR SQLSTATE
STRING SUBSTRING SUM SYSTEM_USER
T
TABLE TABLEID TEMPORARY TEXT
THEN TIME TIMESTAMP TIMEZONE_HOUR
TIMEZONE_MINUTE TO TOP TRAILING
TRANSACTION TRANSFORM TRANSLATE TRANSLATION
TRIM TRUE
U
UNION UNIQUE UNIQUEIDENTIFIER UNKNOWN
UPDATE UPDATEIDENTITY UPDATEOWNER UPDATESECURITY
UPPER USAGE USER USING
V
VALUE VALUES VARBINARY VARCHAR
VARYING VIEW
W
WHEN WHENEVER WHERE WITH
WORK WRITE
X
Y
YEAR YESNO
Z
ZONE
上面的關鍵字主要轉自http://zhidao.baidu.com/link?url=RmJBWdmrnxciebfhmXsiJF3bZzgb1Yw0ywkhugHxcyBLKMixClmJl8pulL-m7sasPaAoUgzPqYFlGyPH5gQ36TJOsn7j_iGHDLAbXbfQrJe
另外如果使用數據庫出現的問題非上述問題,則推薦博客http://www.cnblogs.com/findumars/p/4207133.html,希望有幫助。