Java Android SQite数据库搜索和查找列错误

Java Android SQite数据库搜索和查找列错误,java,android,sqlite,Java,Android,Sqlite,我正试图建立一个学生记录数据库 主键id 作者 主题 出版者 我的表没有显示任何列,而且它也会崩溃 错误是addproduct db.insert(表名称,空,值) 这是数据库类 package com.example.bilal.mydatabase; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.data

我正试图建立一个学生记录数据库 主键id 作者 主题 出版者

我的表没有显示任何列,而且它也会崩溃 错误是addproduct db.insert(表名称,空,值)

这是数据库类

package com.example.bilal.mydatabase;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDBHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "productDB.db";
    private static final String TABLE_NAME = "products";

//    public static final String COLUMN_ID = "_id";
//    public static final String COLUMN_PRODUCTNAME = "productname";
//    public static final String COLUMN_QUANTITY = "quantity";
//    public static final String COLUMN_QUANTITY = "quantity";
//    public static final String COLUMN_QUANTITY = "quantity";


    public static final String COLUMN_ID = "_id";
//    public static final String COLUMN_ISBN = "IsBN";
    public static final String COLUMN_AUTHOR = "AUTHOR";
    public static final String COLUMN_SUBJECT = "SUBJECT";
    public static final String COLUMN_PUBLISHER = "PUBLISHER";



    public MyDBHandler(Context context, String name,SQLiteDatabase.CursorFactory factory, int version)
    {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }

//    @Override
//    public void onCreate(SQLiteDatabase db) {
//
//    }
//
//    @Override
//    public void onUpgrade(SQLiteDatabase db, int oldVersion,
//                          int newVersion) {
//
//    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_PRODUCTS_TABLE = "CREATE TABLE " +TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_AUTHER + " TEXT," + COLUMN_SUBJECT + " TEXT," + COLUMN_PUBLISHER + " TEXT," + ")";
        db.execSQL(CREATE_PRODUCTS_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public void addProduct(Product product) {

        ContentValues values = new ContentValues();
        values.put(COLUMN_ID, product.getID());
        values.put(COLUMN_AUTHER, product.getAuther());
        values.put(COLUMN_SUBJECT, product.getSubject());
        values.put(COLUMN_PUBLISHER, product.getPublisher());
//        values.put(COLUMN_QUANTITY, product.getQuantity());

        SQLiteDatabase db = this.getWritableDatabase();

        db.insert(TABLE_NAME, null, values);
        db.close();
    }
    public Product findProduct(String id) {
        String query = "Select * FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " =  \"" + id + "\"";

        SQLiteDatabase db = this.getWritableDatabase();

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

        Product product = new Product();

        if (cursor.moveToFirst()) {
            cursor.moveToFirst();
            product.setID(Integer.parseInt(cursor.getString(0)));
            product.setAuther(cursor.getString(1));
            product.setSubject(cursor.getString(1));
            product.setPublisher(cursor.getString(1));
//            product.setSubject(Integer.parseInt(cursor.getString(2)));
//            product.setPublisher(Integer.parseInt(cursor.getString(2)));
            cursor.close();
        } else {
            product = null;
        }
        db.close();
        return product;
    }

//    public boolean deleteProduct(String productname) {
//
//        boolean result = false;
//
//        String query = "Select * FROM " + TABLE_PRODUCTS + " WHERE " + COLUMN_PRODUCTNAME + " =  \"" + productname + "\"";
//
//        SQLiteDatabase db = this.getWritableDatabase();
//
//        Cursor cursor = db.rawQuery(query, null);
//
//        Product product = new Product();
//
//        if (cursor.moveToFirst()) {
//            product.setID(Integer.parseInt(cursor.getString(0)));
//            db.delete(TABLE_PRODUCTS, COLUMN_ID + " = ?",
//                    new String[] { String.valueOf(product.getID()) });
//            cursor.close();
//            result = true;
//        }
//        db.close();
//        return result;
//    }


}
这是我的主要活动

package com.example.bilal.mydatabase;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

//    TextView idView;
    EditText ID,AUTHEr,SUBJECt,PUBLISHEr;


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


        ID = (EditText) findViewById(R.id.Isbn);
        AUTHEr = (EditText) findViewById(R.id.Auther);
        SUBJECt = (EditText) findViewById(R.id.Subject);
        PUBLISHEr = (EditText) findViewById(R.id.Publisher);
//        productBox = (EditText) findViewById(R.id.productName);
//        quantityBox =
//                (EditText) findViewById(R.id.productQuantity);
    }

    public void Clearlog(View v)
    {

        AUTHEr.setText("");
        SUBJECt.setText("");
        PUBLISHEr.setText("");
        ID.setText("");


    }


    public void newProduct (View view) {
        MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);

//        int quantity =
//                Integer.parseInt(quantityBox.getText().toString());
//
//        Product product =
//                new Product(productBox.getText().toString(), quantity);


        int _id =Integer.parseInt(ID.getText().toString());
        String AuTHER =(AUTHEr.getText().toString());
        String SuBJECT =(SUBJECt.getText().toString());
        String PuBLISHER =(PUBLISHEr.getText().toString());


        Product a = new Product(_id,AuTHER,SuBJECT,PuBLISHER);
//        Product s = new Product(SUBJECt.getText().toString(), quantity);
//        Product p = new Product(PUBLISHEr.getText().toString(), quantity);


        dbHandler.addProduct(a);

        AUTHEr.setText("");
        SUBJECt.setText("");
        PUBLISHEr.setText("");
        ID.setText("");
        Toast.makeText(getApplicationContext(), "BOOK ADDED TO LIBRARY", Toast.LENGTH_LONG).show();
    }

    public void lookupProduct (View view) {
        MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);

        Product product =dbHandler.findProduct(ID.getText().toString());

        if (product != null) {
//            idView.setText(String.valueOf(product.getID()));

            ID.setText(String.valueOf(product.getID()));
            AUTHEr.setText(String.valueOf(product.getAuther()));
            SUBJECt.setText(String.valueOf(product.getSubject()));
            PUBLISHEr.setText(String.valueOf(product.getPublisher()));

        } else {
            Toast.makeText(getApplicationContext(), "BOOK NOT FOUND", Toast.LENGTH_LONG).show();
        }
    }

//    public void removeProduct (View view) {
//        MyDBHandler dbHandler = new MyDBHandler(this, null,
//                null, 1);
//
//        boolean result = dbHandler.deleteProduct(
//                productBox.getText().toString());
//
//        if (result)
//        {
//            idView.setText("Record Deleted");
//            productBox.setText("");
//            quantityBox.setText("");
//        }
//        else
//            idView.setText("No Match Found");
//    }


}
这是LOGCAT

05-14 18:09:16.414    6973-6973/com.example.bilal.mydatabase E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.bilal.mydatabase, PID: 6973
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3969)
            at android.view.View.performClick(View.java:4637)
            at android.view.View$PerformClick.run(View.java:19422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5586)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3964)
            at android.view.View.performClick(View.java:4637)
            at android.view.View$PerformClick.run(View.java:19422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5586)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: CREATE TABLE products(_id INTEGER PRIMARY KEY,AuTHER TEXT,SuBJECT TEXT,PuBLISHER TEXT,)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:690)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1806)
            at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1737)
            at com.example.bilal.mydatabase.MyDBHandler.onCreate(MyDBHandler.java:49)
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
            at com.example.bilal.mydatabase.MyDBHandler.addProduct(MyDBHandler.java:68)
            at com.example.bilal.mydatabase.MainActivity.newProduct(MainActivity.java:63)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3964)
            at android.view.View.performClick(View.java:4637)
            at android.view.View$PerformClick.run(View.java:19422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5586)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
05-14 18:09:16.414 6973-6973/com.example.bilal.mydatabase E/AndroidRuntime﹕ 致命异常:主
进程:com.example.bilal.mydatabase,PID:6973
java.lang.IllegalStateException:无法执行活动的方法
在android.view.view$1.onClick上(view.java:3969)
在android.view.view.performClick上(view.java:4637)
在android.view.view$PerformClick.run(view.java:19422)
位于android.os.Handler.handleCallback(Handler.java:733)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5586)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1268)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在android.view.view$1.onClick上(view.java:3964)
在android.view.view.performClick上(view.java:4637)
在android.view.view$PerformClick.run(view.java:19422)
位于android.os.Handler.handleCallback(Handler.java:733)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5586)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1268)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
在dalvik.system.NativeStart.main(本机方法)
由以下原因引起:android.database.sqlite.SQLiteException:near“)”:编译时语法错误(代码1)::创建表产品(\u id INTEGER主键、作者文本、主题文本、发布者文本)
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:690)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
位于android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1806)
位于android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1737)
位于com.example.bilal.mydatabase.MyDBHandler.onCreate(MyDBHandler.java:49)
位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
位于com.example.bilal.mydatabase.MyDBHandler.addProduct(MyDBHandler.java:68)
在com.example.bilal.mydatabase.MainActivity.newProduct(MainActivity.java:63)上
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在android.view.view$1.onClick上(view.java:3964)
在android.view.view.performClick上(view.java:4637)
在android.view.view$PerformClick.run(view.java:19422)
位于android.os.Handler.handleCallback(Handler.java:733)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5586)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1268)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
在dalvik.system.NativeStart.main(本机方法)

能否更改创建表查询

String CREATE_PRODUCTS_TABLE=“CREATE TABLE”+TABLE_NAME+”(“
+列ID+“整数主键”+“列作者+”文本”+“列主题+”文本”+“列发布者+”文本“+”


但我所有的框都只显示authersubject中的内容,publisher显示的是auther中的内容,而不是自己的输入
String CREATE_PRODUCTS_TABLE = "CREATE TABLE " +TABLE_NAME + " ("
                    + COLUMN_ID + " INTEGER PRIMARY KEY, " + COLUMN_AUTHER + " TEXT, " + COLUMN_SUBJECT + " TEXT, " + COLUMN_PUBLISHER + " TEXT);";