android.database.sqlite.SQLiteException:没有这样的表:CLTABLE(代码1):,编译时:INSERT-INTO-table
嘿,我创建了我的数据库,想在init中插入一些字段,但是得到了一个sqliteexception没有这样的表,并且在编译时无法插入到表中。获取id值-1时,我没有得到确切的错误android.database.sqlite.SQLiteException:没有这样的表:CLTABLE(代码1):,编译时:INSERT-INTO-table,android,sqlite,Android,Sqlite,嘿,我创建了我的数据库,想在init中插入一些字段,但是得到了一个sqliteexception没有这样的表,并且在编译时无法插入到表中。获取id值-1时,我没有得到确切的错误 public long insertData(String name, String number, String email, String jobtype, String uri, String msg) { SQLiteDatabase db = database.getWritableDatabase()
public long insertData(String name, String number, String email, String jobtype, String uri, String msg)
{
SQLiteDatabase db = database.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(database.NAME, name);
contentValues.put(database.NUMBER, number);
contentValues.put(database.EMAIL, email);
contentValues.put(database.JOBTYPE, jobtype);
contentValues.put(database.URI, uri);
contentValues.put(database.MSG, msg);
long id = db.insert(database.TABLE_NAME, null, contentValues);
return id;
}
static class Database extends SQLiteOpenHelper{
private static final String DATABASE_NAME="cloudicadatabase";
private static final String TABLE_NAME="CLTABLE";
private static final int DATABASE_VERSION= 1;
private static final String COLUMN_UID = "_id";
private static final String NAME="Name";
private static final String NUMBER="Number";
private static final String EMAIL="Email";
private static final String JOBTYPE="Jobtype";
private static final String URI="Uri";
private static final String MSG="Msg";
private static final String CREATE_TABLE = "CREATE TABLE" + TABLE_NAME + "(" +
COLUMN_UID + "INTEGER PRIMARY KEY AUTOINCREMENT, " +
NAME + "VARCHAR(32) NOT NULL, " +
NUMBER + "INTEGER, " +
EMAIL + "VARCHAR(25) NOT NULL, " +
JOBTYPE + "VARCHAR(20) NOT NULL, " +
URI + "VARCHAR(50) NOT NULL, " +
MSG + "VARCHAR(500) NOT NULL);";
private static final String DROP_TABLE = "DROP TABLE "+TABLE_NAME+" IF EXISTS";
private Context context;
public Database(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
} catch (SQLException e) {
Message.message(context, ""+e);
}
}
main.java
public void submit(View view)
{
String nam = name.getText().toString();
String numb = num.getText().toString();
String mail = email.getText().toString();
String jtype = job.getText().toString();
String ur = uri.getText().toString();
String msag = msg.getText().toString();
long id = database.insertData(nam, numb, mail, jtype, ur, msag);
if (id < 0)
{
Message.message(this, "Unsucessful");
}
else {
Message.message(this, "Submited");
}
logcat
no such table: CLTABLE
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: Error inserting Jobtype=dfg Msg=gfdgfd Number=543 Uri=gfd Email=fdgf Name=sau
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: android.database.sqlite.SQLiteException: no such table: CLTABLE (code 1): , while compiling: INSERT INTO CLTABLE(Jobtype,Msg,Number,Uri,Email,Name) VALUES (?,?,?,?,?,?)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at com.sun.suni.design.DataAdapter.insertData(DataAdapter.java:30)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at com.sun.suni.design.Details.submit(Details.java:36)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at java.lang.reflect.Method.invoke(Native Method)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase: at java.lang.reflect.Method.invoke(Method.java:372)
public long insertData(字符串名称、字符串编号、字符串电子邮件、字符串作业类型、字符串uri、字符串消息)
{
SQLiteDatabase db=database.getWritableDatabase();
ContentValues ContentValues=新ContentValues();
contentValues.put(database.NAME,NAME);
contentValues.put(database.NUMBER,NUMBER);
contentValues.put(database.EMAIL,EMAIL);
contentValues.put(database.JOBTYPE,JOBTYPE);
contentValues.put(database.URI,URI);
contentValues.put(database.MSG,MSG);
long id=db.insert(database.TABLE_NAME,null,contentValues);
返回id;
}
静态类数据库扩展了SQLiteOpenHelper{
私有静态最终字符串数据库\u NAME=“cloudicadatabase”;
私有静态最终字符串表\u NAME=“CLTABLE”;
私有静态最终int数据库_VERSION=1;
私有静态最终字符串列_UID=“_id”;
私有静态最终字符串NAME=“NAME”;
私有静态最终字符串NUMBER=“NUMBER”;
私有静态最终字符串EMAIL=“EMAIL”;
私有静态最终字符串JOBTYPE=“JOBTYPE”;
私有静态最终字符串URI=“URI”;
私有静态最终字符串MSG=“MSG”;
私有静态最终字符串CREATE_TABLE=“CREATE TABLE”+TABLE_NAME+”(“+
列UID+“整数主键自动递增,”+
名称+“VARCHAR(32)不为空,”+
数字+整数,“+
电子邮件+“VARCHAR(25)不为空,”+
JOBTYPE+“VARCHAR(20)不为空,”+
URI+“VARCHAR(50)不为空,”+
MSG+“VARCHAR(500)非空);”;
私有静态最终字符串DROP\u TABLE=“DROP TABLE”+表名称+“如果存在”;
私人语境;
公共数据库(上下文){
super(上下文、数据库名称、null、数据库版本);
this.context=上下文;
}
@凌驾
public void onCreate(SQLiteDatabase db){
试一试{
db.execSQL(创建_表);
}捕获(SQLE异常){
信息。信息(上下文,“+e”);
}
}
main.java
公共作废提交(查看)
{
字符串nam=name.getText().toString();
字符串numb=num.getText().toString();
字符串mail=email.getText().toString();
字符串jtype=job.getText().toString();
字符串ur=uri.getText().toString();
字符串msag=msg.getText().toString();
long id=database.insertData(nam、numb、mail、jtype、ur、msag);
if(id<0)
{
Message.Message(此为“未成功”);
}
否则{
信息。信息(本“提交”);
}
logcat
没有这样的表格:CLTABLE
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:插入Jobtype=dfg Msg=gfdgffd Number=543 Uri=gfd Email=fdgfgf Name=sau时出错
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:android.database.sqlite.SQLiteException:没有这样的表:CLTABLE(代码1):,编译时:插入CLTABLE(作业类型、消息、编号、Uri、电子邮件、名称)值(?,,,,,,,?)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at-android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at-android.database.sqlite.SQLiteConnection.acquiredPreparedStatement(SQLiteConnection.java:889)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at-android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at-android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at-android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at-android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at-android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at-android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at com.sun.suni.design.DataAdapter.insertData(DataAdapter.java:30)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:com.sun.suni.design.Details.submit(Details.java:36)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at java.lang.reflect.Method.invoke(本机方法)
12-24 12:32:17.794 13270-13270/com.sun.suni.design E/SQLiteDatabase:at java.lang.reflect.Method.invoke(Method.java:372)
您的表未创建,因此您得到了NPE
您应该在列名
和列类型
private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" +
COLUMN_UID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NAME + " VARCHAR(32) NOT NULL, " +
NUMBER + " INTEGER, " +
EMAIL + " VARCHAR(25) NOT NULL, " +
JOBTYPE + " VARCHAR(20) NOT NULL, " +
URI + " VARCHAR(50) NOT NULL, " +
MSG + " VARCHAR(500) NOT NULL);";
“创建表”后缺少空格:
有很多用于检查SQL命令的工具,您应该始终将SQL命令输出到字符串,并查看它们是否在这样的工具中工作。如果它们不工作,则说明您的命令有问题。我已经给出了空格,但没有相同的更改issue@sun卸载并再次运行,如果不起作用,发布日志是的,我收到了,谢谢@M D,有必要吗每次插入新记录时都需要卸载
private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" +
COLUMN_UID + "INTEGER PRIMARY KEY AUTOINCREMENT, " +
NAME + "VARCHAR(32) NOT NULL, " +
NUMBER + "INTEGER, " +
EMAIL + "VARCHAR(25) NOT NULL, " +
JOBTYPE + "VARCHAR(20) NOT NULL, " +
URI + "VARCHAR(50) NOT NULL, " +
MSG + "VARCHAR(500) NOT NULL);";