用SQLite存Mac地址,使用哪种数据类型方便操作?

zonedearbaby 2014-09-22 04:25:52
目前尝试过了2种类型:BLOB、char(6)
我尝试着以
2中方法我都是这么写入的 INSERT ... VALUES(...,...,0x123456789111,...,...);
或者0b101110111....10111101101;
调试提示unrecognized token: "0x123456789111"
我似乎太天真了。
难不成用6个byte拼起来再写入?有没有更好的办法?
...全文
561 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zonedearbaby 2014-09-23
  • 打赏
  • 举报
回复
全部搞定了,谢谢关注。
int ret=-1;
	CString strSQL=_T("CREATE TABLE ");
	strSQL+=lpTableName;
	strSQL+=_T("\
			   (AddressID INTEGER PRIMARY KEY,\
			   HostID INTEGER,\
			   HostName TEXT,\
			   Mac BLOB,\
			   Ip interger);\
			   ");
	ret=m_SQLiteDB.ExecuteSQL(strSQL);
	if(SQLITE_OK==ret)
		return TRUE;
	else
		return FALSE;
int ret;
	BYTE szMac[7]={0x11,0x11,0x11,0x11,0x11,0x11};
	DWORD dwIP=IpStrToDword("220.31.56.24");
     
	CString strSQL;
	strSQL.Format(_T("INSERT INTO Address_TBL VALUES(1,1,'HostName',?,%u);"),dwIP);
	ret=m_SQLiteDB.WriteBlob(strSQL,szMac,6);
	if(SQLITE_OK!=ret)
		return FALSE;

	strSQL.Empty();
	strSQL=_T("SELECT Mac FROM Address_TBL WHERE HostName='HostName';");
	BYTE *pMac=NULL;
	int nLen=-1;
    ret=m_SQLiteDB.ReadBlob(strSQL,&pMac,&nLen);
	if(SQLITE_OK!=ret)
		return FALSE;
	
	if(6==nLen)
	{
		BYTE szMacRead[6]={0};

		szMacRead[0]=pMac[0];
		szMacRead[1]=pMac[1];
		szMacRead[2]=pMac[2];
		szMacRead[3]=pMac[3];
		szMacRead[4]=pMac[4];
		szMacRead[5]=pMac[5];
	}

	SQLite::TablePtr pResult=NULL;
	pResult=m_SQLiteDB.QuerySQL2(strSQL);

	CString strValue=pResult.m_pTable->GetValue(4);
	DWORD dwIpRead=_wtoi(strValue);
如上,可插入可查询,2项操作结果一致。
zonedearbaby 2014-09-23
  • 打赏
  • 举报
回复
zonedearbaby 2014-09-23
  • 打赏
  • 举报
回复
引用 5 楼 nice_cxf 的回复:
[quote=引用 4 楼 zonedearbaby 的回复:]
BYTE szMac[6]={0x21,0x21,0x21,0x21,0x31,0x11};
	DWORD dwIP=0x12345678;
	CString strSQL;
	strSQL.Format(_T("INSERT INTO XX_TBL(1,1,'XX','%s');"),szMac);
解决!
显然是不行的,ip地址里面是有可能有为0的字节,如果有就错了,如果空间没问题的话,转成字符串保存即可[/quote]
int ret;
	BYTE szMac[6]={0x11,0x11,0x11,0x11,0x11,0x11};
	//DWORD dwIP=0x12345678;
	DWORD dwIP=IpStrToDword("220.31.56.24");
	CString strSQL;
	strSQL.Format(_T("INSERT INTO Address_TBL VALUES(1,1,'HostName','%s',%d);"),szMac,dwIP);
	ret=m_SQLiteDB.ExecuteSQL(strSQL);
	if(SQLITE_OK!=ret)
		return FALSE;
这么存IP我之后取出来看了是没什么问题的,现在还是MAC的问题,试试jwj070524的方法。
jwj070524 2014-09-22
  • 打赏
  • 举报
回复
MAC地址48位,可以用一个64位的整形数据来存储,前面6个字节存储MAC地址,最后两位忽略。
nice_cxf 2014-09-22
  • 打赏
  • 举报
回复
引用 4 楼 zonedearbaby 的回复:
BYTE szMac[6]={0x21,0x21,0x21,0x21,0x31,0x11};
	DWORD dwIP=0x12345678;
	CString strSQL;
	strSQL.Format(_T("INSERT INTO XX_TBL(1,1,'XX','%s');"),szMac);
解决!
显然是不行的,ip地址里面是有可能有为0的字节,如果有就错了,如果空间没问题的话,转成字符串保存即可
zonedearbaby 2014-09-22
  • 打赏
  • 举报
回复
BYTE szMac[6]={0x21,0x21,0x21,0x21,0x31,0x11};
	DWORD dwIP=0x12345678;
	CString strSQL;
	strSQL.Format(_T("INSERT INTO XX_TBL(1,1,'XX','%s');"),szMac);
解决!
zonedearbaby 2014-09-22
  • 打赏
  • 举报
回复
这只是插入工作部分, 到时候我取出来该怎么取,如果用byte szMac[6]当缓冲的话,我感觉它48位略麻烦啊。
zonedearbaby 2014-09-22
  • 打赏
  • 举报
回复
引用 1 楼 wb136959813 的回复:
挣点积分!!!!!!
你也太快了。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧