java - 简单的 Android 应用程序 - SQLite - SQL 已停止

标签 java android sql sqlite

我正在使用 Android Studio 编写一个应用程序。这是一个简单的练习应用程序。 我确信它会起作用,但没有。有问题。 我将在这里粘贴我的代码:

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;
        }

    }
}

我没有错误,但是当我尝试添加 Record 应用程序停止时,我收到“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)

最佳答案

改变这个

 @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);");
}

'table 和 (ID' 之间没有空格,所以你的命令是

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

它不会运行。

我还注意到你忘记了 ) 并且你忘记了 ;在声明的末尾。你必须记住;出于安全原因

关于java - 简单的 Android 应用程序 - SQLite - SQL 已停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35511829/

相关文章:

java - 比较字符串时使用 Comparable 接口(interface)

安卓获取未接来电

Android:Camera2 API 仅在 Google Pixel 2 和 2 XL 设备上崩溃

sql - oracle SQL选择过去x天滚动期间的不同客户

php - 如何防止 PHP 中的 SQL 注入(inject)?

java - 使用 JSch 将一个文件从远程计算机复制到另一台远程计算机

java - Spring 的 JavaConfig 和 CustomScopeConfigurer 问题

android - 具有主/详细流程的 fragment 中的可扩展 ListView

php - MySQL:查询搜索所有可能的单词

java - 用于 Java 的 NHibernate MultiQuery