- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序出现错误,我什至无法启动它。
SqliteDatabase.java
public class SqliteDatabase extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 5;
private static final String DATABASE_NAME = "myexpenditure";
private static final String TABLE_EXPENDITURE = "myexpenditures";
private static final String COLUMN_ID = "id";
private static final String COLUMN_PLACE = "place";
private static final String COLUMN_DATE = "date";
private static final String COLUMN_AMOUNT = "amount";
private static final String COLUMN_CATEGORIES = "categories";
private static final String COLUMN_ADDITIONAL_INFO = "additional_info";
public SqliteDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_EXPENDITURE_TABLE = "CREATE TABLE " + TABLE_EXPENDITURE + "(" + COLUMN_ID + " INTEGER PRIMARY," + COLUMN_PLACE + " TEXT," + COLUMN_DATE + " TEXT," + COLUMN_AMOUNT + " INTEGER," + COLUMN_CATEGORIES + " TEXT," + COLUMN_ADDITIONAL_INFO + " TEXT" + ")" ;
sqLiteDatabase.execSQL(CREATE_EXPENDITURE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_EXPENDITURE);
onCreate(sqLiteDatabase);
}
public List<Expenditure> listExpenditure() {
String sql = "select * from " + TABLE_EXPENDITURE;
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
List<Expenditure> storeExpenditure = new ArrayList<>();
Cursor cursor = sqLiteDatabase.rawQuery(sql, null);
if (cursor.moveToFirst()) {
do {
int id = Integer.parseInt(cursor.getString(0));
String place = cursor.getString(1);
String date = cursor.getString(2);
int amount = Integer.parseInt(cursor.getString(3));
String category = cursor.getString(4);
String additional_info = cursor.getString(5);
storeExpenditure.add(new Expenditure(id, place, date, amount, category, additional_info));
} while (cursor.moveToNext());
}
cursor.close();
return storeExpenditure;
}
public void addExpenditure(Expenditure expenditure){
ContentValues values = new ContentValues();
values.put(COLUMN_PLACE,expenditure.getPlace());
values.put(COLUMN_DATE,expenditure.getDate());
values.put(COLUMN_AMOUNT,expenditure.getAmount());
values.put(COLUMN_CATEGORIES,expenditure.getCategories());
values.put(COLUMN_ADDITIONAL_INFO,expenditure.getAdditional_Info());
SQLiteDatabase db = this.getWritableDatabase();
db.insert(TABLE_EXPENDITURE,null,values);
}
public void updateExpenditure(Expenditure expenditure){
ContentValues values = new ContentValues();
values.put(COLUMN_PLACE,expenditure.getPlace());
values.put(COLUMN_DATE,expenditure.getDate());
values.put(COLUMN_AMOUNT,expenditure.getAmount());
values.put(COLUMN_CATEGORIES,expenditure.getCategories());
values.put(COLUMN_ADDITIONAL_INFO,expenditure.getAdditional_Info());
SQLiteDatabase db = this.getWritableDatabase();
db.update(TABLE_EXPENDITURE,values,COLUMN_ID + " =?",new String[]{String.valueOf(expenditure.getId())});
}
public Expenditure findExpenditure(String place){
String query = "Select * FROM" + TABLE_EXPENDITURE + "WHERE"+ COLUMN_PLACE + " = " + "place";
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Expenditure mExpenditure =null;
Cursor cursor=sqLiteDatabase.rawQuery(query,null);
if (cursor.moveToFirst()){
int id = Integer.parseInt(cursor.getString(0));
String expenditurePlace = cursor.getString(1);
String date = cursor.getString(2);
int amount = Integer.parseInt(cursor.getString(3));
String category = cursor.getString(4);
String additional_info = cursor.getString(5);
mExpenditure = new Expenditure(id,expenditurePlace,date,amount,category,additional_info);
}
cursor.close();
return mExpenditure;
}
public void deleteExpenditure(int id){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
sqLiteDatabase.delete(TABLE_EXPENDITURE,COLUMN_ID + " = ?",new String[]{String.valueOf(id)});
}
MainActivity.Java
public class MainActivity extends AppCompatActivity {
private static final String TAG = ExpenditureSummary.class.getSimpleName();
private SqliteDatabase mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout frameLayout=(FrameLayout)findViewById(R.id.activity_expenditure_summary);
RecyclerView expenditureView =(RecyclerView)findViewById(R.id.expenditure_list);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
expenditureView.setLayoutManager(linearLayoutManager);
expenditureView.setHasFixedSize(true);
mDatabase = new SqliteDatabase(this);
List<Expenditure> allExpenditure = mDatabase.listExpenditure();
if (allExpenditure.size() > 0){
expenditureView.setVisibility(View.VISIBLE);
ExpenditureAdapter mAdapter = new ExpenditureAdapter(this,allExpenditure);
expenditureView.setAdapter(mAdapter);
} else {
expenditureView.setVisibility(View.GONE);
Toast.makeText(this, "There is no entries.Start adding now", Toast.LENGTH_SHORT).show();
}
FloatingActionButton fab =(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addTaskDialog();
}
});
}
private void addTaskDialog(){
LayoutInflater inflater = LayoutInflater.from(this);
View subview = inflater.inflate(R.layout.activity_edit_expenditure_details,null);
final EditText placeField = (EditText)subview.findViewById(R.id.enter_place);
//date picker
final EditText dateField =(EditText)subview.findViewById(R.id.enter_date);
final Calendar myCalendar = Calendar.getInstance();
final DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
myCalendar.set(Calendar.YEAR,year);
myCalendar.set(Calendar.MONTH,monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH,dayOfMonth);
String myFormat ="dd/MM/yyyy";
SimpleDateFormat simpleDateFormat =new SimpleDateFormat(myFormat, Locale.UK);
dateField.setText(simpleDateFormat.format(myCalendar.getTime()));
}
};
dateField.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new DatePickerDialog(MainActivity.this,datePickerListener,myCalendar.get(Calendar.YEAR),myCalendar.get(Calendar.MONTH),myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
final EditText amountField =(EditText)subview.findViewById(R.id.enter_amount);
//Spinner
final Spinner spinnerCategories=(Spinner)subview.findViewById(R.id.enter_category);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.categories, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerCategories.setAdapter(adapter);
final EditText additional_infoField = (EditText)subview.findViewById(R.id.enter_additional_info);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Add new expense");
builder.setView(subview);
builder.create();
builder.setPositiveButton("ADD EXPENSE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
final String place = placeField.getText().toString();
final String date = dateField.getText().toString();
final int amount = Integer.parseInt(amountField.getText().toString());
final String category = spinnerCategories.getSelectedItem().toString();
final String additional_info = additional_infoField.getText().toString();
if (TextUtils.isEmpty(place)|| amount <= 0 || TextUtils.isEmpty(category)||TextUtils.isEmpty(date)){
Toast.makeText(MainActivity.this, "Please input values", Toast.LENGTH_SHORT).show();
}
else {
Expenditure newExpenditure = new Expenditure(place,date,amount,category,additional_info);
mDatabase.addExpenditure(newExpenditure);
finish();
startActivity(getIntent());
}
}
});
builder.setNegativeButton("CANCEL",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "Task Cancelled", Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
@Override
protected void onDestroy(){
super.onDestroy();
if (mDatabase != null){
mDatabase.close();
}
}
错误如下:
03-24 10:10:16.844 19709-19709/com.nebula.sebjohn.myexpenses E/AndroidRuntime: FATAL EXCEPTION: main Process: com.nebula.sebjohn.myexpenses, PID: 19709 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nebula.sebjohn.myexpenses/com.nebula.sebjohn.myexpenses.MainActivity}: android.database.sqlite.SQLiteException: near ",": syntax error (code 1): , while compiling: CREATE TABLE myexpenditures(id INTEGER PRIMARY,place TEXT,date TEXT,amount INTEGER,categories TEXT,additional_info TEXT) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2439) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2499) at android.app.ActivityThread.access$900(ActivityThread.java:166) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1360) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5468) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: android.database.sqlite.SQLiteException: near ",": syntax error (code 1): , while compiling: CREATE TABLE myexpenditures(id INTEGER PRIMARY,place TEXT,date TEXT,amount INTEGER,categories TEXT,additional_info TEXT) 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.(SQLiteProgram.java:58) at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674) at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605) at Database.SqliteDatabase.onCreate(SqliteDatabase.java:39) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251) at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187) at Database.SqliteDatabase.listExpenditure(SqliteDatabase.java:51) at com.nebula.sebjohn.myexpenses.MainActivity.onCreate(MainActivity.java:50) at android.app.Activity.performCreate(Activity.java:6556) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2392) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2499) at android.app.ActivityThread.access$900(ActivityThread.java:166) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1360) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5468) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我是 Android 应用程序开发的新手。请帮我解决这个问题。我正在尝试使用 SQLiteDatabase 将数据存储在我的手机中。
Build.gradle(Module:app)
android {
compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig {
applicationId "com.nebula.sebjohn.myexpenses"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.intuit.sdp:sdp-android:1.0.3'
compile 'com.android.support:design:25.0.1'
compile 'com.android.support:cardview-v7:25.0.1'
compile 'com.android.support:recyclerview-v7:25.0.1'
compile 'com.android.support:support-v4:25.0.1'
compile 'com.google.code.gson:gson:2.6.1'
compile 'io.realm:android-adapters:1.4.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
最佳答案
您的 SQL 查询有问题,您的查询在列名和表名中缺少撇号。您的查询还缺少主键声明部分中的 KEY 参数。请按如下方式修改您的查询:
CREATE TABLE `myexpenditures` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`place` TEXT,
`date` TEXT,
`amount` INTEGER,
`categories` TEXT,
`additional_info` TEXT
);
希望对您有所帮助。
关于android - 创建表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42991686/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!