【问题标题】:Not able to INSERT to SQLite database无法插入到 SQLite 数据库
【发布时间】:2020-12-24 19:46:25
【问题描述】:

我正在获取一个位置的纬度和经度信息并将它们添加到 SQLite。看起来我创建数据库没有问题,但我的插入不起作用。这是我的代码:

private GoogleMap mMap;
    Button button;
    double _lat,_lon;
    Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        intent = getIntent();
        _lat = intent.getDoubleExtra("yenie",0);
        _lon = intent.getDoubleExtra("yenib",0);
        button = findViewById(R.id.kaydet);
        SQLiteDatabase database = this.openOrCreateDatabase("Konumlar",MODE_PRIVATE,null);
        database.execSQL("CREATE TABLE IF NOT EXISTS knm (lat DOUBLE,lon DOUBLE)");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    database.execSQL("INSERT INTO knm (lat,lon) VALUES (_lat,_lon)");
                    Toast.makeText(getApplicationContext(),"sa",Toast.LENGTH_LONG);
                }
                catch (Exception e){
                    
                }
            }
        });
    }

据我调试了解,在 onClick() 方法中,插入失败并被捕获。我的问题可能是什么?提前致谢。

【问题讨论】:

  • Log Exception 正在被抓到,以获取有关它的线索..

标签: java android sqlite android-sqlite


【解决方案1】:

您想在表中插入变量 _lat_lon 的值,但您的 sql 语句改为使用它们的名称。
这样 SQLite 将名称视为当然不存在的列名,这会引发异常。

推荐的插入行的方法是使用insert()ContentValues方法:

ContentValues cv = new ContentValues();
cv.put("lat", _lat);
cv.put("lon", _lon);
int rowid = database.insert("knm", null, cv);

您可以查看rowid的值。
如果是-1,则插入失败。
任何其他值都是插入行的rowid

【讨论】:

    【解决方案2】:

    latlon 字段的类型在您的 CREATE TABLE 查询中指定为 DOUBLE,而在您的 INSERT 查询中您尝试插入 String(_lat & _lon ) 值。

    我相信,您正在尝试插入来自Bundle 的值,即_lat_lon 的值。

    因此,为了解决您的错误,请重写您的INSERT 查询,如下所示。

    database.execSQL("INSERT INTO knm (lat,lon) VALUES (" + _lat + "," + _lon + ")");
    

    【讨论】:

    • 很高兴它有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多