2016-02-19 17 views
2

我正在使用Android Studio編寫應用程序。這是一個簡單的練習應用程序。 我確定它會工作,但沒有。有些事情是錯的。 我會在這裏貼上我的代碼:簡單的Android應用程序 - SQLite - SQL已停止

package programowanie.android.sql; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    DatabaseHelper db; 

    EditText editTextImie; 
    EditText editTextNazwisko; 
    EditText editTextTelefon; 
    EditText editTextEmail; 
    EditText editTextUlica; 
    EditText editTextKod; 

    Button btDodaj; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     db = new DatabaseHelper(this); 

     editTextImie = (EditText) findViewById(R.id.editTextImie); 
     editTextNazwisko = (EditText) findViewById(R.id.editTextNazwisko); 
     editTextTelefon = (EditText) findViewById(R.id.editTextTelefon); 
     editTextEmail = (EditText) findViewById(R.id.editTextEmail); 
     editTextUlica = (EditText) findViewById(R.id.editTextUlica); 
     editTextKod = (EditText) findViewById(R.id.editTextKod); 

     btDodaj = (Button) findViewById(R.id.btDodaj); 

     btDodaj.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       boolean czysieudalo; 
       czysieudalo = db.wstawdane(editTextImie.getText().toString(), editTextNazwisko.getText().toString(), editTextTelefon.getText().toString(), editTextEmail.getText().toString(), editTextUlica.getText().toString(), editTextKod.getText().toString()); 
       if(czysieudalo){ 
        Toast.makeText(MainActivity.this, "Udało się!", Toast.LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(MainActivity.this, "Niestety nie udało się :(!", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
    } 
} 

這是我DatabaseHelper類:

package programowanie.android.sql; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

/** 
* Created by Kudłaty on 2016-02-19. 
*/ 
public class DatabaseHelper extends SQLiteOpenHelper { 
    public static final String database_name ="Kontakty"; 
    public static final String database_table ="Osoby"; 

    public DatabaseHelper(Context context) { 
     super(context, database_name, null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table" + database_table + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO TEXT"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXIST" + database_table); 
     onCreate(db); 
    } 

    public boolean wstawdane(String imie, String nazwisko, String nr_tel, String email, String ulica, String kod){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 
     cv.put("Imie", imie); 
     cv.put("Nazwisko", nazwisko); 
     cv.put("Nr telefonu", nr_tel); 
     cv.put("Email", email); 
     cv.put("Ulica", ulica); 
     cv.put("Kod pocztowy", kod); 
     if (db.insert(database_table, null, cv)==-1){ 
      return false; 
     } else { 
      return true; 
     } 

    } 
} 

我沒有錯誤,但是當我嘗試添加記錄應用程序停止和我得到的「SQL有停止「

我忘了粘貼日誌!你在這!

02-19 18:02:43.119 2087-2087/programowanie.android.sql I/art: Not late-enabling -Xcheck:jni (already on) 
02-19 18:02:43.195 2087-2087/programowanie.android.sql W/System: ClassLoader referenced unknown path: /data/app/programowanie.android.sql-1/lib/x86 
02-19 18:02:43.348 2087-2115/programowanie.android.sql D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 
02-19 18:02:43.410 2087-2115/programowanie.android.sql I/OpenGLRenderer: Initialized EGL, version 1.4 
02-19 18:02:43.544 2087-2115/programowanie.android.sql W/EGL_emulation: eglSurfaceAttrib not implemented 
02-19 18:02:43.544 2087-2115/programowanie.android.sql W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabdff300, error=EGL_SUCCESS 
02-19 18:03:19.132 2087-2087/programowanie.android.sql E/SQLiteLog: (1) near "tableOsoby": syntax error 
02-19 18:03:19.133 2087-2087/programowanie.android.sql D/AndroidRuntime: Shutting down VM 
02-19 18:03:19.133 2087-2087/programowanie.android.sql E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: programowanie.android.sql, PID: 2087 
                     android.database.sqlite.SQLiteException: near "tableOsoby": syntax error (code 1): , while compiling: create tableOsoby(ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO 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.<init>(SQLiteProgram.java:58) 
                      at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
                      at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674) 
                      at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605) 
                      at programowanie.android.sql.DatabaseHelper.onCreate(DatabaseHelper.java:21) 
                      at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251) 
                      at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 
                      at programowanie.android.sql.DatabaseHelper.wstawdane(DatabaseHelper.java:31) 
                      at programowanie.android.sql.MainActivity$1.onClick(MainActivity.java:43) 
                      at android.view.View.performClick(View.java:5198) 
                      at android.view.View$PerformClick.run(View.java:21147) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      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) 
+1

缺少)在創建表命令的結束之後? –

+0

是啊!感謝那個adivce。 但現在我不能添加任何記錄。我有我的Toast「Nieudałosię:(」。 –

+0

雖然在插入時出現錯誤,但實際上插入的數據是可能的,你可以檢查一下嗎?也可以嘗試使用'insertOrThrow'或'insertWithOnConflict'。 ,確保正在打開和關閉數據庫。 –

回答

3

改變這種

@Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL("create table" + database_table + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO TEXT"); 
     } 

這個

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + database_table + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO TEXT);"); 
} 

你有 '表(ID' 所以你的命令將一直之間沒有空格

"create tableOsoby(ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO TEXT" 

這不會運行

另外我注意到你忘了),你忘記了;在聲明的最後。你必須記住;出於安全原因,

+1

是的,我在發佈這個問題後發現了它,但是謝謝。 但現在我不能添加任何記錄:/ –

1

由於錯誤日誌:

android.database.sqlite.SQLiteException: near "tableOsoby": syntax error (code 1): , while compiling: create tableOsoby(ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO TEXT

我確定這裏有兩個問題,可能導致SQLite的崩潰:

1)在它缺少之間的空間線db.execSQL("create table" + database_table + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO TEXT");了「創建表「字符串和表名變量,導致」創建表過時「。與下一個連接字符串相同的情況。

2)字符串"(ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO TEXT"中缺少右括號。

校正線應該是:

db.execSQL("create table " + database_table + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, IMIE TEXT, NAZWISKO TEXT, NUMER_TELEFONU TEXT, EMAIL TEXT, ULICA TEXT, KOD_MIASTO TEXT)");