2017-06-06 71 views
0

我正在使用java在Android Studio中制作应用程序。我创建了一个包含两列(名称和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 
+0

您是否在添加这些列后重新安装应用程序? –

+0

@AbhishekJain我正在制作的应用程序?不,我没有。 – Rani8094

+0

可能会有所帮助。 [Android工作室getSlotFromBufferLocked:未知的缓冲区错误](https://stackoverflow.com/questions/32561479/android-studio-getslotfrombufferlocked-unknown-buffer-error/34224020) –

回答

1

当你第一次安装应用程式的表已经没有这些列上创建。您需要升级您的表格,然后添加这些列或使用更新后的表格模式重新安装应用程序。

0

在你的代码,

openOrCreateDatabase() 

创建只有当不存在新的数据库。

CREATE TABLE IF NOT EXISTS 

不改变旧表,只创建一个新的表,如果它甚至不存在

应用程序的数据库,或者它的表没有删除,直到你的代码指定或卸载应用程序。

如果你想保留旧的条目

使用 ALTER TABLE 代替,

或者,你可以卸载该应用程序,并在Android Studio中运行即可。

+0

我刚卸载它然后运行它。非常感谢您的帮助。 – Rani8094

相关问题