『壹』 C#sqlite 創建資料庫時怎麼判斷當前創建的資料庫是否存在
select sql from sqlite_master where tbl_name='your_table' and
type='table';
這樣到查詢會得到your_table表到創建sql語句,你可以根據這個結果來判斷是否存在此欄位。
『貳』 sqlite3登錄判斷是否匹配注冊資料庫
//此代碼為實現賬號密碼登錄驗證void Login()
{
users a; int rc;
sqlite3 *db; //SQLite資料庫指針 sqlite3結構體 *db指向sqlite3結構體的指針
const char *pFileName = "users.db";
char * zErr; /* 定義返回錯誤信息的變數*/
rc = sqlite3_open(pFileName, &db); /*打開資料庫*/
if(rc) /*假,關閉資料庫*/
{
cleardevice();
setmode();
settextstyle(30, 0, "楷體");
settextcolor(RGB(0,500,0));
outtextxy(220, 200, "打開資料庫失敗!");
voice_No_name();
main();
sqlite3_close(db);
}
InputBox(a.id,10,"請輸入賬號");
outtextxy(295,270,a.id);
InputBox(a.pwd,10,"請輸入密碼");
outtextxy(293,339,"********");
Sleep(1500);
char *pSQL=sqlite3_mprintf("insert into users(id,pwd)values('%s','%s')",a.id,a.pwd);
//主要是獲取rc返回值,進行判斷 // id和pwd共同組成一個表的主鍵(聯合主鍵) id/pwd誰都不能插入重復的 rc==1 錯誤 if取反rc==0登錄成功 //插入的id不同pwd不同 插入成功 rc==0 if取反rc==1登陸失敗 //相當於用戶名不能有重復的,用戶名跟密碼不能一樣,增強賬號的安全性。
rc = sqlite3_exec(db, pSQL, NULL, NULL, &zErr);//!rc==1; error
if (!rc)
{ //刪除多餘的數據
char *pSQL=sqlite3_mprintf("delete from users where id = '%s' and pwd = '%s' ",a.id,a.pwd);
rc = sqlite3_exec(db, pSQL, NULL, NULL, &zErr);
cleardevice();
setmode();
settextstyle(30, 0, "楷體");
settextcolor(RGB(255,0,0));
outtextxy(250, 200, "登錄失敗!");
Sleep(1000);
cleardevice();
main();
} else ///rc=0 ok {
cleardevice();
setmode();
settextstyle(30, 0, "楷體");
settextcolor(RGB(0,500,0));
outtextxy(250, 200, "登錄成功,歡迎使用!");
voice_succeed();
cleardevice();
option_Menu();
}
sqlite3_close(db);
}
『叄』 如何判斷SQLite資料庫是否已經關閉
關於資料庫句柄,每次用完是必須手動調用close()方法關掉的;
關於cursor一般情況也是要求關掉的,如果只獲取了一次結果集,不關掉cursor對程序的邏輯沒有影響,只是會拋一個非必要性異常,但是如果多次獲取結果集,就必須先關掉cursor,再重新獲取結果集,否則cursor沒釋放,之後的結果集是獲取不到的,且會報錯。所以,總的來說,都要關掉。
『肆』 SQLITE3 如何打開.db的資料庫文件查看文件內容
1、打開程序後,可以看到程序左邊的「資料庫列表」。展開可以查看到所有打開過的資料庫。
『伍』 sqlite資料庫怎麼打開
1、打開程序後,可以看到程序左邊的「資料庫列表」。展開可以查看到所有打開過的資料庫。
『陸』 android中在使用sqlite3時怎麼判斷要打開的資料庫是否已經被打開,在打開資料庫之前怎樣獲取到資料庫的狀
我之前要將外部的資料庫讀進來的做法是:
將db文件放在res的raw路徑(可以自己添加這個路徑)下面,要打開它的時候這樣:
private String filename = DB_PATH+"/"+DB_NAME;
DB_PATH我是這樣定義的:
public static final String DB_PATH = "/data"+Environment.getDataDirectory().getAbsolutePath()
+"/"+PACKAGE_NAME;
DB_NAME肯定就是你資料庫的名字啦。
public void open()throws SQLException
{
writefromraw(filename);
db = opendatabase();
}
private void writefromraw(String dbfile) {
// TODO Auto-generated method stub
try {
if (!(new File(dbfile).exists())) {
InputStream is = mContext.getResources().openRawResource(
R.raw.livetv_database);
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
} catch (FileNotFoundException e) {
Log.e("Database", "File not found");
e.printStackTrace();
} catch (IOException e) {
Log.e("Database", "IO exception");
e.printStackTrace();
}
}
『柒』 android開發 怎樣判斷sqlite資料庫是打開還是關閉的
下載一個Linux 的sqlite3工具(或到SqLite網站下載sqlite的源代碼,在你的系統中編譯出sqlite3工具),用這個工具打開:
sqlite3 /tmp/test.db
『捌』 ios 從哪些方面去做sqlite 資料庫的優化
先來看看.h文件
#import <Foundation/Foundation.h>
#import <sqlite3.h>
#define kFilename @"testdb.db"
@class sqlTestList;
@interface sqlService : NSObject {
sqlite3 *_database;
}
@property (nonatomic) sqlite3 *_database;
-(BOOL) createTestList:(sqlite3 *)db;//創建資料庫
-(BOOL) insertTestList:(sqlTestList *)insertList;//插入數據
-(BOOL) updateTestList:(sqlTestList *)updateList;//更新數據
-(NSMutableArray*)getTestList;//獲取全部數據
- (BOOL) deleteTestList:(sqlTestList *)deletList;//刪除數據:
- (NSMutableArray*)searchTestList:(NSString*)searchString;//查詢資料庫,searchID為要查詢數據的ID,返回數據為查詢到的數據
@end
@interface sqlTestList : NSObject//重新定義了一個類,專門用於存儲數據
{
int sqlID;
NSString *sqlText;
NSString *sqlname;
}
@property (nonatomic) int sqlID;
@property (nonatomic, retain) NSString *sqlText;
@property (nonatomic, retain) NSString *sqlname;
@end
再來看看.m文件
//
// sqlService.m
// SQLite3Test
//
// Created by fengxiao on 11-11-28.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "sqlService.h"
@implementation sqlService
@synthesize _database;
- (id)init
{
return self;
}
- (void)dealloc
{
[super dealloc];
}
//獲取document目錄並返回資料庫目錄
- (NSString *)dataFilePath{
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"=======%@",documentsDirectory);
return [documentsDirectory :@"data.db"];//這里很神奇,可以定義成任何類型的文件,也可以不定義成.db文件,任何格式都行,定義成.sb文件都行,達到了很好的數據隱秘性
}
//創建,打開資料庫
- (BOOL)openDB {
//獲取資料庫路徑
NSString *path = [self dataFilePath];
//文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
//判斷資料庫是否存在
BOOL find = [fileManager fileExistsAtPath:path];
//如果資料庫存在,則用sqlite3_open直接打開(不要擔心,如果資料庫不存在sqlite3_open會自動創建)
if (find) {
NSLog(@"Database file have already existed.");
//打開資料庫,這里的[path UTF8String]是將NSString轉換為C字元串,因為SQLite3是採用可移植的C(而不是
//Objective-C)編寫的,它不知道什麼是NSString.
if(sqlite3_open([path UTF8String], &_database) != SQLITE_OK) {
//如果打開資料庫失敗則關閉資料庫
sqlite3_close(self._database);
NSLog(@"Error: open database file.");
return NO;
}
//創建一個新表
[self createTestList:self._database];
return YES;
}
//如果發現資料庫不存在則利用sqlite3_open創建資料庫(上面已經提到過),與上面相同,路徑要轉換為C字元串
if(sqlite3_open([path UTF8String], &_database) == SQLITE_OK) {
//創建一個新表
[self createTestList:self._database];
return YES;
} else {
//如果創建並打開資料庫失敗則關閉資料庫
sqlite3_close(self._database);
NSLog(@"Error: open database file.");
return NO;
}
return NO;
}
//創建表
- (BOOL) createTestList:(sqlite3*)db {
//這句是大家熟悉的SQL語句
char *sql = "create table if not exists testTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, testID int,testValue text,testName text)";// testID是列名,int 是數據類型,testValue是列名,text是數據類型,是字元串類型
sqlite3_stmt *statement;
//sqlite3_prepare_v2 介面把一條SQL語句解析到statement結構里去. 使用該介面訪問資料庫是當前比較好的的一種方法
NSInteger sqlReturn = sqlite3_prepare_v2(_database, sql, -1, &statement, nil);
//第一個參數跟前面一樣,是個sqlite3 * 類型變數,
//第二個參數是一個 sql 語句。
//第三個參數我寫的是-1,這個參數含義是前面 sql 語句的長度。如果小於0,sqlite會自動計算它的長度(把sql語句當成以\0結尾的字元串)。
//第四個參數是sqlite3_stmt 的指針的指針。解析以後的sql語句就放在這個結構里。
//第五個參數是錯誤信息提示,一般不用,為nil就可以了。
//如果這個函數執行成功(返回值是 SQLITE_OK 且 statement 不為NULL ),那麼下面就可以開始插入二進制數據。
//如果SQL語句解析出錯的話程序返回
if(sqlReturn != SQLITE_OK) {
NSLog(@"Error: failed to prepare statement:create test table");
return NO;
}
//執行SQL語句
int success = sqlite3_step(statement);
//釋放sqlite3_stmt
sqlite3_finalize(statement);
//執行SQL語句失敗
if ( success != SQLITE_DONE) {
NSLog(@"Error: failed to dehydrate:create table test");
return NO;
}
NSLog(@"Create table 'testTable' successed.");
return YES;
}
//插入數據
-(BOOL) insertTestList:(sqlTestList *)insertList {
//先判斷資料庫是否打開
if ([self openDB]) {
sqlite3_stmt *statement;
//這個 sql 語句特別之處在於 values 裡面有個? 號。在sqlite3_prepare函數里,?號表示一個未定的值,它的值等下才插入。
static char *sql = "INSERT INTO testTable(testID, testValue,testName) VALUES(?, ?, ?)";
int success2 = sqlite3_prepare_v2(_database, sql, -1, &statement, NULL);
if (success2 != SQLITE_OK) {
NSLog(@"Error: failed to insert:testTable");
sqlite3_close(_database);
return NO;
}
//這里的數字1,2,3代表上面的第幾個問號,這里將三個值綁定到三個綁定變數
sqlite3_bind_int(statement, 1, insertList.sqlID);
sqlite3_bind_text(statement, 2, [insertList.sqlText UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 3, [insertList.sqlname UTF8String], -1, SQLITE_TRANSIENT);
//執行插入語句
success2 = sqlite3_step(statement);
//釋放statement
sqlite3_finalize(statement);
//如果插入失敗
if (success2 == SQLITE_ERROR) {
NSLog(@"Error: failed to insert into the database with message.");
//關閉資料庫
sqlite3_close(_database);
return NO;
}
//關閉資料庫
sqlite3_close(_database);
return YES;
}
return NO;
}
//獲取數據
- (NSMutableArray*)getTestList{
NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
//判斷資料庫是否打開
if ([self openDB]) {
sqlite3_stmt *statement = nil;
//sql語句
char *sql = "SELECT testID, testValue ,testName FROM testTable";//從testTable這個表中獲取 testID, testValue ,testName,若獲取全部的話可以用*代替testID, testValue ,testName。
if (sqlite3_prepare_v2(_database, sql, -1, &statement, NULL) != SQLITE_OK) {
NSLog(@"Error: failed to prepare statement with message:get testValue.");
return NO;
}
else {
//查詢結果集中一條一條的遍歷所有的記錄,這里的數字對應的是列值,注意這里的列值,跟上面sqlite3_bind_text綁定的列值不一樣!一定要分開,不然會crash,只有這一處的列號不同,注意!
while (sqlite3_step(statement) == SQLITE_ROW) {
sqlTestList* sqlList = [[sqlTestList alloc] init] ;
sqlList.sqlID = sqlite3_column_int(statement,0);
char* strText = (char*)sqlite3_column_text(statement, 1);
sqlList.sqlText = [NSString stringWithUTF8String:strText];
char *strName = (char*)sqlite3_column_text(statement, 2);
sqlList.sqlname = [NSString stringWithUTF8String:strName];
[array addObject:sqlList];
[sqlList release];
}
}
sqlite3_finalize(statement);
sqlite3_close(_database);
}
return [array retain];//定義了自動釋放的NSArray,這樣不是個好辦法,會造成內存泄露,建議大家定義局部的數組,再賦給屬性變數。
}
//更新數據
-(BOOL) updateTestList:(sqlTestList *)updateList{
if ([self openDB]) {
sqlite3_stmt *statement;//這相當一個容器,放轉化OK的sql語句
//組織SQL語句
char *sql = "update testTable set testValue = ? and testName = ? WHERE testID = ?";
//將SQL語句放入sqlite3_stmt中
int success = sqlite3_prepare_v2(_database, sql, -1, &statement, NULL);
if (success != SQLITE_OK) {
NSLog(@"Error: failed to update:testTable");
sqlite3_close(_database);
return NO;
}
附上出處鏈接:http://www.cnblogs.com/xiaozhu/archive/2012/12/07/2808170.html
『玖』 C#怎麼測試sqlite連接是否成功
連接失敗 SQLiteConnection.Open(); 這句直接就會拋出異常。
另外可以隨時通過 SQLiteConnection 對象的 State 屬性來判斷資料庫連接狀態,正常的話應該是 ConnectionState.Open 狀態的。
另外你報錯的詳細信息是什麼?
『拾』 android sqlite 判斷有沒有資料庫
把資料庫變數改成靜態變數,或者用單例模式。 這樣應用層就可以用資料庫變數,直接判斷是否被打開了。