如何将新数据插入SQLite

时间:2015-03-16 12:40:55

标签: java database sqlite android-sqlite android-maps-v2

我是这里的新手。
我需要将新数据(Lat,Lng)插入到SQLite数据库中,这样我就可以显示表格中的所有标记。
这是我的代码,MySQLiteHelper.java。

是否正确?
请帮帮我

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MySQLiteHelper extends SQLiteOpenHelper{
    public static final String TABLE_LOCATIONS = "locations";
    public static final String NAMA = "id_title";
    public static final String ID_COL = "loc_id";
    public static final String TITLE = "loc_title";
    public static final String SNIPPET = "loc_snippet";
    public static final String POSITION = "loc_position";

    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "parkir.db";
    private static final String DATABASE_CREATE = "create table " 
      + TABLE_LOCATIONS + "(" + ID_COL
      + " integer primary key autoincrement, "
      + " text, "+ TITLE
      + " text, " + SNIPPET
      + " text, " + POSITION
      + " text);";

    public MySQLiteHelper(Context context){
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);
        SQLiteDatabase dba = this.getWritableDatabase();
        ContentValues v=new ContentValues();
        v.put(MySQLiteHelper.POSITION, "-6.368590, 106.832702");
        v.put(MySQLiteHelper.TITLE, "Parkiran Kampus D");
        v.put(MySQLiteHelper.SNIPPET, "Kampus Gunadarma yang terletak di Margonda");
        dba.insert(MySQLiteHelper.TABLE_LOCATIONS, null,v); 
        v.put(MySQLiteHelper.POSITION, "-6.353212, 106.841462");
        v.put(MySQLiteHelper.TITLE, "Parkiran Kampus E");
        v.put(MySQLiteHelper.SNIPPET, "Kampus Gunadarma yang terletak di Kelapa Dua");
        dba.insert(MySQLiteHelper.TABLE_LOCATIONS, null,v);     
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(MySQLiteHelper.class.getName(),
        "Upgrading database from version " + oldVersion + " to "
            + newVersion + ", which will destroy all old data");

        db.execSQL("DROP TABLE IF EXISTS" + TABLE_LOCATIONS);
        onCreate(db);
    }

}

这是MyMarker.java代码

import com.google.android.gms.maps.model.LatLng;

public class MyMarker {
    private long id;
    private String title;
    private String snippet;
    private String position;
    private LatLng poLatLng;

    public MyMarker() {
    }

    public MyMarker(long id, String title, String snippet, LatLng poLatLng) {
        this.id = id;
        this.title = title;
        this.snippet = snippet;
        this.poLatLng = poLatLng;
        this.position = String.valueOf(poLatLng.latitude) + " " + String.valueOf(poLatLng.longitude);

    }
    public MyMarker(String title, String snippet, LatLng poLatLng){
        this.title = title;
        this.snippet = snippet;
        this.poLatLng = poLatLng;
        this.position = String.valueOf(poLatLng.latitude) + " " + String.valueOf(poLatLng.longitude);

    }


    /**
     * @return the id
     */
    public long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * @return the title
     */
    public String getTitle() {
        return title;
    }

    /**
     * @param title the title to set
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * @return the snippet
     */
    public String getSnippet() {
        return snippet;
    }

    /**
     * @param snippet the snippet to set
     */
    public void setSnippet(String snippet) {
        this.snippet = snippet;
    }

    /**
     * @return the position
     */
    public String getPosition() {
        return position;
    }

    /**
     * @param position the position to set
     */
    public void setPosition(LatLng poLatLng) {
        this.poLatLng = poLatLng;
        this.position = String.valueOf(poLatLng.latitude) + " " + String.valueOf(poLatLng.longitude);
    }

    /**
     * @param position needs to be Latitude</space/>Longitude
     */
    public void setPosition(String position) {
        this.position = position;
        String[] pos = position.split(" ");
        this.poLatLng = new LatLng(Double.valueOf(pos[0]), Double.valueOf(pos[1]));
    }

    public LatLng getLatLng (){
        return poLatLng;
    }

}

这是我的Dataparkir.java代码

import android.content.ContentValues;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
import android.database.Cursor;
import android.util.Log;

public class Dataparkir {

    private SQLiteDatabase db;
    private MySQLiteHelper dbhelper;
//    String id, String title, String snippet, String position
    private String[] allColumns = {  
        MySQLiteHelper.TITLE, 
        MySQLiteHelper.SNIPPET, 
        MySQLiteHelper.POSITION };

    public Dataparkir(Context context){
        dbhelper = new MySQLiteHelper(context);
    }
    public void open() throws SQLException{
        db = dbhelper.getWritableDatabase();
    }

    public void close(){
        dbhelper.close();
    }

    public void addMarker(MyMarker m){
        ContentValues v = new ContentValues();

        v.put(MySQLiteHelper.TITLE, m.getTitle());
        v.put(MySQLiteHelper.SNIPPET, m.getSnippet());       
        v.put(MySQLiteHelper.POSITION, m.getPosition());

        long insertId = db.insert(MySQLiteHelper.TABLE_LOCATIONS, null,
        v);       
            Cursor cursor = db.query(MySQLiteHelper.TABLE_LOCATIONS,
        allColumns, MySQLiteHelper.ID_COL + " = " + insertId, null,
        null, null, null);

        cursor.moveToFirst();
        MyMarker mm = cursorToMarker(cursor);
        cursor.close();
    }

    public List<MyMarker> getMyMarkers(){
        List<MyMarker> markers = new ArrayList<MyMarker>();   
         Cursor cursor = db.query(MySQLiteHelper.TABLE_LOCATIONS, 
                 allColumns, null, null, null, null, null); 
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {            
            MyMarker mm = cursorToMarker(cursor);
            markers.add(mm);
            cursor.moveToNext();
        }
        cursor.close();

        return markers;
    }

    private MyMarker cursorToMarker(Cursor cursor) {
        MyMarker mm = new MyMarker();
        mm.setTitle(cursor.getString(0));
        mm.setSnippet(cursor.getString(1));
        mm.setPosition(cursor.getString(2));
        return mm;


    }

}

这是我的MainActivity.java

import java.util.List;

import android.content.Context;
import android.content.IntentSender;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.LatLng;



    public class MainActivity extends FragmentActivity implements
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener,
    LocationListener,
    com.google.android.gms.location.LocationListener {

    public static final String TAG = MainActivity.class.getSimpleName();
    private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
    private GoogleMap googleMap; 
    private GoogleApiClient googleApiClient;
    private LocationRequest locationRequest;
    private LocationManager locationManager;
    private Criteria criteria;
    private Location location;
    private SQLiteDatabase db;
    private Context context = this;
    private Dataparkir data = new Dataparkir(context);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setUpMapIfNeeded();
    setUpMap();

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    // Creating a criteria object to retrieve provider
    criteria = new Criteria();
    // Getting the name of the best provider
    String provider = locationManager.getBestProvider(criteria, true);
    // Getting Current Location
    Location location = locationManager.getLastKnownLocation(provider);
        if(location!= null){
            onLocationChanged(location);
        }
    googleApiClient = new GoogleApiClient.Builder(this)
    .addConnectionCallbacks(this)
    .addOnConnectionFailedListener(this)
    .addApi(LocationServices.API)
    .build();

    // Create the LocationRequest object
    locationRequest = LocationRequest.create()
    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
    .setInterval(10 * 1000) // 10 seconds, in milliseconds
    .setFastestInterval(1 * 1000); // 1 second, in milliseconds

    // Showing / hiding your current location
        googleMap.setMyLocationEnabled(true);
        // Enable / Disable zooming controls
        googleMap.getUiSettings().setZoomControlsEnabled(true);
        // Enable / Disable Compass icon
        googleMap.getUiSettings().setCompassEnabled(true);
        // Enable / Disable Rotate gesture
        googleMap.getUiSettings().setRotateGesturesEnabled(true);
        // Enable / Disable zooming functionality
        googleMap.getUiSettings().setZoomGesturesEnabled(true);  
        // Enable / Disable Toolbar
        googleMap.getUiSettings().setMapToolbarEnabled(false);
    }


    @Override
    protected void onResume() {
    super.onResume();
    setUpMapIfNeeded();
    googleApiClient.connect();
    }

    @Override
    protected void onPause() {
    super.onPause();
    if (googleApiClient.isConnected()) {
    LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient, (com.google.android.gms.location.LocationListener) this);
    googleApiClient.disconnect();
        }
    }   

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (googleMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
            // Check if we were successful in obtaining the map.
            if (googleMap != null) {                
                setUpMap();
                }
            }
        }

    private void setUpMap() {

        try {        
            data.open();
        } catch (SQLException e) {
        }

        List<MyMarker> markers = data.getMyMarkers();
        BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.marker);
            for (int i = 0; i < markers.size(); i++) {
                googleMap.addMarker(new MarkerOptions()
                        .title(markers.get(i).getTitle())
                        .snippet(markers.get(i).getSnippet())
                        .position(markers.get(i).getLatLng())
                        .icon(icon));

            }

        data.close();
    }

    private void handleNewLocation(Location location) {
        Log.d(TAG, location.toString());
        double currentLatitude = location.getLatitude();
        double currentLongitude = location.getLongitude();
        LatLng latLng = new LatLng(currentLatitude, currentLongitude);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));
        googleMap.animateCamera(CameraUpdateFactory.zoomIn());
        googleMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
        CameraPosition cameraPosition = new CameraPosition.Builder()
            .target(latLng)      // Sets the center of the map to Mountain View
            .zoom(15)                   // Sets the zoom
            .build();                   // Creates a CameraPosition from the builder
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));     
    }

    @Override
    public void onConnected(Bundle bundle) {
        location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        if (location == null) {
            LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, (com.google.android.gms.location.LocationListener) this);
        }
        else {
            handleNewLocation(location);
        }
    }

    @Override
    public void onConnectionSuspended(int i) {
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        if (connectionResult.hasResolution()) {
            try {
                // Start an Activity that tries to resolve the error
                connectionResult.startResolutionForResult(this, CONNECTION_FAILURE_RESOLUTION_REQUEST);
                // Thrown if Google Play services canceled the original
                // PendingIntent
                } 
            catch (IntentSender.SendIntentException e) {
                // Log the error
                e.printStackTrace();
                }
        } 
        else {
            Log.i(TAG, "Location services connection failed with code " + connectionResult.getErrorCode());
            }
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub  
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub  
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub  
    }


    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        db.close();
    }

}

1 个答案:

答案 0 :(得分:0)

您在创建表时错过了列名:

private static final String DATABASE_CREATE = "create table " 
  + TABLE_LOCATIONS + "(" + ID_COL
  + " integer primary key autoincrement, " // + COLUMN_NAME
  + " text, "+ TITLE
  + " text, " + SNIPPET
  + " text, " + POSITION
  + " text);";

我标记了您错过列名称的位置。

请注意,您编写该代码的方式令人困惑 它会更具可读性:

private static final String DATABASE_CREATE = 
    "CREATE TABLE " + TABLE_LOCATIONS + " (" + 
    ID_COL + " integer primary key autoincrement, " +
    COLUMN_NAME + " text, " + // The missing column name
    TITLE + " text, " +
    SNIPPET + " text, " + 
    POSITION + " text)";