应用程序停止由于数据库工作 [英] App stopped working due to database
问题描述
我创建一个注册页面,当我输入不同的密码,面包是工作就好了。但是,当我输入的密码相同。 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
, notinteger primary key not mull auto_increment
. You have a typo innull
and thenot null
is not required. There is no underscore in sqliteautoincrement
.这篇关于应用程序停止由于数据库工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!