你好,我目前正在开发一个 Android 应用程序,该应用程序将商店的详细信息存储在 SQL 数据库中,用户使用该应用程序来搜索周围的商店。
我找到了一个称为半正矢的公式来查找具有纬度和经度值的两点之间的距离。
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
Run Code Online (Sandbox Code Playgroud)
但我对此感到困惑,我不知道哪个 lat 和 lng 值指的是什么!如果有人可以重写上面的代码,使我的用户对店主拥有位置 lat1 和 lng1,那么它就是 lat2 和 lng2。你也能告诉我那是什么吗
acos
Run Code Online (Sandbox Code Playgroud) 如何更改默认的 SQLite 时区?
插入我的记录时,我希望 SQlite 使用+3:30时区。
我创建了一个非常简单的数据库Android 应用程序。它需要输入并显示结果。添加按钮用于添加输入,删除按钮用于删除存储在 SQLite 数据库中的输入。我在 Android SQLite 中的光标指向正确,但仍然面临错误:Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow。在访问游标中的数据之前,请确保游标已正确初始化。以下是游标部分: Cursor c = db.rawQuery(query, null);
c.moveToFirst();
//Traversing through DB
while (!c.isAfterLast()){
if(c.getString(c.getColumnIndex("studentname")) !=null)
{
dbString += c.getString(c.getColumnIndex("studentname"));
dbString +="\n"; }
c.moveToNext(); }
db.close();
return dbString;
Run Code Online (Sandbox Code Playgroud)
我尝试更改光标位置,但仍然出现相同的错误。我在其他网站上进行了研究,概念也是如此,但仍然存在问题。
如何在assets文件夹中保存.db或.sqlite.这时我正在这样做:
@Override
public void onCreate(SQLiteDatabase db) {
mDatabase = db;
SQLiteDatabase.openOrCreateDatabase("assets/"+DATABASE_NAME+".db", null);
mDatabase.execSQL(FTS_TABLE_CREATE);
}
Run Code Online (Sandbox Code Playgroud)
但openOrCreateDatabase给出错误.我尝试使用.db和.sqlite,但错误是一样的.
可能重复:
如何将现有数据库与Android应用程序一起使用
如何将.db文件从资产放入data/data/packagename /而不使用资产中的.db文件复制内容.我不想创建数据库,因为将.db文件放在资产中是没用的.我探索它,但所有再次创建数据库但我只想直接放置.db文件.
有没有办法通过表中的索引/位置获取行,而不是通过其id?
例如,我有3行ID:
Record1
Record2
Record3
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用其id删除第二行,其余行将如下所示:
Record1
Record3
Run Code Online (Sandbox Code Playgroud)
因为我使用ListViewposition来确定要删除的数据库中的哪一行,所以下次我尝试删除第二行时,我会得到异常,因为id为2的行不存在.
那么有一种方法可以通过表中的索引检索行吗?
我在4.4版本中运行的android模拟器上做了很多测试.在我的应用程序上,我使用SQLiteOpenHelper创建一个带有一个表的sqlite数据库:
package com.findwords.modeles;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import com.findwords.MainActivity;
import com.findwords.controleurs.MenuController;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Created by louk on 02/01/14.
*/
public class DictionaryDbHelper extends SQLiteOpenHelper{
// declare constants fields
private static final String DB_PATH = "/data/data/com.findwords/databases/";
private static final String DB_NAME = "dictionary_db";
private static final int DB_VERSION = 1;
// declared constant SQL Expression
private static final String DB_CREATE =
"CREATE TABLE dictionary ( " +
"_id integer …Run Code Online (Sandbox Code Playgroud) 我在sqlite中有两个表,它们与一个id"连接".使用此表的应用程序在Android OS上运行.
表格1;:
|id| entry 1| entry2|
|1 | aaaaaa | aaaaa |
|2 | bbbbbb | bbbbb |
Run Code Online (Sandbox Code Playgroud)
表2:
|id| entryx| constant|
|1 | aaaaa | aaaaaaaa|
|1 | baaaa | baaaaaaa|
|1 | caaaa | caaaaaaa|
|2 | ababa | baabaaba|
Run Code Online (Sandbox Code Playgroud)
目前,我使用循环删除带有以下查询的条目:
do{
db.delete("Table 1","id='"+cid+"'",null);
db.delete("Table 2","id='"+cid+"'",null);
}
while(getNextID());
Run Code Online (Sandbox Code Playgroud)
我想使用外键,它允许我删除表1中的条目,并且表2中的所有条目也被删除.此外,我必须考虑表2中的数据在插入表2之前插入.如何使用外键来执行此操作?该表使用id作为int,它是主键,第二个表使用相同的表.
我想将图像保存在sqlite中。在这种方法中,我将图像路径转换为字符串。我的问题是如何将其转换为byte []格式。
if (resultCode == RESULT_OK) {
// we need to update the gallery by starting MediaSanner service.
mScanner = new MediaScannerConnection(ImagePreviewActivity.this,new MediaScannerConnection.MediaScannerConnectionClient() {
public void onMediaScannerConnected() {
mScanner.scanFile(imageUri.getPath(), null );
}
public void onScanCompleted(String path, Uri uri) {
mScanner.disconnect();
if (path.equals(imageUri.getPath())) {
photoPath=imageUri.getPath();
ImagePreviewActivity.this.runOnUiThread(new Runnable() {
public void run() {
capture_photo = (ImageView) findViewById(R.id.caturePhoto);
Bitmap myBitmap = BitmapFactory.decodeFile(photoPath);
capture_photo.setImageBitmap(myBitmap);
}
});
mScanner.disconnect();
}
}
});
mScanner.connect();
Run Code Online (Sandbox Code Playgroud) 我想知道为什么ORMLite和GreenDAO比传统的SQLite更快?根据我的知识,内部所有人都在与SQLite等数据库交互时做同样的问题,为什么其他人更快?提前致谢 !!
android ×10
android-sqlite ×10
sqlite ×3
foreign-keys ×1
greendao ×1
java ×1
mysql ×1
ormlite ×1
sql ×1
sql-server ×1