即使在创建之后,表中也没有列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了即使在创建之后,表中也没有列相关的知识,希望对你有一定的参考价值。
我正在使用java在android Studio中制作应用程序。我创建了一个包含两列(name和productID)的内部数据库,一切正常。当我再添加两列(客户名称和交货日期)时,它会一直崩溃。该活动的代码如下以及logcat。
package com.kristar.busibooks;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class OrderActivity extends AppCompatActivity implements View.OnClickListener {
private EditText editCusTextName;
private EditText editTextName;
private EditText editTextAdd;
private EditText editDDTextName;
private Button btnAdd;
private Button btnView;
private Button btnCurrency;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_order);
createDatabase();
editCusTextName = (EditText) findViewById(R.id.editCusTextName);
editTextName = (EditText) findViewById(R.id.editTextName);
editTextAdd = (EditText) findViewById(R.id.editTextpID);
editDDTextName = (EditText) findViewById(R.id.editDDTextName);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnView = (Button) findViewById(R.id.btnView);
btnCurrency = (Button) findViewById(R.id.btnCurrency);
btnAdd.setOnClickListener(this);
btnView.setOnClickListener(this);
btnCurrency.setOnClickListener(this);
btnView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intentProduct = new Intent(getApplicationContext(), Products.class);
startActivity(intentProduct);
}
});
btnCurrency.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intentCurrencyConverter = new Intent(getApplicationContext(), CurrencyConverter.class);
startActivity(intentCurrencyConverter);
}
});
}
protected void createDatabase(){
db=openOrCreateDatabase("ProductDB", Context.MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS product(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, Custo_name VARCHAR, name VARCHAR,productID INT, Deli_Date DATE);");
}
protected void insertIntoDB(){
String cus_name = editCusTextName.getText().toString().trim();
String name = editTextName.getText().toString().trim();
String add = editTextAdd.getText().toString().trim();
String d_date = editDDTextName.getText().toString().trim();
if(cus_name.equals("") || name.equals("") || add.equals("") || d_date.equals("")){
Toast.makeText(getApplicationContext(),"Please fill all fields", Toast.LENGTH_LONG).show();
return;
}
String query = "INSERT INTO product (Custo_name,name,productID,Deli_Date) VALUES('"+cus_name+"', '"+name+"', '"+add+"', '"+d_date+"');";
db.execSQL(query);
Toast.makeText(getApplicationContext(),"Saved Successfully", Toast.LENGTH_LONG).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
if(v == btnAdd){
insertIntoDB();
}
}
}
06-06 05:32:15.095 2362-2362/com.kristar.busibooks I/art: Not
late-enabling -Xcheck:jni (already on)
06-06 05:32:15.096 2362-2362/com.kristar.busibooks I/art: Late-enabling JIT
06-06 05:32:15.175 2362-2362/com.kristar.busibooks I/art: JIT created with code_cache_capacity=2MB compile_threshold=1000
06-06 05:32:15.592 2362-2362/com.kristar.busibooks W/System: ClassLoader referenced unknown path: /data/app/com.kristar.busibooks-2/lib/x86
06-06 05:32:16.065 2362-2373/com.kristar.busibooks I/art: WaitForGcToComplete blocked for 46.015ms for cause Background
06-06 05:32:17.134 2362-2376/com.kristar.busibooks D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
06-06 05:32:17.163 2362-2373/com.kristar.busibooks I/art: Background sticky concurrent mark sweep GC freed 9565(411KB) AllocSpace objects, 0(0B) LOS objects, 31% free, 2MB/3MB, paused 120.897ms total 1.085s
06-06 05:32:17.212 2362-2362/com.kristar.busibooks D/: HostConnection::get() New Host Connection established 0xab74d8e0, tid 2362
06-06 05:32:17.448 2362-2376/com.kristar.busibooks D/: HostConnection::get() New Host Connection established 0xab74dcb0, tid 2376
06-06 05:32:17.466 2362-2376/com.kristar.busibooks I/OpenGLRenderer: Initialized EGL, version 1.4
06-06 05:32:17.645 2362-2376/com.kristar.busibooks W/EGL_emulation: eglSurfaceAttrib not implemented
06-06 05:32:17.645 2362-2376/com.kristar.busibooks W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabe7f900, error=EGL_SUCCESS
06-06 05:32:18.820 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 64 frames! The application may be doing too much work on its main thread.
06-06 05:32:24.125 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 7.568ms
06-06 05:32:24.333 2362-2376/com.kristar.busibooks W/EGL_emulation: eglSurfaceAttrib not implemented
06-06 05:32:24.333 2362-2376/com.kristar.busibooks W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad6d1620, error=EGL_SUCCESS
06-06 05:32:24.682 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 35.944ms
06-06 05:32:26.172 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 95 frames! The application may be doing too much work on its main thread.
06-06 05:32:26.568 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 12.282ms
06-06 05:32:27.091 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 16.750ms
06-06 05:32:29.126 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 13.683ms
06-06 05:32:34.472 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 25.061ms
06-06 05:32:34.943 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 6.799ms
06-06 05:32:37.274 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 5.115ms
06-06 05:32:38.558 2362-2376/com.kristar.busibooks E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab755640
06-06 05:32:39.187 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 201 frames! The application may be doing too much work on its main thread.
06-06 05:32:41.686 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 27.114ms
06-06 05:32:45.302 2362-2376/com.kristar.busibooks W/EGL_emulation: eglSurfaceAttrib not implemented
06-06 05:32:45.302 2362-2376/com.kristar.busibooks W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad6f0720, error=EGL_SUCCESS
06-06 05:32:45.485 2362-2376/com.kristar.busibooks E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab755640
06-06 05:32:46.455 2362-2376/com.kristar.busibooks W/EGL_emulation: eglSurfaceAttrib not implemented
06-06 05:32:46.455 2362-2376/com.kristar.busibooks W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad6f0720, error=EGL_SUCCESS
06-06 05:32:46.551 2362-2376/com.kristar.busibooks E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab754920
06-06 05:32:46.703 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 77.331ms
06-06 05:32:46.739 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 37 frames! The application may be doing too much work on its main thread.
06-06 05:32:46.830 2362-2373/com.kristar.busibooks I/art: Background partial concurrent mark sweep GC freed 4946(325KB) AllocSpace objects, 0(0B) LOS objects, 39% free, 3MB/5MB, paused 26.008ms total 568.072ms
06-06 05:32:47.154 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 37.891ms
06-06 05:32:47.737 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 58 frames! The application may be doing too much work on its main thread.
06-06 05:32:53.132 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 33.821ms
06-06 05:32:54.141 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 32.107ms
06-06 05:32:57.998 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 29.788ms
06-06 05:32:58.477 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 5.348ms
06-06 05:33:06.832 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 57.211ms
06-06 05:33:06.841 2362-2362/com.kristar.busibooks E/SQLiteLog: (1) table product has no column named Custo_name
06-06 05:33:06.842 2362-2362/com.kristar.busibooks D/AndroidRuntime: Shutting down VM
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: FATAL EXCEPTION: main
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: Process: com.kristar.busibooks, PID: 2362
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: android.database.sqlite.SQLiteException: table product has no column named Custo_name (code 1): , while compiling: INSERT INTO product (Custo_name,name,productID,Deli_Date) VALUES('fg', 'gh', '56', '2017-11-12');
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at com.kristar.busibooks.OrderActivity.insertIntoDB(OrderActivity.java:91)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at com.kristar.busibooks.OrderActivity.onClick(OrderActivity.java:122)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.view.View.performClick(View.java:5198)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:21147)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-06 05:33:09.908 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 7.133ms
06-06 05:33:12.921 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 43.865ms
06-06 05:33:14.574 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 7.056ms
06-06 05:33:15.794 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 14.265ms
06-06 05:33:22.451 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 13.150ms
答案
首次安装应用程序时,您的表已在没有这些列的情况下创建。您需要升级表,然后添加这些列或使用更新的表模式重新安装应用程序。
另一答案
在你的代码中,
openOrCreateDatabase()
仅当该数据库不存在时才创建新数据库。
和
CREATE TABLE IF NOT EXISTS
不改变旧表,它只创建一个新表,如果它甚至不存在
在您的代码指定或卸载应用程序之前,不会删除应用程序的数据库或其表格。
如果你想保留旧条目
改用ALTER TABLE,
或者你可以卸载应用程序然后从Android工作室运行。
以上是关于即使在创建之后,表中也没有列的主要内容,如果未能解决你的问题,请参考以下文章
Discord.js - .then 即使在函数中也没有定义?
为啥即使在增加执行时间之后,我在本地的 Word press 中也会出现 max_execution_time 错误?
即使食谱可用并且设置了依赖项,Chef 中也没有此类食谱异常 - AWS OpsWorks
即使在 FragmentManager.executePendingTransactions() 之后,也不会立即调用 Fragment 中的 onCreateView()