Java 致命异常:main(SQLite数据库)

Java 致命异常:main(SQLite数据库),java,android,Java,Android,应用程序一启动即强制关闭。我不知道我做错了什么。请帮忙 这是主要活动:- package com.work.pets; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDa

应用程序一启动即强制关闭。我不知道我做错了什么。请帮忙

这是主要活动:-

 package com.work.pets;
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import data.PetContract.PetEntry;
    import data.PetDbHelper;
    public class Main extends Activity {
    private PetDbHelper mDbHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button addpet= (Button) findViewById(R.id.addpetbutton);
    addpet.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = new Intent(Main.this,Editor.class);
    startActivity(intent);
    }
    });
    mDbHelper=new PetDbHelper(this);
    }
    @Override
    protected void onStart(){
    super.onStart();
    displayDatabaseInfo();
    }
    private void displayDatabaseInfo(){
    PetDbHelper mDbHelper=new PetDbHelper(this);
    SQLiteDatabase db=mDbHelper.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM" + PetEntry.TABLE_NAME, null);
    try{
    TextView displayView= (TextView) findViewById(R.id.text_view_pet);
    displayView.setText("Number of rows" + cursor.getCount());
    }finally{
    cursor.close();
    }
    }
    private void insertPet(){
    SQLiteDatabase db= mDbHelper.getWritableDatabase();
    ContentValues values= new ContentValues();
    values.put(PetEntry.COLUMN_PET_NAME,"Toto");
    values.put(PetEntry.COLUMN_PET_BREED,"terrier");
    values.put(PetEntry.COLUMN_PET_GENDER,PetEntry.GENDER_MALE);
    values.put(PetEntry.COLUMN_PET_WEIGHT,20);
    long newRowId=db.insert(PetEntry.TABLE_NAME, null, values);
    Log.v("Main", "New row id" + newRowId);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_catalog, menu);
    return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.action_insert_dummy_data:
    insertPet();
    displayDatabaseInfo();
    return true;
    case R.id.action_delete_all_entries:
    return true;
    }
    return super.onOptionsItemSelected(item);
    }
    }
这是第二项活动:-

这是错误日志:-


您忘记了此部分中的空格:

String SQL_CREATE_PETS_TABLE="CREATE_TABLE" 
+ PetEntry.TABLE_NAME + "(" 
更改为:

String SQL_CREATE_PETS_TABLE="CREATE TABLE " 
+ PetEntry.TABLE_NAME + " ( " 
+ PetEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ PetEntry.COLUMN_PET_NAME + " TEXT NOT NULL, "
+ PetEntry.COLUMN_PET_BREED + " TEXT, "
+ PetEntry.COLUMN_PET_GENDER + " INTEGER NOT NULL, "
+ PetEntry.COLUMN_PET_WEIGHT + " INTEGER NOT NULL DEFAULT 0)";          
db.execSQL(SQL_CREATE_PETS_TABLE);
A.使用CREATE TABLE而不是CREATE_TABLE

在语句之间添加空格

更新您的PetDbHelper类,如下所示:

代码中有语法错误

04-17 14:27:56.514:E/SQLiteLog1403:1靠近CREATE_TABLEpets: 语法错误

SQL CREATE TABLE语句语法:

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
你所写的:

CREATE_TABLEpets(_idINTEGER PRIMARY KEY AUTOINCREMENT,nameTEXT NOT NULL,breedTEXT,genderINTEGER NOT NULL,weightINTEGER NOT NULL DEFAULT 0);
正确添加空格,并将CREATE_TABLE更改为CREATE TABLE

下面是一个来自Android文档的示例

private static final String SQL_CREATE_ENTRIES =
    "CREATE TABLE " + FeedEntry.TABLE_NAME + " (" + 
    FeedEntry._ID + " INTEGER PRIMARY KEY," + 
    FeedEntry.COLUMN_NAME_TITLE + " TEXT," + 
    FeedEntry.COLUMN_NAME_SUBTITLE + " TEXT)"; 

CREATE_TABLE是否创建表?错误已更改为:-04-17 15:03:25.562:E/SQLiteLog1703:1靠近CREATE_TABLE:语法错误04-17 15:03:25.582:E/AndroidRuntime1703:FATAL异常:main 04-17 15:03:25.582:E/AndroidRuntime1703:java.lang.RuntimeException:无法启动活动组件信息{com.work.pets/com.work.pets.main}:android.database.sqlite.SQLiteException:near CREATE_TABLE:语法错误代码1:,编译时:CREATE_TABLE pets\u idINTEGER主键自动递增、nameTEXT不为NULL、breedTEXT、genderINTEGER不为NULL、weightINTEGER不为NULL默认值0您仍在使用CREATE_TABLE。根据我的回答改变。只需复制并粘贴此>>>字符串SQL\u CREATE\u PETS\u TABLE=CREATE TABLE+PetEntry.TABLE\u NAME++PetEntry.\u ID+整数主键自动递增,+PetEntry.COLUMN\u PET\u NAME+TEXT非空,+PetEntry.COLUMN\u PET\u BREED+TEXT,+PetEntry.COLUMN\u PET\u GENDER+整数非空,+PetEntry.COLUMN\u PET\u WEIGHT+整数非空默认值0@Sudeepshrest这个答案应该被接受。我接受了。但似乎只有一个答案可以被勾选|对你应该接受正确和有用的。阅读错误已更改为:-04-17 15:03:25.562:E/SQLiteLog1703:1靠近CREATE_表:语法错误04-17 15:03:25.582:E/AndroidRuntime1703:FATAL异常:main 04-17 15:03:25.582:E/AndroidRuntime1703:java.lang.RuntimeException:无法启动活动组件信息{com.work.pets/com.work.pets.main}:android.database.sqlite.SQLiteException:near CREATE_TABLE:语法错误代码1:,编译时:CREATE_TABLE pets _iditeger主键自动递增,nameTEXT不为NULL,breedTEXT,genderINTEGER不为NULL,weightINTEGER不为NULL默认0请至少对我的答案进行上一票。非常感谢。
package data;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import data.PetContract.PetEntry;
public class PetDbHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME="shelter.db";
private static final int DATABASE_VERSION=1;
public PetDbHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
    String SQL_CREATE_PETS_TABLE = "CREATE TABLE " 
    + PetEntry.TABLE_NAME + " ( " 
    + PetEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    + PetEntry.COLUMN_PET_NAME + " TEXT NOT NULL, "
    + PetEntry.COLUMN_PET_BREED + " TEXT, "
    + PetEntry.COLUMN_PET_GENDER + " INTEGER NOT NULL, "
    + PetEntry.COLUMN_PET_WEIGHT + " INTEGER NOT NULL DEFAULT 0)";          

    db.execSQL(SQL_CREATE_PETS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
CREATE_TABLEpets(_idINTEGER PRIMARY KEY AUTOINCREMENT,nameTEXT NOT NULL,breedTEXT,genderINTEGER NOT NULL,weightINTEGER NOT NULL DEFAULT 0);
private static final String SQL_CREATE_ENTRIES =
    "CREATE TABLE " + FeedEntry.TABLE_NAME + " (" + 
    FeedEntry._ID + " INTEGER PRIMARY KEY," + 
    FeedEntry.COLUMN_NAME_TITLE + " TEXT," + 
    FeedEntry.COLUMN_NAME_SUBTITLE + " TEXT)";