- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个锻炼日志应用程序作为一个项目。我正在尝试将锻炼名称插入数据库。在提示用户添加练习之前。目前它显示“出现问题错误”,然后应用程序崩溃。
下面是Logcat中的错误
android.database.sqlite.SQLiteException: near "Name": syntax error (code 1): , while compiling: INSERT INTO workout_table(Workout Name) VALUES (?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
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.example.cormac.gymbud.DatabaseHelper.addWorkout(DatabaseHelper.java:112)
at com.example.cormac.gymbud.AddWorkout.AddData(AddWorkout.java:65)
at com.example.cormac.gymbud.AddWorkout.access$100(AddWorkout.java:15)
at com.example.cormac.gymbud.AddWorkout$1.onClick(AddWorkout.java:49)
at android.view.View.performClick(View.java:5205)
at android.view.View$PerformClick.run(View.java:21164)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
下面是我的DatabaseHelper.class
public class DatabaseHelper extends SQLiteOpenHelper {
private static String TAG = "DatabaseHelper";
//workout table
public static final String TABLE_WORKOUT = "workout_table";
public static final String COL1 = "ID";
public static final String COL2 = "Workout Name";
//exercise table
public static final String TABLE_EXERCISE ="exercise_table";
public static final String COL3 = "ID";
public static final String COL4 = ("Exercise Name");
public static final String COL5 = ("Set");
public static final String COL6 = ("Weight");
public static final String COL7 = ("Reps");
private static final String DATABASE_NAME = "workouts.db";
private static final int DATABASE_VERSION = 1;
private static final String createWorkoutTable = "CREATE TABLE " + TABLE_WORKOUT + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL2 +" TEXT)";
private static final String createExerciseTable = "CREATE TABLE " + TABLE_EXERCISE + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL4 +" TEXT," + COL5 +" INTEGER,"+ COL6 + " INTEGER," + COL7 + "INTEGER)";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//db.execSQL("Create table user(email text primary key, password text)");
db.execSQL(createWorkoutTable);
db.execSQL(createExerciseTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
//db.execSQL("drop table if exists user");
//onCreate(db);
db.execSQL("DROP IF TABLE EXISTS " + TABLE_WORKOUT);
onCreate(db);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_EXERCISE);
onCreate(db);
}
//inserting in database
// public boolean insert(String email, String password){
// SQLiteDatabase db = this.getWritableDatabase();
// ContentValues contentValues = new ContentValues();
//contentValues.put("email",email);
//contentValues.put("password",password);
//long ins = db.insert("user", null,contentValues);
//if (ins==1) return false;
//else return true;
//}
//checking if the email already exists
//public Boolean checkEmail(String email){
// SQLiteDatabase db = this.getReadableDatabase();
// Cursor cursor = db.rawQuery("Select * from user where email=?",new String[]{email});
//if (cursor.getCount()>0) return false;
//else return true;
//}
//checking the email and password
//public Boolean emailpassword(String email, String password){
// SQLiteDatabase db = this.getReadableDatabase();
// Cursor cursor = db.rawQuery("select * from user where email=? and password=?",new String[]{email,password});
// if (cursor.getCount()>0) return true;
//else return false;
//}
public boolean addWorkout(String workout){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2,workout);
Log.d(TAG, "addData: Adding " + workout + " to" + TABLE_WORKOUT);
long result = db.insert(TABLE_WORKOUT, null, contentValues);
if (result == -1){
return false;
}else{
return true;
}
}
public boolean addExercise(String item){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(item, COL4);
contentValues.put(item, COL5);
contentValues.put(item, COL6);
contentValues.put(item, COL7);
Log.d(TAG, "addData: Adding " + item + " to" + TABLE_EXERCISE);
long result = db.insert(TABLE_EXERCISE, null, contentValues);
if (result == -1){
return false;
}else{
return true;
}
}
//return data from the database
public Cursor getDataWorkout(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " + TABLE_WORKOUT;
Cursor data = db.rawQuery(query, null);
return data;
}
public Cursor getDataExercise(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " + TABLE_EXERCISE;
Cursor data = db.rawQuery(query, null);
return data;
}
public Cursor getItemIDWorkout(String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT " + COL1 + "FROM" + TABLE_WORKOUT +
" WHERE " + COL2 + " = " + name + " ";
Cursor data = db.rawQuery(query, null);
return data;
}
public Cursor getItemIDExercise(String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT " + COL3 + "FROM" + TABLE_EXERCISE +
" WHERE " + COL4 + " = " + name + " ";
Cursor data = db.rawQuery(query, null);
return data;
}
public Cursor getExerciseSet(Integer set){
SQLiteDatabase db = this.getWritableDatabase();
Integer query = Integer.valueOf("SELECT " + COL3 + "FROM" + TABLE_EXERCISE +
" WHERE " + COL5 + " = " + set + " ");
Cursor data = db.rawQuery(String.valueOf(query), null);
return data;
}
public Cursor getExerciseWeight(Integer weight){
SQLiteDatabase db = this.getWritableDatabase();
Integer query = Integer.valueOf("SELECT " + COL3 + "FROM" + TABLE_EXERCISE +
" WHERE " + COL6 + " = " + weight + " ");
Cursor data = db.rawQuery(String.valueOf(query), null);
return data;
}
public Cursor getExerciseRep(Integer rep){
SQLiteDatabase db = this.getWritableDatabase();
Integer query = Integer.valueOf("SELECT " + COL3 + "FROM" + TABLE_EXERCISE +
" WHERE " + COL7 + " = " + rep + " ");
Cursor data = db.rawQuery(String.valueOf(query), null);
return data;
}
public void updateWorkoutName(String newName, int id, String oldName){
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_WORKOUT + " SET" + COL2 +
" = " + newName + "WHERE" + COL1 + " = " + id + " " +
" AND " + COL2 + " = " + oldName + " ";
Log.d(TAG, "updateName: query " + query);
Log.d(TAG, "updateName: Setting name to " + newName);
db.execSQL(query);
}
public void updateExerciseName(String newName, int id, String oldName){
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE" + TABLE_EXERCISE + "SET" + COL4 +
" = " + newName + "WHERE" + COL3 + " = " + id + " " +
" AND " + COL4 + " = " + oldName + " ";
Log.d(TAG, "updateName: query " + query);
Log.d(TAG, "updateName: Setting name to" + newName);
db.execSQL(query);
}
public void updateExerciseSet(int newSet, int id, String oldSet){
SQLiteDatabase db = this.getWritableDatabase();
Integer query = Integer.valueOf("UPDATE" + TABLE_EXERCISE + "SET" + COL5 +
" = " + newSet + "WHERE" + COL3 + " = " + id + " " +
" AND " + COL5 + " = " + oldSet + " ");
Log.d(TAG, "updateSet: query " + query);
Log.d(TAG, "updateSet: Setting name to" + newSet);
db.execSQL(String.valueOf(query));
}
public void updateExerciseWeight(int newWeight, int id, String oldWeight){
SQLiteDatabase db = this.getWritableDatabase();
Integer query = Integer.valueOf("UPDATE" + TABLE_EXERCISE + "SET" + COL6 +
" = " + newWeight + "WHERE" + COL3 + " = " + id + " " +
" AND " + COL6 + " = " + oldWeight + " ");
Log.d(TAG, "updateWeight: query " + query);
Log.d(TAG, "updateWeight: Setting name to" + newWeight);
db.execSQL(String.valueOf(query));
}
public void updateExerciseRep(int newRep, int id, String oldRep){
SQLiteDatabase db = this.getWritableDatabase();
Integer query = Integer.valueOf("UPDATE" + TABLE_EXERCISE + "SET" + COL7 +
" = " + newRep + "WHERE" + COL3 + " = " + id + " " +
" AND " + COL7 + " = " + oldRep + " ");
Log.d(TAG, "updateRep: query " + query);
Log.d(TAG, "updateRep: Setting name to" + newRep);
db.execSQL(String.valueOf(query));
}
public void deleteWorkoutName(int id, String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "DELETE FROM " + TABLE_WORKOUT + " WHERE "
+ COL1 + " = '" + id + "'" +
" AND " + COL2 + " = '" + name + "'";
Log.d(TAG, "deleteName: query: " + query);
Log.d(TAG, "deleteName: Deleting " + name + " from database.");
db.execSQL(query);
}
public void deleteExerciseName(int id, String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "DELETE FROM " + TABLE_EXERCISE + " WHERE "
+ COL3 + " = '" + id + "'" +
" AND " + COL4 + " = '" + name + "'";
Log.d(TAG, "deleteName: query: " + query);
Log.d(TAG, "deleteName: Deleting " + name + " from database.");
db.execSQL(query);
}
public void deleteExerciseSet(int id, int set){
SQLiteDatabase db = this.getWritableDatabase();
String query = "DELETE FROM " + TABLE_EXERCISE + " WHERE "
+ COL3 + " = '" + id + "'" +
" AND " + COL5 + " = '" + set + "'";
Log.d(TAG, "deleteSet: query: " + query);
Log.d(TAG, "deleteSet: Deleting " + set + " from database.");
db.execSQL(query);
}
public void deleteExerciseWeight(int id, int Weight){
SQLiteDatabase db = this.getWritableDatabase();
String query = "DELETE FROM " + TABLE_EXERCISE + " WHERE "
+ COL3 + " = '" + id + "'" +
" AND " + COL6 + " = '" + Weight + "'";
Log.d(TAG, "deleteWeight: query: " + query);
Log.d(TAG, "deleteWeight: Deleting " + Weight + " from database.");
db.execSQL(query);
}
public void deleteExerciseRep(int id, int rep){
SQLiteDatabase db = this.getWritableDatabase();
String query = "DELETE FROM " + TABLE_EXERCISE + " WHERE "
+ COL3 + " = '" + id + "'" +
" AND " + COL7 + " = '" + rep + "'";
Log.d(TAG, "deleteRep: query: " + query);
Log.d(TAG, "deleteRep: Deleting " + rep + " from database.");
db.execSQL(query);
}
}
这是 AddWorout Activity
public class AddWorkout extends AppCompatActivity implements View.OnClickListener {
public static final String TAG = "AddWorkout";
private EditText edtWorkout;
private Button btnAddW;
DatabaseHelper mDatabseHelper;
private WorkoutDAO mWorkoutDOA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_workout2);
initViews();
edtWorkout = (EditText) findViewById(R.id.edtWorkout);
btnAddW = (Button) findViewById(R.id.btnAddW);
mDatabseHelper = new DatabaseHelper(this);
btnAddW.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String workout = edtWorkout.getText().toString();
if (edtWorkout.length() != 0) {
AddData(workout);
edtWorkout.setText("");
Intent intent = new Intent(AddWorkout.this, AddExercise.class);
startActivity(intent);
} else {
toastMessage("You must put something in the text field!");
}
;
}
});
}
private void AddData(String workout) {
boolean insertData = mDatabseHelper.addWorkout(workout);
if (insertData){
toastMessage("Data Successfully Inserted");
} else {
toastMessage("Something went wrong");
}
}
private void toastMessage(String s) {
Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
}
private void initViews(){
this.edtWorkout = (EditText) findViewById(R.id.edtWorkout);
this.btnAddW = (Button) findViewById(R.id.btnAddW);
this.btnAddW.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnAddW:
Editable WorkoutName = edtWorkout.getText();
if (!TextUtils.isEmpty(WorkoutName) ) {
// add the exercise to database
Workout createdWorkout = mWorkoutDOA.createWorkout(
WorkoutName.toString());
Log.d(TAG, "added workout : "+ createdWorkout.getName());
Intent intent = new Intent();
intent.putExtra(ListWorkoutActivity.EXTRA_ADDED_WORKOUT, (Parcelable) createdWorkout);
setResult(RESULT_OK, intent);
finish();
}
else {
Toast.makeText(this, R.string.empty_fields_message, Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mWorkoutDOA.close();
}
}
最佳答案
您的问题是您使用 public static final String COL2 = "Workout Name"; 定义了
COL2
锻炼和名称之间的空格会导致此类问题,但有时不会导致问题,例如创建表格时。
您可以将列名称更改为不包含空格,例如
public static final String COL2 = "Workout_Name"; //<<<< recommended way
或者您可以将其附上,例如使用以下其中一个:-
public static final String COL2 = "[Workout Name]";
public static final String COL2 = "`Workout Name`";
public static final String COL2 = "'Workout Name'";
public static final String COL2 = "\"Workout Name\"";
这些修复需要删除并重新创建表,因为当前列名称为 Workout
如果您确实想要,您可以使用public static final String COL2 = "Workout";
,因为这就是当前的列名称。在这个阶段,这不需要删除并重新创建表。
您可能会遇到类似的问题,因为COL4是练习名称。
关于java - 数据库.sqlite.SQLiteException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49729894/
我有一段代码: try { //sniping out a bunch of irrelevant code here result = cmd.ExecuteScalar();
我有一项服务(在下面列出)正在尝试创建数据库表。当 PlayerTable 的 onCreate() 中的 sql 被执行时,我得到一个异常我不明白。下面列出了所有代码。基本上,服务启动,获取一个 S
从SQLite查询数据时,它说: SQLite错误提供给命令的参数不足 我认为这是一个错误,或者错误消息具有误导性。 因为我只有一个参数并且正在提供它,所以我无法理解问题出在哪里。 这是我的代码: p
我正在尝试使用 SQLite 运行 NHibernate 集成测试。 NHibernate 的 SchemaExport 将根据我的映射文件为我设置数据库。除了我的触发器之外,这工作得很好。 .hbm
我想执行一个 ManagedQuery 但我在我的日志中收到一个错误: 查询 Cursor cursor = managedQuery(GroceryListContentProvider.NOTE
我明白了 android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): , while compiling
当我尝试访问我的 View 时出现此错误 我已经使用它构建了我的数据库/ View CREATE TABLE Boxer( BoxerId INTEGER PRIMARY KEY AUTOINCREM
我有这个代码: String sql="UPDATE LAST_OPEN SET LAST_OPEN="+DATE+" WHERE STUDENT_ID ="+STUDENT_I
我在 SQLite 数据库上工作得很好,但现在我在使用查询时遇到了问题。例如,如果使用这样的查询: SQLiteDatabase db = mHelper.getReadableDatabase();
谁知道这是什么意思?我正在尝试在 onActivityResult() 中启动事务以根据收到的结果插入一行。 03-05 15:39:51.937: ERROR/Database(2387): Fai
插入sqlite3数据库失败的可能原因是什么?来自 SQLiteException 的跟踪并不是特别有用。 是否有任何方法可以更好地了解导致异常的原因? 创建表格的位置(抱歉任何不稳定的间距): ht
我正在 try catch “android.database.sqlite.SQLiteException:错误代码 5:数据库已锁定”异常: try { db.insert
我最近在市场上发布了一个应用程序。从开发者控制台看来,我的用户中大约有 1-2% 遇到了这个问题。 1-2% 很小,但人们更倾向于在某些东西不起作用时发表评论,而不是在它起作用时发表评论,这可能会对下
@SuppressLint({"RxLeakedSubscription", "RxSubscribeOnError"}) public static long pushAppointmentsToC
这是从SQLiteDatebase获取表RECORD的代码。在 try block 中出现问题并且总是抛出 SQLiteException。我在这里想做的就是将表“RECORD”的每一行转换为字符串并
我整个上午都在研究此错误的其他实例,但到目前为止我所尝试的一切都不起作用。这可能是显而易见的事情,因为我对此很陌生。 我正在尝试返回 GET_ALL_INGREDIENTS 查询的结果。然后我会将其放
我有一个包含两个表的数据库,每次我尝试向第二个表添加新项目时,它都会说没有这样的表。请帮忙。 数据库助手: @Override public void onCreate(SQLiteDatab
所以我对 SQL 很陌生。我正在尝试将 xml 文件放入我可以搜索的数据库中。我有语法错误,但看不到它/不够熟悉,无法看到它。这是我的 onCreate 方法 protected void onCr
大家好,我在数据库处理程序类中有这个方法,这个类的作用是从产品表中返回产品的 ID。但是,我收到了这个 sqliteException,我不知道为什么。请指教,谢谢。 private stat
我正在构建一个锻炼日志应用程序作为一个项目。我正在尝试将锻炼名称插入数据库。在提示用户添加练习之前。目前它显示“出现问题错误”,然后应用程序崩溃。 下面是Logcat中的错误 android.data
我是一名优秀的程序员,十分优秀!