私はアンドロイドのアプリケーションを開発しており、70行100列の外部データベースを使用しています。各行でMy Appユーザーが次のボタンをクリックすると、アプリはデータベースの次の列に移動し、その内容を表示します。だから私は選択した列を増やしたり、減らしたりするために、列の名前に1〜100の数字を使う必要があります。それは日食でエラーを発生させます。たとえばID = 1の場合、「mani」列を選択すると、魅力的に機能しますが、「1」列には何も表示されません。SQLiteでカラム名をnumberにできますか?
Database Class :
package com.codegostarNiloo.negar;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class Database extends SQLiteOpenHelper {
public static String DB_PATH;
public static String DB_NAME = "negar.db";
private SQLiteDatabase myDataBase;
private final Context myContext;
public Database(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/";
}
public void createDataBase() throws IOException {
copyDataBase();
Log.d("isexist", "" + checkDataBase());
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);
}
catch (SQLiteException e) {}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
private void copyDataBase() throws IOException {
File dir = new File(DB_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
File database = new File(dir, DB_NAME);
if (!database.exists()) {
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
}
public void openDataBase() throws SQLException {
// Open the database
String myPath = DB_PATH + DB_NAME;
// SQLiteDatabase.NO_LOCALIZED_COLLATORS
myDataBase = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
}
MainActivityクラス:
// database method :
private void Database() throws Error {
myDbHelper = new Database(MainActivity.this);
try {
myDbHelper.createDataBase();
}
catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDbHelper.openDataBase();
}
catch (SQLException sqle) {
throw sqle;
}
}
// Select column 1 of row 1:
database();
db = myDbHelper.getWritableDatabase();
Cursor c = db.rawQuery("select * from mohtava where ID = " + 1, null);
if (c.moveToNext()) {
String j=c.getString(c.getColumnIndex("1"));
}
db.close();
c.close();
データベース:http://www.axgig.com/images/23013560911355303754.jpg
エラー:
05-02 02:36:18.187: E/CursorWindow(26741): Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 3 columns.
05-02 02:36:18.188: D/AndroidRuntime(26741): Shutting down VM
05-02 02:36:18.188: W/dalvikvm(26741): threadid=1: thread exiting with uncaught exception (group=0x410e39a8)
05-02 02:36:18.190: E/AndroidRuntime(26741): FATAL EXCEPTION: main
05-02 02:36:18.190: E/AndroidRuntime(26741): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.codegostarNiloo.negar/com.codegostarNiloo.negar.MainActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2377)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.access$600(ActivityThread.java:167)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.os.Handler.dispatchMessage(Handler.java:99)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.os.Looper.loop(Looper.java:153)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.main(ActivityThread.java:5341)
05-02 02:36:18.190: E/AndroidRuntime(26741): at java.lang.reflect.Method.invokeNative(Native Method)
05-02 02:36:18.190: E/AndroidRuntime(26741): at java.lang.reflect.Method.invoke(Method.java:511)
05-02 02:36:18.190: E/AndroidRuntime(26741): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929)
05-02 02:36:18.190: E/AndroidRuntime(26741): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
05-02 02:36:18.190: E/AndroidRuntime(26741): at dalvik.system.NativeStart.main(Native Method)
05-02 02:36:18.190: E/AndroidRuntime(26741): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.database.CursorWindow.nativeGetString(Native Method)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.database.CursorWindow.getString(CursorWindow.java:434)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
05-02 02:36:18.190: E/AndroidRuntime(26741): at com.codegostarNiloo.negar.MainActivity.amoozesh(MainActivity.java:251)
05-02 02:36:18.190: E/AndroidRuntime(26741): at com.codegostarNiloo.negar.MainActivity.onCreate(MainActivity.java:114)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.Activity.performCreate(Activity.java:5125)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2289)
05-02 02:36:18.190: E/AndroidRuntime(26741): ... 11 more
col1、col2などの列に名前を付けないのはなぜですか? – Christian
私は同じエラーが発生したことをテストしました! –
イメージではなく、テキストとして(コードとしてフォーマットされた)テキストを貼り付けます。 – nasch