我知道有很多关于此错误的主题,但我尝试了很多解决方案,但仍然遇到了这个错误。 这是我第一次玩SQLite,我不明白那里发生了什么错误。
05-26 08:34:20.369 23124-23124/com.danynuria.fmp D/ODOperations﹕ Overall Table Created
05-26 08:34:20.373 23124-23124/com.danynuria.fmp E/SQLiteLog﹕ (1) no such table: database_info
05-26 08:34:20.374 23124-23124/com.danynuria.fmp E/SQLiteDatabase﹕ Error inserting date=26 / 4 / 2015 county=Bedfordshire co2_saved=149 distance=1245 distance_type=run user_id=1
android.database.sqlite.SQLiteException: no such table: database_info (code 1): , while compiling: INSERT INTO database_info(date,county,co2_saved,distance,distance_type,user_id) VALUES (?,?,?,?,?,?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
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.insertWithOnConflict(SQLiteDatabase.java:1469)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
at com.danynuria.fmp.OverallDatabaseOperations.putInformation(OverallDatabaseOperations.java:73)
at com.danynuria.fmp.MainActivity$1.onClick(MainActivity.java:121)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
05-26 08:34:20.374 23124-23124/com.danynuria.fmp D/ODOperations﹕ One row inserted
我的代码:
package com.danynuria.fmp;
import android.app.DownloadManager;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.danynuria.fmp.OverallTableData.OverallTableinfo;
import java.sql.SQLException;
public class OverallDatabaseOperations extends SQLiteOpenHelper {
// Create integer that register version of database
private static final int overallDatabase_version = 1;
// Create query
public String CREATE_QUERY = "CREATE TABLE "+OverallTableinfo.OVERALL_TABLE_NAME+"( "+OverallTableinfo.USER_ID+" INTEGER, "+OverallTableinfo.DISTANCE+
" INTEGER, "+OverallTableinfo.DISTANCE_TYPE+" TEXT, "+OverallTableinfo.COUNTY+" TEXT, "+OverallTableinfo.CO2_SAVED+
" INTEGER, "+OverallTableinfo.DATE+" TEXT);";
// Creating the database using SQLiteOpenHelper constructor
public OverallDatabaseOperations(Context context) {
super(context, OverallTableinfo.OVERALL_DATABASE_NAME, null, overallDatabase_version);
}
public void onCreate(SQLiteDatabase odb ){
odb.execSQL(CREATE_QUERY);
Log.d("ODOperations", "Overall Table Created");
}
public void onUpgrade(SQLiteDatabase arg0,int arg1, int arg2){
}
// Create a method to insert data into database
public void putInformation(OverallDatabaseOperations dop, Integer id, Integer distance, String type, String county, Integer co2saved, String date) {
// Create a SQLite database object
SQLiteDatabase OSQ = dop.getWritableDatabase();
// Create an object for content values
ContentValues ncv = new ContentValues();
// Passing the first column value
ncv.put(OverallTableinfo.USER_ID, id);
ncv.put(OverallTableinfo.DISTANCE, distance);
ncv.put(OverallTableinfo.DISTANCE_TYPE, type);
ncv.put(OverallTableinfo.COUNTY, county);
ncv.put(OverallTableinfo.CO2_SAVED, co2saved);
ncv.put(OverallTableinfo.DATE, date);
// Inserting data into table
OSQ.insert(OverallTableinfo.OVERALL_DATABASE_NAME, null, ncv);
Log.d("ODOperations", "One row inserted");
}
}
另一堂课:
package com.danynuria.fmp;
import android.provider.BaseColumns;
public class OverallTableData {
// Create constructor
public OverallTableData() {
}
// Create abstract class
public static abstract class OverallTableinfo implements BaseColumns {
// Create first column in database
public static final String USER_ID = "user_id";
// Create second column in database
public static final String DISTANCE = "distance";
// Create third column in database
public static final String DISTANCE_TYPE = "distance_type";
// Create forth column in database
public static final String COUNTY = "county";
// Create fifth column in database
public static final String CO2_SAVED = "co2_saved";
// Create sixth column in database
public static final String DATE = "date";
// Define database name
public static final String OVERALL_DATABASE_NAME = "database_info";
// Define table name
public static final String OVERALL_TABLE_NAME = "overall_info";
}
}
非常感谢任何建议
答案 0 :(得分:3)
您必须在插入中使用OVERALL_TABLE_NAME
而不是OVERALL_DATABASE_NAME
:
OSQ.insert(OverallTableinfo.OVERALL_TABLE_NAME, null, ncv);