应用程序停止由于数据库工作 [英] App stopped working due to database

查看:259
本文介绍了应用程序停止由于数据库工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建一个注册页面,当我输入不同的密码,面包是工作就好了。但是,当我输入的密码相同。 MainActivity没有被重定向到亚亚活动。它只是一个消息崩溃的应用程序停止工作,我再次重定向到我的主要活动。

 包com.example.abcd.helloworld;
进口....公共类注册扩展活动{
DatabaseHelper帮手=新DatabaseHelper(本);@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.signup);
    按钮按钮2 =(按钮)findViewById(R.id.Bsignupbutton);    button2.setOnClickListener(新View.OnClickListener(){        @覆盖        公共无效的onClick(视图v){
            如果(v.getId()== R.id.Bsignupbutton){
                的EditText名=(的EditText)findViewById(R.id.TFname);
                电子邮件的EditText =(EditText上)findViewById(R.id.email);
                EditText上的uname =(EditText上)findViewById(R.id.TFuname);
                PASS1的EditText =(EditText上)findViewById(R.id.password);
                的EditText PASS2 =(EditText上)findViewById(R.id.pass2);                。字符串nameStr的= name.getText()的toString();
                。字符串emailstr = email.getText()的toString();
                。字符串unamestr = uname.getText()的toString();
                。字符串pass1str = pass1.getText()的toString();
                。字符串pass2str = pass2.getText()的toString();
                如果(!pass1str.equals(pass2str)){
                    //弹出味精
                    吐司通= Toast.makeText(SignUp.this,密码不匹配!,Toast.LENGTH_SHORT);
                    pass.show();
                }其他{
                    用户U =新用户();
                    u.setName(nameStr的);
                    u.setEmail(emailstr);
                    u.setUname(unamestr);
                    u.setPass(pass1str);                    helper.insertUser(U);
                    意图I =新意图(SignUp.this,yaya.class);
                    startActivity(ⅰ);
                }            }
        }
    });
}
}

错误

  1月2日至四日:56:55.953 1822年至1822年/? E / AndroidRuntime:致命异常:主要
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:android.database.sqlite.SQLiteException:近仔细考虑:语法错误(code 1),在编译:CREATE TABLE触点(ID整数主键不仔细考虑AUTO_INCREMENT,名文本不为空,电子邮件正文不为null,文字的uname不为空,通过文字不为空
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteConnection.native prepareStatement(本机方法)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteConnection.acquire preparedStatement(SQLiteConnection.java:889)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteConnection prepare(SQLiteConnection.java:500)。
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteSession prepare(SQLiteSession.java:588)。
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteProgram<&初始化GT;(SQLiteProgram.java:58)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteStatement<&初始化GT;(SQLiteStatement.java:31)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在com.example.sanchit.helloworld.DatabaseHelper.onCreate(DatabaseHelper.java:30)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在com.example.sanchit.helloworld.DatabaseHelper.insertUser(DatabaseHelper.java:36)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在com.example.sanchit.helloworld.SignUp $ 1.onClick(SignUp.java:51)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.view.View.performClick(View.java:4240)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.view.View $ PerformClick.run(View.java:17721)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.os.Handler.handleCallback(Handler.java:730)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.os.Handler.dispatchMessage(Handler.java:92)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.os.Looper.loop(Looper.java:137)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在android.app.ActivityThread.main(ActivityThread.java:5103)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在java.lang.reflect.Method.invokeNative(本机方法)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在java.lang.reflect.Method.invoke(Method.java:525)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
1月2日至4日:56:55.953 1822年至1822年/? E / AndroidRuntime:在dalvik.system.NativeStart.main(本机方法)

DatabaseHelper.java
    包com.example.abcd.helloworld;

 进口...
公共类DatabaseHelper扩展SQLiteOpenHelper {
私有静态最终诠释DATABASE_VERSION = 1;
私有静态最后弦乐DATABASE_NAME =的user.db;
私有静态最后弦乐TABLE_NAME =用户;
私有静态最后弦乐COLUMN_ID =ID;
私有静态最后弦乐COLUMN_NAME =名;
私有静态最后弦乐COLUMN_EMAIL =电子邮件;
私有静态最后弦乐COLUMN_UNAME =的uname;
私有静态最后弦乐COLUMN_PASS =通行证;
SQLiteDatabase分贝;
私有静态最后弦乐TABLE_CREATE =创建表的联系人(ID整数主键不空自动增量,+
        名称的文本不为空,电子邮件文本不为空,文字的uname不为空,通过文字不是null);;
公共DatabaseHelper(上下文的背景下)
{
    超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
}
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
    db.execSQL(TABLE_CREATE);
    this.db = DB;
}公共无效insertUser(用户u)
{
    DB = this.getWritableDatabase();
    ContentValues​​值=新ContentValues​​();    查询字符串=从用户选择*;
    光标光标= db.rawQuery(查询,NULL);
    诠释计数= cursor.getCount();
    values​​.put(COLUMN_ID,计数);
    values​​.put(列,u.getName());
    values​​.put(COLUMN_EMAIL,u.getEmail());
    values​​.put(COLUMN_UNAME,u.getUname());
    values​​.put(COLUMN_PASS,u.getPass());    db.insert(TABLE_NAME,空,价值);
    db.close();
}公共字符串searchPass(字符串的uname)
{
    DB = this.getReadableDatabase();
    查询字符串= +表格名中选择的uname,从通;
    光标光标= db.rawQuery(查询,NULL);
    字符串A,B;
    B =未找到;
    如果(cursor.moveToFirst())
    {
        做{
            一个= cursor.getString(0);            如果(a.equals(UNAME))
            {
                B = cursor.getString(1);
                打破;
            }
        }
        而(cursor.moveToNext());
    }
    db.close();
    返回b;}@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
   查询字符串=DROP TABLE IF EXISTS+ TABLE_NAME;
    db.execSQL(查询);
    this.OnCreate(DB);
}私人无效的onCreate(SQLiteDatabase DB){
    db.execSQL(TABLE_CREATE);
    this.db = DB;
}

}

SQLiteProgram.java

 包android.database.sqlite;进口android.database.DatabaseUtils;
进口android.os.CancellationSignal;进口java.util.Arrays中;公共抽象类SQLiteProgram扩展SQLiteClosable {
私有静态最后的String [] = EMPTY_STRING_ARRAY新的String [0];私人最终SQLiteDatabase mDatabase;
私人最终字符串mSQL的;
私人最终布尔mReadOnly;
私人最终的String [] mColumnNames;
私人最终诠释mNumParameters;
私人最终对象[] mBindArgs;SQLiteProgram(SQLiteDatabase数据库,SQL字符串,对象[] bindArgs,
        CancellationSignal cancellationSignalFor prepare){
    mDatabase = DB;
    mSQL的= sql.trim();    INT N = DatabaseUtils.getSqlStatementType(MSQL);
    开关(N){
        案例DatabaseUtils.STATEMENT_BEGIN:
        案例DatabaseUtils.STATEMENT_COMMIT:
        案例DatabaseUtils.STATEMENT_ABORT:
            mReadOnly = FALSE;
            mColumnNames = EMPTY_STRING_ARRAY;
            mNumParameters = 0;
            打破;        默认:
            布尔assumeReadOnly =(N == DatabaseUtils.STATEMENT_SELECT);
            SQLiteStatementInfo信息=新SQLiteStatementInfo();
            db.getThreadSession().$p$ppare(mSql,db.getThreadDefaultConnectionFlags(assumeReadOnly),cancellationSignalFor$p$ppare,信息);
            mReadOnly = info.readOnly;
            mColumnNames = info.columnNames;
            mNumParameters = info.numParameters;
            打破;
    }    如果(bindArgs = NULL&放大器;!&安培; bindArgs.length> mNumParameters){
        抛出新抛出:IllegalArgumentException(太多的绑定参数。
                被提供的参数,但语句需要+ bindArgs.length +
                + mNumParameters +的论点。);
    }    如果(mNumParameters!= 0){
        mBindArgs =新对象[mNumParameters]
        如果(bindArgs!= NULL){
            System.arraycopy(bindArgs,0,mBindArgs,0,bindArgs.length);
        }
    }其他{
        mBindArgs = NULL;
    }
}最终SQLiteDatabase getDatabase(){
    返回mDatabase;
}最后弦乐getSql(){
    返回mSQL的;
}最终目标[] getBindArgs(){
    返回mBindArgs;
}最终的String [] getColumnNames(){
    返回mColumnNames;
}/ ** * @hide /
保护最终SQLiteSession的getSession(){
    返回mDatabase.getThreadSession();
}/ ** * @hide /
受保护的最终诠释getConnectionFlags(){
    返回mDatabase.getThreadDefaultConnectionFlags(mReadOnly);
}/ ** * @hide /
保护最终无效onCorruption(){
    mDatabase.onCorruption();
}/ **
 *未实现。
 * @ pcated这种方法去$ P $是pcated德$ P $,不得使用。
 * /
@德precated
公众最终诠释getUniqueId(){
    返回-1;
}
公共无效bindNull(INT指数){
    绑定(索引,NULL);
}/ **
 *绑定长期价值这句话。该值保持绑定,直到
 * {@link #clearBindings}被调用。
 * addToBindArgs
 * @参数指数从1开始的索引参数绑定
 * @参数值绑定的值
 * /
公共无效bindLong(INT指数,长值){
    绑定(指数值);
}/ **
 *绑定的双重价值,这句话。该值保持绑定,直到
 * {@link #clearBindings}被调用。
 *
 * @参数指数从1开始的索引参数绑定
 * @参数值绑定的值
 * /
公共无效bindDouble(INT指数,双值){
    绑定(指数值);
}/ **
 *绑定一个字符串值这一说法。该值保持绑定,直到
 * {@link #clearBindings}被调用。
 *
 * @参数指数从1开始的索引参数绑定
 * @参数值绑定的值,不能为null
 * /
公共无效bindString(INT指数,字符串值){
    如果(价值== NULL){
        抛出新抛出:IllegalArgumentException(索引绑定值+指数+为空);
    }
    绑定(指数值);
}/ **
 *绑定一个字节数组值这一说法。该值保持绑定,直到
 * {@link #clearBindings}被调用。
 *
 * @参数指数从1开始的索引参数绑定
 * @参数值绑定的值,不能为null
 * /
公共无效bindBlob(INT指数的byte []值){
    如果(价值== NULL){
        抛出新抛出:IllegalArgumentException(索引绑定值+指数+为空);
    }
    绑定(指数值);
}/ **
 *清除所有现有绑定。取消设置绑定被视为NULL。
 * /
公共无效clearBindings(){
    如果(mBindArgs!= NULL){
        Arrays.fill(mBindArgs,NULL);
    }
}/ **
 *给定的字符串bindArgs的数组,这个方法绑定所有的人都在一个单一的电话。
 *
 * @参数bindArgs绑定指定参数时,没有一个必须是空的字符串数组。
 * /
公共无效bindAllArgsAsStrings(字符串[] bindArgs){
    如果(bindArgs!= NULL){
        对于(INT I = bindArgs.length;!I = 0;我 - ){
            bindString(ⅰ,bindArgs [I - 1]);
        }
    }
}@覆盖
保护无效onAllReferencesReleased(){
    clearBindings();
}私人无效绑定(INT指数,对象的值){
    如果(指数< 1 ||索引> mNumParameters){
        抛出新抛出:IllegalArgumentException(索引不能绑定参数
                +指数+,因为该指数超出范围。
                +声明有+ mNumParameters +的参数。);
    }
    mBindArgs [指数 - 1] =值;
}

}


解决方案

  android.database.sqlite.SQLiteException:近仔细考虑:语法错误(code 1),在编译:CREATE TABLE触点(ID整数主键不仔细考虑AUTO_INCREMENT


有关自动增量PK柱正确的声明是整数主键自动增量,而不是整数主键不仔细考虑AUTO_INCREMENT 。你必须在一个错字和不为空不是必需的。有SQLite中没有下划线自动增量

I am creating a signup page, when I enter different passwords, toast is working just fine. But when I enter same passwords. MainActivity is not being redirected to a yaya Activity . It just crashes with a message "app stopped working" and I'm redirected to my main activity again.

package com.example.abcd.helloworld;
import....

public class SignUp extends Activity {
DatabaseHelper helper = new DatabaseHelper(this);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.signup);
    Button button2 = (Button) findViewById(R.id.Bsignupbutton);

    button2.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {
            if (v.getId() == R.id.Bsignupbutton) {
                EditText name = (EditText) findViewById(R.id.TFname);
                EditText email = (EditText) findViewById(R.id.email);
                EditText uname = (EditText) findViewById(R.id.TFuname);
                EditText pass1 = (EditText) findViewById(R.id.password);
                EditText pass2 = (EditText) findViewById(R.id.pass2);

                String namestr = name.getText().toString();
                String emailstr = email.getText().toString();
                String unamestr = uname.getText().toString();
                String pass1str = pass1.getText().toString();
                String pass2str = pass2.getText().toString();
                if (!pass1str.equals(pass2str)) {
                    //popup msg
                    Toast pass = Toast.makeText(SignUp.this, "Passwords do not match!", Toast.LENGTH_SHORT);
                    pass.show();
                } else {
                    User u = new User();
                    u.setName(namestr);
                    u.setEmail(emailstr);
                    u.setUname(unamestr);
                    u.setPass(pass1str);

                    helper.insertUser(u);
                    Intent i = new Intent(SignUp.this, yaya.class);
                    startActivity(i);
                }

            }
        }
    });
}
}

errors are

02-04 01:56:55.953 1822-1822/? E/AndroidRuntime: FATAL EXCEPTION: main
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime: android.database.sqlite.SQLiteException: near "mull": syntax error (code 1): , while compiling: create table contacts (id integer primary key not mull auto_increment,name text not null, email text not null, uname text not null, pass text not null
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at com.example.sanchit.helloworld.DatabaseHelper.onCreate(DatabaseHelper.java:30)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at com.example.sanchit.helloworld.DatabaseHelper.insertUser(DatabaseHelper.java:36)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at com.example.sanchit.helloworld.SignUp$1.onClick(SignUp.java:51)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.view.View.performClick(View.java:4240)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:17721)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:730)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:92)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5103)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:525)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-04 01:56:55.953 1822-1822/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

DatabaseHelper.java package com.example.abcd.helloworld;

import...


public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION=1;
private static final String DATABASE_NAME="user.db";
private static final String TABLE_NAME="user";
private static final String COLUMN_ID="id";
private static final String COLUMN_NAME="name";
private static final String COLUMN_EMAIL="email";
private static final String COLUMN_UNAME="uname";
private static final String COLUMN_PASS="pass";
SQLiteDatabase db;
private static final String TABLE_CREATE="create table contacts (id integer primary key not null autoincrement,"+
        "name text not null, email text not null, uname text not null, pass text not null );";
public DatabaseHelper(Context context)
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(TABLE_CREATE);
    this.db = db;
}

public void insertUser(User u)
{
    db = this.getWritableDatabase();
    ContentValues values=new ContentValues();

    String query="select * from user";
    Cursor cursor= db.rawQuery(query, null);
    int count= cursor.getCount();
    values.put(COLUMN_ID, count);
    values.put(COLUMN_NAME, u.getName());
    values.put(COLUMN_EMAIL, u.getEmail());
    values.put(COLUMN_UNAME, u.getUname());
    values.put(COLUMN_PASS, u.getPass());

    db.insert(TABLE_NAME, null, values);
    db.close();
}

public String searchPass(String uname)
{
    db=this.getReadableDatabase();
    String query="select uname, pass from" +TABLE_NAME;
    Cursor cursor= db.rawQuery(query,null);
    String a,b;
    b="not found";
    if (cursor.moveToFirst())
    {
        do {
            a= cursor.getString(0);

            if (a.equals(uname))
            {
                b= cursor.getString(1);
                break;
            }
        }
        while(cursor.moveToNext());
    }
    db.close();
    return b;

}

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

private void OnCreate(SQLiteDatabase db) {
    db.execSQL(TABLE_CREATE);
    this.db = db;
}

}

SQLiteProgram.java

package android.database.sqlite;

import android.database.DatabaseUtils;
import android.os.CancellationSignal;

import java.util.Arrays;

public abstract class SQLiteProgram extends SQLiteClosable {
private static final String[] EMPTY_STRING_ARRAY = new String[0];

private final SQLiteDatabase mDatabase;
private final String mSql;
private final boolean mReadOnly;
private final String[] mColumnNames;
private final int mNumParameters;
private final Object[] mBindArgs;

SQLiteProgram(SQLiteDatabase db, String sql, Object[] bindArgs,
        CancellationSignal cancellationSignalForPrepare) {
    mDatabase = db;
    mSql = sql.trim();

    int n = DatabaseUtils.getSqlStatementType(mSql);
    switch (n) {
        case DatabaseUtils.STATEMENT_BEGIN:
        case DatabaseUtils.STATEMENT_COMMIT:
        case DatabaseUtils.STATEMENT_ABORT:
            mReadOnly = false;
            mColumnNames = EMPTY_STRING_ARRAY;
            mNumParameters = 0;
            break;

        default:
            boolean assumeReadOnly = (n == DatabaseUtils.STATEMENT_SELECT);
            SQLiteStatementInfo info = new SQLiteStatementInfo();
            db.getThreadSession().prepare(mSql,db.getThreadDefaultConnectionFlags(assumeReadOnly),cancellationSignalForPrepare, info);
            mReadOnly = info.readOnly;
            mColumnNames = info.columnNames;
            mNumParameters = info.numParameters;
            break;
    }

    if (bindArgs != null && bindArgs.length > mNumParameters) {
        throw new IllegalArgumentException("Too many bind arguments.  "
                + bindArgs.length + " arguments were provided but the statement needs "
                + mNumParameters + " arguments.");
    }

    if (mNumParameters != 0) {
        mBindArgs = new Object[mNumParameters];
        if (bindArgs != null) {
            System.arraycopy(bindArgs, 0, mBindArgs, 0, bindArgs.length);
        }
    } else {
        mBindArgs = null;
    }
}

final SQLiteDatabase getDatabase() {
    return mDatabase;
}

final String getSql() {
    return mSql;
}

final Object[] getBindArgs() {
    return mBindArgs;
}

final String[] getColumnNames() {
    return mColumnNames;
}

/** @hide */
protected final SQLiteSession getSession() {
    return mDatabase.getThreadSession();
}

/** @hide */
protected final int getConnectionFlags() {
    return mDatabase.getThreadDefaultConnectionFlags(mReadOnly);
}

/** @hide */
protected final void onCorruption() {
    mDatabase.onCorruption();
}

/**
 * Unimplemented.
 * @deprecated This method is deprecated and must not be used.
 */
@Deprecated
public final int getUniqueId() {
    return -1;
}


public void bindNull(int index) {
    bind(index, null);
}

/**
 * Bind a long value to this statement. The value remains bound until
 * {@link #clearBindings} is called.
 *addToBindArgs
 * @param index The 1-based index to the parameter to bind
 * @param value The value to bind
 */
public void bindLong(int index, long value) {
    bind(index, value);
}

/**
 * Bind a double value to this statement. The value remains bound until
 * {@link #clearBindings} is called.
 *
 * @param index The 1-based index to the parameter to bind
 * @param value The value to bind
 */
public void bindDouble(int index, double value) {
    bind(index, value);
}

/**
 * Bind a String value to this statement. The value remains bound until
 * {@link #clearBindings} is called.
 *
 * @param index The 1-based index to the parameter to bind
 * @param value The value to bind, must not be null
 */
public void bindString(int index, String value) {
    if (value == null) {
        throw new IllegalArgumentException("the bind value at index " + index + " is null");
    }
    bind(index, value);
}

/**
 * Bind a byte array value to this statement. The value remains bound until
 * {@link #clearBindings} is called.
 *
 * @param index The 1-based index to the parameter to bind
 * @param value The value to bind, must not be null
 */
public void bindBlob(int index, byte[] value) {
    if (value == null) {
        throw new IllegalArgumentException("the bind value at index " + index + " is null");
    }
    bind(index, value);
}

/**
 * Clears all existing bindings. Unset bindings are treated as NULL.
 */
public void clearBindings() {
    if (mBindArgs != null) {
        Arrays.fill(mBindArgs, null);
    }
}

/**
 * Given an array of String bindArgs, this method binds all of them in one single call.
 *
 * @param bindArgs the String array of bind args, none of which must be null.
 */
public void bindAllArgsAsStrings(String[] bindArgs) {
    if (bindArgs != null) {
        for (int i = bindArgs.length; i != 0; i--) {
            bindString(i, bindArgs[i - 1]);
        }
    }
}

@Override
protected void onAllReferencesReleased() {
    clearBindings();
}

private void bind(int index, Object value) {
    if (index < 1 || index > mNumParameters) {
        throw new IllegalArgumentException("Cannot bind argument at index "
                + index + " because the index is out of range.  "
                + "The statement has " + mNumParameters + " parameters.");
    }
    mBindArgs[index - 1] = value;
}

}

解决方案

android.database.sqlite.SQLiteException: near "mull": syntax error (code 1): , while compiling: create table contacts (id integer primary key not mull auto_increment

The correct declaration for an autoincrement PK column is integer primary key autoincrement, not integer primary key not mull auto_increment. You have a typo in null and the not null is not required. There is no underscore in sqlite autoincrement.

这篇关于应用程序停止由于数据库工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆