7
@オーバーライド
        public void onCreate(SQLiteDatabase db)
        {{
            試す{
                db.execSQL("テーブルの作成"+ NotificationManager.getUserStatic(context)+ "log(" +
                KEY_TIME + "INTEGER主キー、" + KEY_TEXT + "TEXT not null);");

            }
            catch(SQLException e){
                e.printStackTrace();
            }
        }

        / **
         *アプリが開いているときに呼び出されるonOpenメソッド。
         * /

        @オーバーライド
        public void onOpen(SQLiteDatabase db)
        {{
            試す{
                System.out.println( "tophere");
                db.execSQL("存在しない場合はテーブルを作成"+DATABASE_NAME+"。"+NotificationManager.getUserStatic(context)+ "log(" +
                KEY_TIME + "INTEGER主キー、" + KEY_TEXT + "TEXT not null);");
                System.out.println( "downhere");
            }
            catch(SQLException e){
                e.printStackTrace();
            }
        }

アプリのデータベースを作成するためのこのコードがあります。問題は、私たちが知る限り、テーブルを作成しないため、テーブルに挿入してテーブルから読み取ろうとすると、クラッシュすることです。私たちはすべてを試しましたが、System.out.printlnはどこで失敗するかを確認するためにあります。最上位を取得しますが、ログの最下位の部分には到達しないため、何かが原因で失敗していると推測されます。データベースが正しいフォルダにあることをDDMSで確認したので、データベースはそこにあるはずですが、何らかの理由でデータベースが見つかりません(ログの2行目と3行目)。

何かご意見は?

これはエラーログです:

04-27 10:45:46.768:I / System.out(6441):tophere
04-27 10:45:46.772:I / SqliteDatabaseCpp(6441):sqliteが返されました:エラーコード= 1、msg =不明なデータベースNOPO、db = / data / data / dmri.nopo / databases / NOPO
04-27 10:45:46.772:W / System.err(6441):android.database.sqlite.SQLiteException:不明なデータベースNOPO:、コンパイル中:存在しない場合はテーブルを作成NOPO.log(time INTEGER主キー、テキストTEXT nullではありません);
04-27 10:45:46.792:W / System.err(6441):android.database.sqlite.SQLiteCompiledSql.native_compile(ネイティブメソッド)
04-27 10:45:46.792:W / System.err(6441):android.database.sqlite.SQLiteCompiledSql。(SQLiteCompiledSql.java:68)
04-27 10:45:46.811:W / System.err(6441):android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:134)
04-27 10:45:46.811:W / System.err(6441):android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
04-27 10:45:46.811:W / System.err(6441):android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
04-27 10:45:46.811:W / System.err(6441):android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
04-27 10:45:46.811:W / System.err(6441):android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1899)
04-27 10:45:46.823:W / System.err(6441):android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1839)
04-27 10:45:46.823:W / System.err(6441):dmri.nopo.DBAdapter $ DatabaseHelper.onOpen(DBAdapter.java:67)
04-27 10:45:46.823:W / System.err(6441):android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:180)
04-27 10:45:46.902:W / System.err(6441):dmri.nopo.DBAdapter.open(DBAdapter.java:86)
04-27 10:45:46.912:W / System.err(6441):dmri.nopo.LogManager.readLogFile(LogManager.java:32)で
04-27 10:45:46.912:W / System.err(6441):dmri.nopo.LogActivity.onCreate(LogActivity.java:25)で
04-27 10:45:46.921:W / System.err(6441):android.app.Activity.performCreate(Activity.java:4465)で
04-27 10:45:46.921:W / System.err(6441):android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-27 10:45:46.931:W / System.err(6441):android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
04-27 10:45:46.931:W / System.err(6441):android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-27 10:45:46.941:W / System.err(6441):android.app.ActivityThread.access $ 600(ActivityThread.java:123)
04-27 10:45:46.941:W / System.err(6441):android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
04-27 10:45:46.953:W / System.err(6441):android.os.Handler.dispatchMessage(Handler.java:99)
04-27 10:45:46.953:W / System.err(6441):android.os.Looper.loop(Looper.java:137)
04-27 10:45:46.972:W / System.err(6441):android.app.ActivityThread.main(ActivityThread.java:4424)
04-27 10:45:46.972:W / System.err(6441):java.lang.reflect.Method.invokeNative(ネイティブメソッド)
04-27 10:45:46.972:W / System.err(6441):java.lang.reflect.Method.invoke(Method.java:511)で
04-27 10:45:46.982:W / System.err(6441):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
04-27 10:45:46.982:W / System.err(6441):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-27 10:45:46.992:W / System.err(6441):dalvik.system.NativeStart.main(ネイティブメソッド)
04-27 10:45:47.002:I / SqliteDatabaseCpp(6441):sqliteが返されました:エラーコード= 1、msg =そのようなテーブルはありません:log、db = / data / data / dmri.nopo / databases / NOPO
04-27 10:45:47.012:D / AndroidRuntime(6441):VMをシャットダウンしています
04-27 10:45:47.012:W / dalvikvm(6441):threadid = 1:キャッチされない例外でスレッドが終了します(group = 0x409c01f8)
04-27 10:45:47.181:E / AndroidRuntime(6441):致命的な例外:メイン
04-27 10:45:47.181:E / AndroidRuntime(6441):java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {dmri.nopo / dmri.nopo.LogActivity}:android.database.sqlite.SQLiteException:そのようなテーブルはありません:ログ:、コンパイル中:SELECT時間、テキストFROMログ
04-27 10:45:47.181:E / AndroidRuntime(6441):android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.app.ActivityThread.access $ 600(ActivityThread.java:123)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.os.Handler.dispatchMessage(Handler.java:99)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.os.Looper.loop(Looper.java:137)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.app.ActivityThread.main(ActivityThread.java:4424)
04-27 10:45:47.181:E / AndroidRuntime(6441):java.lang.reflect.Method.invokeNative(ネイティブメソッド)
04-27 10:45:47.181:E / AndroidRuntime(6441):java.lang.reflect.Method.invoke(Method.java:511)で
04-27 10:45:47.181:E / AndroidRuntime(6441):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
04-27 10:45:47.181:E / AndroidRuntime(6441):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-27 10:45:47.181:E / AndroidRuntime(6441):dalvik.system.NativeStart.main(ネイティブメソッド)
04-27 10:45:47.181:E / AndroidRuntime(6441):原因:android.database.sqlite.SQLiteException:そのようなテーブルはありません:ログ:、コンパイル中:SELECT時間、テキストFROMログ
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteCompiledSql.native_compile(ネイティブメソッド)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteCompiledSql。(SQLiteCompiledSql.java:68)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:127)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:94)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteQuery。(SQLiteQuery.java:53)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1449)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1405)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1485)
04-27 10:45:47.181:E / AndroidRuntime(6441):dmri.nopo.DBAdapter.getAllSMS(DBAdapter.java:116)
04-27 10:45:47.181:E / AndroidRuntime(6441):dmri.nopo.LogManager.readLogFile(LogManager.java:34)で
04-27 10:45:47.181:E / AndroidRuntime(6441):dmri.nopo.LogActivity.onCreate(LogActivity.java:25)で
04-27 10:45:47.181:E / AndroidRuntime(6441):android.app.Activity.performCreate(Activity.java:4465)で
04-27 10:45:47.181:E / AndroidRuntime(6441):android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-27 10:45:47.181:E / AndroidRuntime(6441):android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
04-27 10:45:47.181:E / AndroidRuntime(6441):...11詳細
4

5 に答える 5

4

これは私がそれを試し、それも機能しているのに役立ちます

これは単なる例です

public class DatabaseMarks {

    public static final String KEY_STUID = "stuid";
    public static final String KEY_SUB1 = "subject_one";
    public static final String KEY_SUB2 = "subject_two";
    public static final String KEY_SUB3= "subject_three";
    public static final String KEY_MARKS1= "marks_one";
    public static final String KEY_MARKS2 = "marks_two";
    public static final String KEY_MARKS3 = "marks_three";

    private static final String DATABASE_NAME = "Student";
    private static final String DATABASE_MARKSTABLE = "StudentMarks";
    private static final int DATABASE_VERSION = 1;

    private DbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    private static class DbHelper extends SQLiteOpenHelper{

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
                db.execSQL(" CREATE TABLE " + DATABASE_MARKSTABLE + " (" +
                    KEY_STUID + " TEXT PRIMARY KEY, " +
                    KEY_SUB1 + " TEXT NOT NULL, " +
                    KEY_SUB2 + " TEXT NOT NULL, " +
                    KEY_SUB3 + " TEXT NOT NULL, " +
                    KEY_MARKS1 + " INTEGER NOT NULL, " +
                    KEY_MARKS2 + " INTEGER NOT NULL, " +
                    KEY_MARKS3 + " INTEGER NOT NULL);"
            );
        }

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

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

    }
    public DatabaseMarks(Context c){
        ourContext = c;
    }
    public DatabaseMarks open()throws SQLException{
        ourHelper = new DbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }
    public void close(){
        ourHelper.close();
    }
    public long createInsert(String stuid, String subject1, String subject2,
            String subject3, String marks1, String marks2, String marks3) {
        // TODO Auto-generated method stub
        ContentValues cv = new ContentValues();
        cv.put(KEY_STUID, stuid);
        cv.put(KEY_SUB1, subject1);
        cv.put(KEY_SUB2, subject2);
        cv.put(KEY_SUB3, subject3);
        cv.put(KEY_MARKS1, marks1);
        cv.put(KEY_MARKS2, marks2);
        cv.put(KEY_MARKS3, marks3);
        return ourDatabase.insert(DATABASE_MARKSTABLE, null, cv);

    }
于 2012-04-27T11:13:00.410 に答える
3

まず、Androidで例外をログに記録するためにandroid.util.Logを使用することをお勧めします。

2番目-間違った名前のテーブルが作成されていると思われます。エラーは、クエリが「ログ」を見つけることができないことを示していますが、「CREATE」ステートメントで連結を行っているようです。それが理由かもしれません。

実際に作成されたものを確認できます。作成されたsqliteベースを表示します。

あなたが試すことができます:

  1. adb shell
  2. cd /data/data/<your.package.name>/databases
  3. sqlite3 <yourdbname>
  4. .tables
于 2012-04-27T11:21:48.873 に答える
1

DATABASE_NAMESQLの一部を削除します。

NOPOデータベース名が必要で、テーブルを作成する場合は、次のようにしますlog

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, "NOPO", null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + "log" + " ("
                + KEY_TIME +" INTEGER primary key, "
                + KEY_TEXT +" TEXT not null);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS log");
        onCreate(db);
    }
}

super(context, "NOPO", null, 2);このDatabaseHelperオブジェクトはNOPOデータベース環境でのみ作成されるため、SQLで指定する必要はありません。

ps。私は何かをハードコーディングしているので、それを避ける必要があります。

于 2012-04-27T11:56:32.730 に答える
0

public class LoginDataBaseAdapter {static final String DATABASE_NAME = "login.db";

    static final int DATABASE_VERSION = 1;

    public static final int NAME_COLUMN = 1;

    // TODO: Create public field for each column in your table.
    // SQL Statement to create a new database.

    static final String DATABASE_CREATE = "create table "+"LOGIN"+
                                 "( " +"ID"+" integer primary key autoincrement,"+ "USERNAME  text,PASSWORD text,UNAME text); ";

    // Variable to hold the database instance
    public  SQLiteDatabase db;

    // Context of the application using the database.
    private final Context context;

    // Database open/upgrade helper
    private DataBaseHelper dbHelper;

    public  LoginDataBaseAdapter(Context _context) 
    {
        context = _context;
        dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);

    }
    public  LoginDataBaseAdapter open() throws SQLException 
    {
        db = dbHelper.getWritableDatabase();
        return this;
    }
    public void close() 
    {
        db.close();
    }

    public  SQLiteDatabase getDatabaseInstance()
    {
        return db;
    }
于 2015-04-03T13:33:00.887 に答える
-1
            public class DBHandler extends SQLiteOpenHelper {
                private static String DATABASE_NAME = "mydb";
                private static int DATABASE_VERSION = 1;

                String TABLE_NAME = "Student";

                String KEY_ID = "id";
                String KEY_STUDENT_NAME = "name";
                String KEY_STUDENT_MARKS = "marks";

            public DBHandler(Context context) {
                    super(context, DATABASE_NAME, null, DATABASE_VERSION);
                }

        @Override
            public void onCreate(SQLiteDatabase db) {
                // creating table
                String query = "CREATE TABLE " + TABLE_NAME +
                        " ( " +
                        KEY_ID + " INTEGER PRIMARY KEY," +
                        KEY_STUDENT_NAME + " TEXT," +
                        KEY_STUDENT_MARKS + " INTEGER"
                        " ) ";
                db.execSQL(query);

            // insertion in the table
            ContentValues values = new ContentValues();
            values.put(KEY_QUESTION_ID, "1");
            values.put(KEY_STUDENT_NAME , "abc");
            values.put(KEY_STUDENT_MARKS , "95");
            db.insert(TABLE_NAME, null, values);

            values.put(KEY_QUESTION_ID, "2");
            values.put(KEY_STUDENT_NAME , "def");
            values.put(KEY_STUDENT_MARKS , "93");
            db.insert(TABLE_NAME, null, values);
    }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub

            db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
            // Create tables again
            onCreate(db);
        }
     // retrieve date
     List<Student> getAllData(int Id) {

            List<Student> student = new ArrayList<Student>();
            // Select All Query
            String selectQuery = "SELECT * FROM " + TABLE_NAME + "    WHERE KEY_ID =" + "'" + Id + "'";

            SQLiteDatabase db = this.getWritableDatabase();

            Cursor cursor = db.rawQuery(selectQuery, null);

            // looping through all rows and adding to list
            if (cursor.moveToFirst()) {
                do {
                    Student std = new Student();
                    u.setId(cursor.getInt(0));
                    u.setStudentName(cursor.getString(1));
                    u.setMarks(cursor.getString(2));

                    student.add(std);
                } while (cursor.moveToNext());
            }
            // return student list
            return student;
        }
    }

     public class Student {

        public static int Id;
        public static String studentName;
        public static int marks;

        public int getId() {
            return Id;
        }

        public static void setId(int id) {
            Id = id;
        }

        public String getStudentName() {
            return studentName;
        }

        public static void setStudentName(String studentName) {
            Student.studentName = studentName;
        }

        public int getMarks() {
            return marks;
        }

        public static void setMarks(int marks) {
            Student.marks = marks;
        }
    }

    public class MainActivity extends AppCompatActivity {

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

            DBHandler db = new DBHandler(getApplicationContext());
            List<Student> std = new ArrayList<Student>();
            rl = db.getAllData(1);
           for (Student s : std) {
               Log.v("Id",s.getId());
               Log.v("Name",s.getStudentName());
               Log.v("Marks",s.getMarks());
       }
    }
}
于 2016-03-01T14:32:56.267 に答える