问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

下面这段sqlite3下的sql,怎样修改可以在mysql下运行啊?

发布网友 发布时间:2022-04-28 18:20

我来回答

3个回答

懂视网 时间:2022-04-30 15:12

SQLITE_API int sqlite3_open(
 const char *filename, /* Database filename (UTF-8) */
 sqlite3 **ppDb  /* OUT: SQLite db handle */
);

sqlite3_close — 关闭一个sqlite数据库

SQLITE_API int sqlite3_close(sqlite3*);

示例1:创建并打开sqlite数据库

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSLog(@"documentsPath: %@",documentsPath);

NSString *databasePath = [documentsPath stringByAppendingPathComponent:@"personinfo.sqlite"];
NSLog(@"databasePath: %@",databasePath);

int state = sqlite3_open([databasePath UTF8String], &db);
NSLog(@"%d",state);

if(state != SQLITE_OK) {
 sqlite3_close(db);
 NSLog(@"数据库打开失败");
}

sqlite3_exec — 执行非查询的sql语句

SQLITE_API int sqlite3_exec(
 sqlite3*,     /* An open database */
 const char *sql,    /* SQL to be evaluated */
 int (*callback)(void*,int,char**,char**), /* Callback function */
 void *,     /* 1st argument to callback */
 char **errmsg    /* Error msg written here */
);

示例2:执行创建表、插入数据操作

- (BOOL)execSql:(NSString *)sql {
 char *err;
 if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
 sqlite3_close(db);
 NSLog(@"execute sql fail!");
 return NO;
 }
 else {
 NSLog(@"execute sql succeed!");
 return YES;
 }
}

- (IBAction)createTable:(id)sender {
 NSLog(@"button clicked");
 NSString *strSql = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)";
 
 [self execSql:strSql];
}

- (IBAction)insertAction:(id)sender {
 NSLog(@"insert action");
 NSString *sql1 = [NSString stringWithFormat:
   @"INSERT INTO ‘PERSONINFO‘ (‘name‘, ‘age‘, ‘address‘) VALUES (‘%@‘, ‘%@‘, ‘%@‘)",
   @"张三", @"23", @"西城区"];
 
 NSString *sql2 = [NSString stringWithFormat:
   @"INSERT INTO ‘PERSONINFO‘ (‘name‘, ‘age‘, ‘address‘) VALUES (‘%@‘, ‘%@‘, ‘%@‘)",
   @"老六", @"20", @"东城区"];
 [self execSql:sql1];
 [self execSql:sql2];
}

sqlite3_stmt — 相当于ODBC的command对象,用于保存编译好的sql语句

sqlite3_prepare_v2 — 这个函数将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针。它实际上并不执行这个sql语句,仅仅为执行而准备这个sql语句,也就是说,在调用该函数成功(SQLITE_OK)后,sqlite3_stmt将不再为空对象。

SQLITE_API int sqlite3_prepare_v2(
 sqlite3 *db,  /* Database handle(数据库指针) */
 const char *zSql, /* SQL statement, UTF-8 encoded(使用UTF-8编码的SQL语句) */
 int nByte,  /* Maximum length of zSql in bytes.(如果nByte小于0,则函数取出zSql中从开始到第一个0终止符的内容;如果nByte为非负数,那么它就是这个函数能从zSql中读取的最大字节数。如果nBytes为非负数,zSql在第一次遇见/000或u000的时候终止) */
 sqlite3_stmt **ppStmt, /* OUT: Statement handle(能够使用sqlite3_step()执行的编译好的准备语句的指针,如果错误发生,它被置为NULL,例如输入一个不正确的sql语句。调用过程必须负责在编译好的sql语句完成使用后,调用sqlite3_finalize()删除它。 */
 const char **pzTail /* OUT: Pointer to unused portion of zSql(当zSql在遇见终止符或者达到设定的nByte结束后,如果还有剩余的内容,那么这些剩余的内容将被存放到pzTail中,不包含终止符) */
);

sqlite3_step — 执行由sqlite3_prepare创建的准备语句。当调用后返回SQLITE_ROW,则代表还有更多行,可继续调用sqlite3_step直至返回SQLITE_DONE。对于insert、update或delete语句,也可以用sqlite3_step来执行,但更推荐用sqlite3_exec。

SQLITE_API int sqlite3_step(sqlite3_stmt*);

sqlite3_step的返回值取决于创建sqlite3_stmt参数所使用的函数,假如使用老版本的接口sqlite3_prepare()或sqlite3_prepare16(),返回值会是SQLITE_BUSY、SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR 或 SQLITE_MISUSE;而v2版本的接口sqlite3_prepare_v2()和sqlite3_prepare16_v2()除了这些值以外,还可能返回扩展状态码。

sqlite3_reset — 重置一个准备语句(prepared statement)对象到它的初始状态,准备被重新执行。在V3.6.23.1以后,sqlite3_step()将会自动调用sqlite3_reset。

SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);

sqlite3_finalize — 销毁一个准备语句(prepared statement)对象,在需要时执行这个销毁函数以防止内存泄露。在准备语句对象为空指针时调用这个函数也没有什么影响。

SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);

示例3:利用sqlite3_step执行更新操作 

- (IBAction)updateAction:(id)sender {
 NSString *sqlQuery = @"update PERSONINFO set address=‘成都市‘ where age=‘20‘";

 sqlite3_stmt *statement;
 
 if(sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
 if(sqlite3_step(statement) == SQLITE_DONE) {
  NSLog(@"update succeed");
 }
 else {
  NSLog(@"update failed");
 }
 }
 sqlite3_finalize(statement);
}

sqlite3_column — 并不存在sqlite3_column这个函数,它只是一个前缀,下面是相关的具体函数:

SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol);
SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol);
SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol);
SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);

上面的函数用来得到结果集当前行中某一列的值,列索引从0开始。

示例4:查询并打印出结果集

- (IBAction)selectAction:(id)sender {
 NSString *sqlQuery = @"SELECT * FROM PERSONINFO";
 sqlite3_stmt *statement;
 
 if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
 while (sqlite3_step(statement) == SQLITE_ROW) {
  char *cID = (char*)sqlite3_column_text(statement, 0);
  NSString *strID = [[NSString alloc] initWithUTF8String:cID];
  
  char *cName = (char*)sqlite3_column_text(statement, 1);
  NSString *strName = [[NSString alloc] initWithUTF8String:cName];
  
  int age = sqlite3_column_int(statement, 2);
  
  char *cAddress = (char*)sqlite3_column_text(statement, 3);
  NSString *strAddress = [[NSString alloc] initWithUTF8String:cAddress];
  
  NSLog(@"id:%@ name:%@ age:%d address:%@",strID, strName, age, strAddress);
 }
 }
 sqlite3_finalize(statement);
}

sqlite3基础

标签:

热心网友 时间:2022-04-30 12:20

网上找了很多资料。发现都是有问题的。
比较接近要求有的。http://stackoverflow.com/questions/18671/quick-easy-way-to-migrate-sqlite3-to-mysql
在他基础上进行改造。
python代码
import re
import fileinput

def this_line_is_useless(line):
useless_es = [
'BEGIN TRANSACTION',
'COMMIT',
'sqlite_sequence',
'CREATE UNIQUE INDEX',
]
for useless in useless_es:
if re.search(useless, line):
return True

def has_primary_key(line):
return bool(re.search(r'PRIMARY KEY', line))

searching_for_end = False
for line in fileinput.input():
if this_line_is_useless(line): continue

if re.match(r".*, ''\);", line):
line = re.sub(r"''\);", r'``);', line)
if re.match(r'^CREATE TABLE.*', line):
searching_for_end = True

m = re.search('CREATE TABLE "?([a-z0-9_]*)"?(.*)', line)
if m:
name, sub = m.groups()
line = "DROP TABLE IF EXISTS %(name)s;\nCREATE TABLE IF NOT EXISTS `%(name)s`%(sub)s\n"
line = line % dict(name=name, sub=sub)
else:
m = re.search('INSERT INTO "([a-z0-9_]*)"(.*)', line)
if m:
line = 'INSERT INTO %s%s\n' % m.groups()
line = line.replace('"', r'\"')
line = line.replace('"', "'")
line = re.sub(r"([^'])'t'(.)", "\1THIS_IS_TRUE\2", line)
line = line.replace('THIS_IS_TRUE', '1')
line = re.sub(r"([^'])'f'(.)", "\1THIS_IS_FALSE\2", line)
line = line.replace('THIS_IS_FALSE', '0')
if searching_for_end:
if re.search(r"integer(?:\s+\w+)*\s*PRIMARY KEY(?:\s+\w+)*\s*,", line):
line = line.replace("PRIMARY KEY", "PRIMARY KEY AUTO_INCREMENT")
line = line.replace('"', '`').replace("'", '`')

if re.match(r".*, ``\);", line):
line = re.sub(r'``\);', r"'');", line)

if searching_for_end and re.match(r'.*\);', line):
searching_for_end = False

if re.match(r"CREATE INDEX", line):
line = re.sub('"', '`', line)

if re.match(r'ANALYZE sqlite_master', line):
line = ''

if re.match(r'INSERT INTO sqlite_stat1', line):
line = ''

if line is not None:
print line,
执行
sqlite3 your.db .mp | python mp_for_mysql.py > mp.sql
之后联接数据库过程中需要设置联接以后编码为utf-8
然后导入mp.sql执行。ok了。
其中可能会出现错误
varchar(64,0)
手工修改为varchar(64)
=_=追问sqlite3数据库中的表可以导出为sql文件,mysql数据库中的表也可以。但是后者导出的sql根前者导出的存在一些细微的差异。

热心网友 时间:2022-04-30 13:38

这不像Java也不像js追问sql是数据库查询语言,不是编程语言哦。

sql是数据库查询语言,不是编程语言哦。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
i9502联通卡放置用认准卡位 I9502,SIM1切换SIM网络上网问题 如何批量删除iphone5s通讯录 中联通信飞越JSY2000-FY(832端口)一般规格 中联通信飞越JSY2000-FY重要参数 JSY2000-FY如何设置离位转移? 特权分机如何代普通分机设置叫醒? 中联的JSY2000-FY如何用话机设置免打扰? 垂直分析法分析什么表 零基础学雅思一年多少费用 sqlite数据库怎样转成到sql server中 mysql转为sqlite 如何把redmine的数据从sqlite导入到mysql 怎么添加sqlite数据库到mysql中 哪位朋友可以帮我或者教我把一个sqlite数据库转换为mysql数据库? 如何将 Ghost 从 SQLite3 数据库迁移到 MySQL 数据库 怎么实现SQLite数据库与MySql数据库相互传递数据,将SQLite里数据传到服 ... 怎样将Sqlserver数据库转成mysql数据库 拼多多砍价为什么我这个号申请的会跑到另一个账号上去? sqlite里的表有数据但无数据类型怎么把sqlite数据库迁移到mysql 如何优雅的将数据从sqlite3迁移到mysql 拼多多砍价自己另一个可以砍吗? 您好.. 我也是想把sqlite数据库转化为mysqll数据库? 请问怎么转化呢... 如何将django中的sqlite3换成mysql 拼多多砍价自己另一个可以砍吗? 日本留学语言学校有年龄限制吗 去日本留学需要先考日语吗? 想去日本留学,什么条件可以办理? 去日本留学对年龄有限制吗? 装修贷可以提前还吗 本地应用的SQLite数据库如何与服务器的MySQL同步 怎样让Mysql数据库与android系统中的SQLite数据库进行数据同步? 脸上什么样的痣不能点?长在哪的痣不能点? 脸上什么位置的痣不能点? 怎样投诉韵达快递,谁知道邮管局电话12305怎么是空号? 12305是空号怎么回事 12305怎么是空号 在excel的编辑过程中 在sheet2中 怎样为一个选定表格自动套用彩色2的表格样式 自行套用表格样式“清单表2-着色5 2010excel表格自动套用格式彩色2,找得到自动套用格式,但怎么看哪个是彩色2?光标放在上面时 office2010中Excel自动套用“彩色2“和”三维效果2”格式怎么操作, 《红岩》第一章读后感 红岩 第一章的读后感 红岩第一章节读后感250个字 《红岩第一章》好词好句和读后感,谢谢(*°∀°)=3 excel图表形状样式设置为“彩色轮廓,红色,强调文字2” 红岩第一章主要内容和读后感 红岩第一章读后感谁有? 红岩1-4读后感 红颜第一章读后感300字