如何在SQLite数据库中插入纬度和经度-React Native



我无法将纬度和经度值保存到SQLite数据库中。它们是什么类型的数据?我尝试将它们插入为REAL、BLOB、NUMERIC和TEXT,但它们没有正确保存。这是我的代码:

const createTable = () => {
db.transaction((tx) => {
tx.executeSql(
"CREATE TABLE IF NOT EXISTS "
+ "Users "
+ "(ID INTEGER PRIMARY KEY AUTOINCREMENT, Title TEXT, Description TEXT, Latitude TEXT);"
)
})
}
//in the following function I want to insert Latitude into Users and display it in the console.log

const setData = async () => {
try {
dispatch(setTitle(title));
Geolocation.getCurrentPosition(info => dispatch(setLat(info.coords.latitude)));

console.log('latitudine:',lat); // i have my current latitude
await db.transaction(async (tx) => {
await tx.executeSql(
"INSERT INTO Users (Title, Latitude) VALUES (?,?)",
[title, lat]
);
}); 
await db.transaction(async (tx) => { 
await tx.executeSql(
"SELECT Title, Latitude FROM Users",
[],
(tx, results) => {
len = results.rows.length; 
if (len > 0) {
for (let i=0;i<len;i++){
var userTitle = results.rows.item(i).Title;
var userLatitude = results.rows.item(i).Latitude; 
console.log('userTitle: ',userTitle); // no display
console.log('Latitude from database: ',userLatitude); //no display
}
}
}
)
});
} catch (error) {
console.log(error);
}
}

如果我不在数据库中添加Latitude列,则函数工作正常,并且userTitle显示正确。我认为问题来自Latitude的列类型,但我不确定这一点。有人能帮我吗?非常感谢!

编辑:如果我只有3列(ID、Title、Latitude(,并且纬度的值保存为字符串,我就没有问题了(感谢Hitesh Prajapati!(。但是如果我在数据库中添加一列(例如经度(,我就会再次遇到问题。尤其是当我必须在"经度"列中插入新值时。我该如何解决这个问题?感谢

正如Hitesh Prajapati在对该问题的评论中所建议的那样,在将纬度保存在SQLite数据库中之前,需要将其转换为字符串-基于为其列定义的类型。

从文档中,getCurrentPosition返回一个对象,该对象的coords属性是GeolocationCoordinates对象,其longitudelatitude字段为类型。

因此,如果将纬度的列定义为Latitude TEXT,则需要将纬度转换为字符串。如果列类型设置为TEXT:,则经度列也需要相同的设置

...
// This assumes lat is assigned the value from info.coords.latitude
// And longitude is assigned the value from info.coords.longitude
await tx.executeSql(
"INSERT INTO Users (Title, Latitude, Longitude) VALUES (?,?)",
[title, lat.toString(), longitude.toString()]
);
...

最新更新