Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android.database.sqlite.SQLiteException:near“:语法错误(代码1):,同时编译:android编程错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我用两个表创建了一个 android数据库.第二个尚未初始化但是对于第一个我得到了这个错误.

这是我的logcat.

02-23 01:55:41.494      855-855/tubapps.budgetdatabase E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponenTinfo{tubapps.budgetdatabase/tubapps.budgetdatabase.MainActivity}: android.database.sqlite.sqliteException: near "create_income_table": Syntax error (code 1):,while compiling: create_income_table income(_id INTEGER PRIMARY KEY AUTOINCREMENT,income_amount TEXT NOT NULL,income_payer TEXT NOT NULL,income_date text NOT NULL,income_category TEXT NOT NULL,income_payments TEXT NOT null);
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
            at android.app.ActivityThread.access$600(ActivityThread.java:130)
            at android.app.ActivityThread$H.handlemessage(ActivityThread.java:1195)
            at android.os.Handler.dispatchmessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.database.sqlite.sqliteException: near "create_income_table": Syntax error (code 1):,income_payments TEXT NOT null);
            at android.database.sqlite.sqliteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.sqliteConnection.acquirePreparedStatement(sqliteConnection.java:882)
            at android.database.sqlite.sqliteConnection.prepare(sqliteConnection.java:493)
            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:1663)
            at android.database.sqlite.sqliteDatabase.execsql(sqliteDatabase.java:1594)
            at tubapps.budgetdatabase.DBHelper.onCreate(DBHelper.java:55)
            at android.database.sqlite.sqliteOpenHelper.getDatabaseLocked(sqliteOpenHelper.java:252)
            at android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:164)
            at tubapps.budgetdatabase.sqlController.open(sqlController.java:21)
            at tubapps.budgetdatabase.MainActivity.onCreate(MainActivity.java:29)
            at android.app.Activity.performCreate(Activity.java:5008)
            at android.app.instrumentation.callActivityOnCreate(instrumentation.java:1079)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
            at android.app.ActivityThread.access$600(ActivityThread.java:130)
            at android.app.ActivityThread$H.handlemessage(ActivityThread.java:1195)
            at android.os.Handler.dispatchmessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

这是我的dbHelper.

public class DBHelper extends sqliteOpenHelper {

    // TABLE INFORMATTION
    public static final String table_INCOME = "income";
    public static final String INCOME_ID = "_id";
    public static final String INCOME_amouNT = "income_amount";
    public static final String INCOME_PAYER = "income_payer";
    public static final String INCOME_DATE = "income_date";
    public static final String INCOME_CATEGORY = "income_category";
    public static final String INCOME_PAymENTS = "income_payments";

    public static final String table_EXPENSE = "expense";
    public static final String EXPENSE_ID = "_id";
    public static final String EXPENSE_amouNT = "expense_amount";
    public static final String EXPENSE_PAYEE = "expense_payee";
    public static final String EXPENSE_DATE = "expense_date";
    public static final String EXPENSE_CATEGORY = "expense_category";
    public static final String EXPENSE_PAymENTS = "expense_payments";

    // DATABASE INFORMATION
    static final String db_name = "BUDGET.DB";
    static final int DB_VERSION = 1;

    // TABLE CREATION STATEMENT
    private static final String CREATE_INCOME_TABLE = "createIncoMetable "
            + TABLE_INCOME + "(" + INCOME_ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + INCOME_amouNT + " TEXT NOT NULL,"
            + INCOME_PAYER + " TEXT NOT NULL,"
            + INCOME_DATE + " TEXT NOT NULL,"
            + INCOME_CATEGORY + " TEXT NOT NULL,"
            + INCOME_PAymENTS + " TEXT NOT null);";

    private static final String CREATE_EXPENSE_TABLE = "createExpenseTable "
            + TABLE_EXPENSE + "(" + EXPENSE_ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + EXPENSE_amouNT + " TEXT NOT NULL,"
            + EXPENSE_PAYEE + " TEXT NOT NULL,"
            + EXPENSE_DATE + " TEXT NOT NULL,"
            + EXPENSE_CATEGORY + " TEXT NOT NULL,"
            + EXPENSE_PAymENTS + " TEXT NOT null);";

    public DBHelper(Context context) {
        super(context,db_name,null,DB_version);
    }

    @Override
    public void onCreate(sqliteDatabase db) {
        db.execsql(CREATE_INCOME_TABLE);
        db.execsql(CREATE_EXPENSE_TABLE);
    }

    @Override
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
        db.execsql("drop table IF EXISTS " + TABLE_INCOME);
        db.execsql("drop table IF EXISTS " + TABLE_EXPENSE);
        onCreate(db);
    }
}

这是我的sqlcontroller.

public class sqlController {

    private DBHelper dbHelper;
    private Context ourcontext;
    private sqliteDatabase database;

    public sqlController(Context C) {
        ourcontext = c;
    }

    public sqlController open() throws sqlException {
        dbHelper = new DBHelper(ourcontext);
        database = dbHelper.getWritableDatabase();
        return this;

    }

    public void close() {
        dbHelper.close();
    }

    public void inserTincomeData(String incomeamount,String incomePayer,String incomeDate,String incomeCategory,String incomePayments) {
        ContentValues cv = new ContentValues();
        cv.put(DBHelper.INCOME_amouNT,incomeamount);
        cv.put(DBHelper.INCOME_PAYER,incomePayer);
        cv.put(DBHelper.INCOME_DATE,incomeDatE);
        cv.put(DBHelper.INCOME_CATEGORY,incomeCategory);
        cv.put(DBHelper.INCOME_PAymENTS,incomePayments);
        database.insert(DBHelper.TABLE_INCOME,cv);
    }

    public void insertExpenseData(String expenseamount,String expensePayee,String expenseDate,String expenseCategory,String expensePayments) {
        ContentValues cv = new ContentValues();
        cv.put(DBHelper.EXPENSE_amouNT,expenseamount);
        cv.put(DBHelper.EXPENSE_PAYEE,expensePayeE);
        cv.put(DBHelper.EXPENSE_DATE,expenseDatE);
        cv.put(DBHelper.EXPENSE_CATEGORY,expenseCategory);
        cv.put(DBHelper.EXPENSE_PAymENTS,expensePayments);
        database.insert(DBHelper.TABLE_EXPENSE,cv);
    }

    //GetTing cursor to read data from table
    public cursor readIncomeData() {
        String[] allcolumns = new String[] { DBHelper.INCOME_ID,DBHelper.INCOME_amouNT,DBHelper.INCOME_PAYER,DBHelper.INCOME_DATE,DBHelper.INCOME_CATEGORY,DBHelper.INCOME_PAymENTS };
        cursor c = database.query(DBHelper.TABLE_INCOME,allcolumns,null);
        if (c != null) {
            c.moveToFirst();
        }
        return c;
    }

    //GetTing cursor to read data from table
    public cursor readExpenseData() {
        String[] allcolumns = new String[] { DBHelper.EXPENSE_ID,DBHelper.EXPENSE_amouNT,DBHelper.EXPENSE_PAYEE,DBHelper.EXPENSE_DATE,DBHelper.EXPENSE_CATEGORY,DBHelper.EXPENSE_PAymENTS };
        cursor c = database.query(DBHelper.TABLE_EXPENSE,null);
        if (c != null) {
            c.moveToFirst();
        }
        return c;
    }

    //updating record data into table by id
    public int updateIncomeData(long incomEID,String newIncomeamount,String newIncomePayer,String newIncomeDate,String newIncomeCategory,String newIncomePayments) {
        ContentValues cvupdate = new ContentValues();
        cvupdate.put(DBHelper.INCOME_amouNT,newIncomeamount);
        cvupdate.put(DBHelper.INCOME_PAYER,newIncomePayer);
        cvupdate.put(DBHelper.INCOME_DATE,newIncomeDatE);
        cvupdate.put(DBHelper.INCOME_CATEGORY,newIncomeCategory);
        cvupdate.put(DBHelper.INCOME_PAymENTS,newIncomePayments);
        int i = database.update(DBHelper.TABLE_INCOME,cvupdate,DBHelper.INCOME_ID + " = " + incomEID,null);
        return i;
    }

    public int updateExpenseData(long expensEID,String newExpenseamount,String newExpensePayer,String newExpenseDate,String newExpenseCategory,String newExpensePayments) {
        ContentValues cvupdate = new ContentValues();
        cvupdate.put(DBHelper.EXPENSE_amouNT,newExpenseamount);
        cvupdate.put(DBHelper.EXPENSE_PAYEE,newExpensePayer);
        cvupdate.put(DBHelper.EXPENSE_DATE,newExpenseDatE);
        cvupdate.put(DBHelper.EXPENSE_CATEGORY,newExpenseCategory);
        cvupdate.put(DBHelper.EXPENSE_PAymENTS,newExpensePayments);
        int i = database.update(DBHelper.TABLE_EXPENSE,DBHelper.EXPENSE_ID + " = " + expensEID,null);
        return i;
    }

    // deleting record data from table by id
    public void deleteIncomeData(long incomEID) {
        database.delete(DBHelper.TABLE_INCOME,DBHelper.INCOME_ID + "="
                + incomEID,null);
    }

    public void deleteExpenseData(long expensEID) {
        database.delete(DBHelper.TABLE_EXPENSE,DBHelper.EXPENSE_ID + "="
                + expensEID,null);
    }
}

这是我的主要活动.

public class MainActivity extends ActionBarActivity {

    ListView lv;
    sqlController dbcon;
    TextView incomEID_tv,incomePayer_tv,incomeamount_tv;
    TextView incomeDate_tv,incomeCategory_tv,incomePayments_tv;

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

        dbcon = new sqlController(this);
        dbcon.open();
        lv = (ListView) findViewById(R.id.incomeList_id);

        cursor cursor = dbcon.readIncomeData();
        String[] from = new String[] { DBHelper.INCOME_ID,DBHelper.INCOME_PAymENTS};
        int[] to = new int[] { R.id.income_id,R.id.income_amount,R.id.income_payer,R.id.income_date,R.id.income_category,R.id.income_payments};

        SimplecursorAdapter adapter = new SimplecursorAdapter(
                MainActivity.this,R.layout.income_entry,cursor,from,to);

        adapter.notifyDataSetChanged();
        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new AdapterView.onItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
                incomEID_tv = (TextView) view.findViewById(R.id.income_id);
                incomeamount_tv = (TextView) view.findViewById(R.id.income_amount);
                incomePayer_tv = (TextView) view.findViewById(R.id.income_payer);
                incomeDate_tv = (TextView) view.findViewById(R.id.income_datE);
                incomeCategory_tv = (TextView) view.findViewById(R.id.income_category);
                incomePayments_tv = (TextView) view.findViewById(R.id.income_payments);

                String incomEID = incomEID_tv.getText().toString();
                String incomeamount = incomeamount_tv.getText().toString();
                String incomePayer = incomePayer_tv.getText().toString();
                String incomeDate = incomeDate_tv.getText().toString();
                String incomeCategory = incomeCategory_tv.getText().toString();
                String incomePayments = incomePayments_tv.getText().toString();

                Intent modify_intent = new Intent(getApplicationContext(),IncomeEdit.class);
                modify_intent.putExtra("incomEID",incomEID);
                modify_intent.putExtra("newIncomeamount",incomeamount);
                modify_intent.putExtra("newIncomePayer",incomePayer);
                modify_intent.putExtra("newIncomeDate",incomeDatE);
                modify_intent.putExtra("newIncomeCategory",incomeCategory);
                modify_intent.putExtra("newIncomePayments",incomePayments);
                startActivity(modify_intent);
            }
        });
    }

DBHelper的第55行是这样的

db.execsql(CREATE_INCOME_TABLE);

sqlController的第21行是这样的

database = dbHelper.getWritableDatabase();
@H_491_5@mainActivity的第29行是这样的

dbcon.open();

我在其他问题中看到它可能来自表名.它们之间有空格,但在我改变之后,它仍然无法正常工作.

解决方法

您正在执行命令:

create_income_table income(
    _id INTEGER PRIMARY KEY AUTOINCREMENT,income_payments TEXT NOT NULL
);

create table替换create_income_table.您需要执行此sql

create table income(
    _id INTEGER PRIMARY KEY AUTOINCREMENT,income_payments TEXT NOT NULL
);

大佬总结

以上是大佬教程为你收集整理的android.database.sqlite.SQLiteException:near“:语法错误(代码1):,同时编译:android编程错误全部内容,希望文章能够帮你解决android.database.sqlite.SQLiteException:near“:语法错误(代码1):,同时编译:android编程错误所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。