Я сейчас пытаюсь создать базу данных по 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: возле "картинки": синтаксическая ошибка: картинки
Надеюсь, что все могут помочь мне решить ее и указать на любую ошибку, которую я написал в своем коде.
Спасибо!