Создание базы данных sqlite на Eclipse - PullRequest
0 голосов
/ 19 января 2012

Я сейчас пытаюсь создать базу данных по Eclipse. Пользователь сможет ввести свое имя и сохранить его в базе данных. Кроме того, сохраненные данные будут показаны на следующей странице.

Я столкнулся с ошибкой и не уверен, что коды верны. Я получил помощь здесь: база данных

Ниже мой код:

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter your name below:" 
/>

<EditText
android:id="@+id/nameText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

<Button
android:id="@+id/saveButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save" 
/>

</LinearLayout>

solution.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/android:list">
</ListView>

SaveData.java

package com.mp.Testing;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

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

public class SaveData extends SQLiteOpenHelper 
{
// Name & the version of Database.
public static final String DATABASE_NAME = "saveData_database";
public static final int DATABASE_VERSION = 1;

// Names of the Tables in Database
public static final String DATABASE_TABLE_1 = "pictures";
public static final String DATABASE_TABLE_2 = "data";

// Columns present in DATABASE_TABLE_1
public static final String PICTURES_ROWID = "_id";
public static final String PICTURES_FILE = "pictures_file";
public static final String DATA_NAME = "_name";
public static final String DATA_LANGTITUDE = "pictures_langtitude";
public static final String DATA_LONGTITUDE = "pictures_longtitude";

// SQL query string for creating DATABASE_TABLE_1
static final String CREATE_DATABASE_TABLE_1 =
           "create table " + DATABASE_TABLE_1 + " (" + PICTURES_ROWID + 
           " integer primary key autoincrement, " +
           " " + PICTURES_FILE + " text not null);";

// To execute the SQL command
@Override
public void onCreate(SQLiteDatabase database) 
{
    database.execSQL(DATABASE_TABLE_1);
    Log.d("SaveData", "Created DB");
}

public static final String TAG_1 = "PICTURES_TABLE";

private Context context;

// Constructor
public SaveData(Context context) 
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.context = context;
}

// Upgrading the database version
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{
    // TODO Auto-generated method stub  
}

// Inserting pictures into database
private void insertDataIntoPictures(SQLiteDatabase db) 
{
    try
    {
        InputStream is = context.getResources().openRawResource(R.raw.picture);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String strLine = null;

        while ((strLine = (br.readLine()).trim()) != null) 
        {
            String[] temp = null;

            ContentValues initialValues = new ContentValues();

            initialValues.put(PICTURES_FILE, temp[0].trim());

            db.insert(DATABASE_TABLE_1, null, initialValues);
        }

        is.close();
    }   
    catch (Exception e)
    {
        Log.d(TAG_1, "Error while inserting common names into table");
    }
}

// Inserting data into database
private void insertDataIntoData(SQLiteDatabase db) 
{
    try
    {
        InputStream is = context.getResources().openRawResource(R.raw.data); 
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String strLine = null;

        while ((strLine = (br.readLine()).trim()) != null) 
        {
            String[] temp = null;

            ContentValues initialValues = new ContentValues();

            initialValues.put(DATA_LANGTITUDE, temp[0]);
            initialValues.put(DATA_LONGTITUDE, temp[1]);

            db.insert(DATABASE_TABLE_1, null, initialValues);
        }

        is.close();
    }   
    catch (Exception e)
    {
        Log.d(TAG_1, "Error while inserting common names into table");
    }
}
}

DataAdapter.java

package com.mp.Testing;

import com.mp.Testing.DataAdapter;
import com.mp.Testing.SaveData;

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

public class DataAdapter 
{
// Database table name
public static final String DATABASE_TABLE_1 = "pictures";

// Columns present in DATABASE_TABLE_1
public static final String PICTURES_ROWID = "_id";
public static final String PICTURES_FILE = "pictures_file";
public static final String PICTURES_COUNT = "pictures_count";

// Object for SQLiteDatabase
private SQLiteDatabase database;

// 
public static final String TAG = "COMMON_NAMES_TABLE";

// Creating variable
private SaveData save_data;

public DataAdapter() 
{

}

// Open connection of database
public DataAdapter open(Context context) throws SQLException
{
    Log.i(TAG, "OPening DataBase Connection....");
    save_data = new SaveData(context);
    database = save_data.getWritableDatabase();
    return this;
}

// Close connection of database
public void close() 
{
    database.close();
}

// Delete the pictures ID
public boolean deletePictures(long rowId) 
{
    return database.delete(DATABASE_TABLE_1, PICTURES_ROWID + "=" + rowId, null) > 0;
}

// Fetching all the pictures
public Cursor fetchAllPictures() 
{
    return database.query(DATABASE_TABLE_1, new String[] {PICTURES_ROWID, PICTURES_FILE}, null, null, null, null, PICTURES_ROWID);
}

// Fetching the pictures
public Cursor fetchPictures(long commonNameId) throws SQLException 
{
    Cursor mCursor = database.query(true, DATABASE_TABLE_1, new String[] 
    {
        PICTURES_ROWID, PICTURES_FILE}, PICTURES_ROWID + "=" +
        commonNameId, null, null, null, null, null);

        if(mCursor != null) 
        {
            mCursor.moveToFirst();
        }
    return mCursor;
}

// Fetching pictures
public Cursor fetch_all_pictures() 
{
    return database.query(DATABASE_TABLE_1, new String[] {PICTURES_ROWID, PICTURES_FILE}, null, null, null, null, null);
}

// Update the database
public boolean updatePictures(int commonNameId, String commonName, String commonNameCount) 
{
    ContentValues args = new ContentValues();
    args.put(PICTURES_FILE, commonName);
    args.put(PICTURES_COUNT, commonNameCount);

    return database.update(DATABASE_TABLE_1, args, PICTURES_ROWID + "=" + commonNameId, null) > 0;
}
}

Testing.java

package com.mp.Testing;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class Testing extends ListActivity 
{
DataAdapter cnTable;
ListView cnListView;
Cursor c;

private static final int DATA_ACTIVITY_START = 1;
private static final int PICTURES_ACTIVITY_START = 0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.solution);

    cnTable = new DataAdapter();
    cnTable.open(getApplicationContext());

    c = cnTable.fetchAllPictures();
    startManagingCursor(c);

    if(c!=null)
    {
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
        R.layout.solution, c,
        new String[] {c.getColumnName(1)},
        new int[] {R.id.saveButton});
        setListAdapter(adapter);
    }
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) 
{
    super.onListItemClick(l, v, position, id);

    c.moveToPosition(position);

    Intent i = new Intent(this, Testing.class);
    i.putExtra(DataAdapter.PICTURES_ROWID, id);
    i.putExtra(DataAdapter.PICTURES_FILE, c.getString(c.getColumnIndexOrThrow(DataAdapter.PICTURES_FILE)));
    startActivityForResult(i, PICTURES_ACTIVITY_START);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) 
{
    super.onActivityResult(requestCode, resultCode, intent);
    //Bundle extras = intent.getExtras();
    switch(requestCode) 
    {
        default: break;
    }
}

@Override
protected void onDestroy()
{
    super.onDestroy();
    c.close();
    cnTable.close();
}
}

Это ошибка, которую я получил:

01-19 10: 29: 24.158: E / AndroidRuntime (488): java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.mp.Testing / com.mp.Testing.Testing}: android.database. sqlite.SQLiteException: возле "картинки": синтаксическая ошибка: картинки

Надеюсь, что все могут помочь мне решить ее и указать на любую ошибку, которую я написал в своем коде. Спасибо!

1 Ответ

0 голосов
/ 19 января 2012

в SaveData, в методе onCreate () это не database.execSQL (DATABASE_TABLE_1); но database.execSQL (CREATE_DATABASE_TABLE_1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...