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)";