Autore Topic: Problema SQLite  (Letto 400 volte)

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Problema SQLite
« il: 11 Luglio 2013, 22:46:55 CEST »
0
Ragazzi ho questo errore e non capisco cos'è!!!!
Codice: [Seleziona]
07-11 20:43:47.655: E/AndroidRuntime(2747): FATAL EXCEPTION: main
07-11 20:43:47.655: E/AndroidRuntime(2747): java.lang.IllegalStateException: Could not execute method of the activity
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.view.View$1.onClick(View.java:3599)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.view.View.performClick(View.java:4204)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.view.View$PerformClick.run(View.java:17355)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.os.Handler.handleCallback(Handler.java:725)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.os.Handler.dispatchMessage(Handler.java:92)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.os.Looper.loop(Looper.java:137)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.app.ActivityThread.main(ActivityThread.java:5041)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at java.lang.reflect.Method.invokeNative(Native Method)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at java.lang.reflect.Method.invoke(Method.java:511)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at dalvik.system.NativeStart.main(Native Method)
07-11 20:43:47.655: E/AndroidRuntime(2747): Caused by: java.lang.reflect.InvocationTargetException
07-11 20:43:47.655: E/AndroidRuntime(2747):         at java.lang.reflect.Method.invokeNative(Native Method)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at java.lang.reflect.Method.invoke(Method.java:511)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.view.View$1.onClick(View.java:3594)
07-11 20:43:47.655: E/AndroidRuntime(2747):         ... 11 more
07-11 20:43:47.655: E/AndroidRuntime(2747): Caused by: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: CREATE TABLE Accountweb (_id INTEGER PRIMARY KEY AUTOINCREMENT,nome TEXT,nome_utente TEXT,password TEXT,note TEXT,);
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at it.della90.bilancio.db.LeMiePasswordHelper.onCreate(LeMiePasswordHelper.java:38)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
07-11 20:43:47.655: E/AndroidRuntime(2747):         at it.della90.bilancio.Movimenti.insertIntoDb(Movimenti.java:69)
07-11 20:43:47.655: E/AndroidRuntime(2747):         ... 14 more

Classe Helper
Codice: [Seleziona]
public class LeMiePasswordHelper extends SQLiteOpenHelper {

        private static final String DB_NAME = "LeMiePassword.db";
        private static final int DB_VERSION = 1;

        private static SQLiteDatabase db = null;

        public LeMiePasswordHelper(Context context) {
                super(context, DB_NAME, null, DB_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
                LeMiePasswordHelper.db = db;

                StringBuilder builder = new StringBuilder();
                builder.append("CREATE TABLE {0} (");
                builder.append("{1} INTEGER PRIMARY KEY AUTOINCREMENT,");
                builder.append("{2} TEXT,");
                builder.append("{3} TEXT,");
                builder.append("{4} TEXT,");
                builder.append("{5} TEXT,");
                builder.append(");");

                db.execSQL(MessageFormat.format(builder.toString(),
                                AccountWebTable.TABLE_NAME, AccountWebTable._ID,
                                AccountWebTable.NOME, AccountWebTable.NOME_UTENTE,
                                AccountWebTable.PASSWORD, AccountWebTable.NOTE));

               
                builder = new StringBuilder();
                builder.append("CREATE TABLE {0} (");
                builder.append("{1} INTEGER PRIMARY KEY AUTOINCREMENT,");
                builder.append("{2} TEXT,");
                builder.append("{3} TEXT,");
                builder.append("{4} TEXT,");
                builder.append(");");

                String sql = MessageFormat.format(builder.toString(),
                                Log_pcTable.TABLE_NAME, Log_pcTable._ID, Log_pcTable.NOME_UTENTE, Log_pcTable.PASSWORD, Log_pcTable.NOTE);
               
                db.execSQL(sql);
               
               
                builder = new StringBuilder();
                builder.append("CREATE TABLE {0} (");
                builder.append("{1} INTEGER PRIMARY KEY,");
                builder.append("{2} TEXT,");
                builder.append("{3} TEXT,");
                builder.append("{4} TEXT,");
                builder.append("{5} TEXT,");
                builder.append(");");
               
                sql = MessageFormat.format(builder.toString(), EbanckingTable.TABLE_NAME, EbanckingTable._ID, EbanckingTable.NOME_BANCA, EbanckingTable.NOME_UTENTE, EbanckingTable.PASSWORD, EbanckingTable.NOTE);
                db.execSQL(sql);

               

                builder = new StringBuilder();
                builder.append("CREATE TABLE {0} (");
                builder.append("{1} INTEGER PRIMARY KEY,");
                builder.append("{2} TEXT,");
                builder.append("{3} TEXT,");
                builder.append("{4} TEXT,");
                builder.append("{5} TEXT,");
                builder.append(");");
               
                sql = MessageFormat.format(builder.toString(), CartediCreditoTable.TABLE_NAME, CartediCreditoTable._ID, CartediCreditoTable.NOME_CARTA, CartediCreditoTable.NUMERO, CartediCreditoTable.PIN, CartediCreditoTable.SCADENZA, CartediCreditoTable.CVV, CartediCreditoTable.BLOCCO, CartediCreditoTable.NOTE);
                db.execSQL(builder.toString());
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                // Do nothing
        }

        public void insert(String table, String  nome, String nome_utente, String password, String note) {
                ContentValues cv = new ContentValues(4);
                //String sData = DateFormat.format("yyyy-MM-dd", data).toString();
                //cv.put(AccountWebTable.DATA, sData);
                cv.put(AccountWebTable.NOME, nome);
                cv.put(AccountWebTable.NOME_UTENTE, nome_utente);
                cv.put(AccountWebTable.PASSWORD, password);
                cv.put(AccountWebTable.NOTE, note);
               
                db = getWritableDatabase();

                long nRows = db.insert(table, null, cv);
                Log.d("LeMiePassword", "Inserita riga con ID " + nRows);
                db.close();
        }

        public Cursor getAllTuples(String table) {
                db = getReadableDatabase();
                Cursor c = db.query(table, null, null, null, null, null, null);
                db.close();
                return c;
        }

}


una delle Classi per l'inserimento dei valori:
Codice: [Seleziona]
public class Movimenti extends Activity {
        // Variabile per la gestione del database
        private LeMiePasswordHelper mHelper = null;

        private EditText Enomesito, EnomeUtente, Epassword, Enote;
        private Button mConfirm;
        //private TextView mTotale, mDataScelta;
        //private RadioGroup mRadioGroup;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.movimenti);

                // Inizializiamo la variabile per poter gestire il database
                mHelper = new LeMiePasswordHelper(this);

                // Campi
                Enomesito = (EditText) findViewById(R.id.et_nome_sito);
                EnomeUtente = (EditText) findViewById(R.id.et_nome_utente);
                Epassword = (EditText) findViewById(R.id.et_password);
                Enote = (EditText) findViewById(R.id.et_note_account);
               
                mConfirm = (Button) findViewById(R.id.btn_conferma);
               

                //mConfirm.setEnabled(false); // Inizialmente disabilito il pulsante

                }

       
        public void insertIntoDb(View v) {
                ContentValues cv = new ContentValues(2);

                cv.put(AccountWebTable.NOME, Enomesito.getText().toString());
                cv.put(AccountWebTable.NOME_UTENTE, EnomeUtente.getText().toString());
                cv.put(AccountWebTable.PASSWORD, Epassword.getText().toString());
                cv.put(AccountWebTable.NOTE, Enote.getText().toString());
               

                SQLiteDatabase db = mHelper.getWritableDatabase();

               
                //Aggiungo ogni volta una nuova entry
                boolean inserite = false;
                if (!inserite){
                        long result = db.insert(AccountWebTable.TABLE_NAME, null, cv);
                       
                        if (result > 0){
                                inserite = true;
                        }
                }
               
                if (inserite){
                        Toast.makeText(this, "Nuovo Account registrato", Toast.LENGTH_SHORT).show();
                }
                db.close();
               
       
        }
}

       
« Ultima modifica: 11 Luglio 2013, 22:50:37 CEST da Kecco11 »

Offline gigias

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • gigias6615
    • @gigias6615
    • Mostra profilo
  • Dispositivo Android:
    Table Nextway E9
  • Sistema operativo:
    Slackware 14.0 x64
Re:Problema SQLite
« Risposta #1 il: 12 Luglio 2013, 00:24:20 CEST »
0
Prova a rimuovere l'ultima virgola nel comando SQL per la creazione della tabella, cioè quella dopo 'note TEXT' e prima della chiusura parentesi.

Inviato dal mio E9 con Tapatalk 2

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Problema SQLite
« Risposta #2 il: 12 Luglio 2013, 16:05:26 CEST »
0
Eclipse è un pò strano la virgola non c'è! puoi vedere anche tu nella classe Helper >:(

Offline gigias

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • gigias6615
    • @gigias6615
    • Mostra profilo
  • Dispositivo Android:
    Table Nextway E9
  • Sistema operativo:
    Slackware 14.0 x64
Re:Problema SQLite
« Risposta #3 il: 12 Luglio 2013, 16:21:33 CEST »
0
Si ma nel logCat ti dice:

CREATE TABLE Accountweb (_id INTEGER PRIMARY KEY AUTOINCREMENT,nome TEXT,nome_utente TEXT,password TEXT,note TEXT,)

E quando crei le tabelle fai:

[...]
builder.append("{5} TEXT,"); // <- rimuovi l'ultima virgola nella stringa
builder.append(");");
[...]

quindi fai un append di una virgola in più.

Poi ho visto che in queste linee:

sql = MessageFormat.format(builder.toString(), CartediCreditoTable.TABLE_NAME, CartediCreditoTable._ID,     CartediCreditoTable.NOME_CARTA, CartediCreditoTable.NUMERO, CartediCreditoTable.PIN, CartediCreditoTable.SCADENZA, CartediCreditoTable.CVV, CartediCreditoTable.BLOCCO, CartediCreditoTable.NOTE);
db.execSQL(builder.toString());

nell'ultima invece di passare 'sql' passi builder.toString() che invece contiene il comando sql nudo e crudo.
« Ultima modifica: 12 Luglio 2013, 16:28:21 CEST da gigias »

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Problema SQLite
« Risposta #4 il: 12 Luglio 2013, 16:39:34 CEST »
0
Anche facendo le modifiche da te consigliate ho ugualmente gli errori

LogCat
Codice: [Seleziona]
07-12 14:32:35.576: E/AndroidRuntime(2017): FATAL EXCEPTION: main
07-12 14:32:35.576: E/AndroidRuntime(2017): java.lang.IllegalStateException: Could not execute method of the activity
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.view.View$1.onClick(View.java:3599)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.view.View.performClick(View.java:4204)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.view.View$PerformClick.run(View.java:17355)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.os.Handler.handleCallback(Handler.java:725)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.os.Handler.dispatchMessage(Handler.java:92)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.os.Looper.loop(Looper.java:137)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.app.ActivityThread.main(ActivityThread.java:5041)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at java.lang.reflect.Method.invokeNative(Native Method)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at java.lang.reflect.Method.invoke(Method.java:511)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at dalvik.system.NativeStart.main(Native Method)
07-12 14:32:35.576: E/AndroidRuntime(2017): Caused by: java.lang.reflect.InvocationTargetException
07-12 14:32:35.576: E/AndroidRuntime(2017):         at java.lang.reflect.Method.invokeNative(Native Method)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at java.lang.reflect.Method.invoke(Method.java:511)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.view.View$1.onClick(View.java:3594)
07-12 14:32:35.576: E/AndroidRuntime(2017):         ... 11 more
07-12 14:32:35.576: E/AndroidRuntime(2017): Caused by: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: CREATE TABLE Logpc (_id INTEGER PRIMARY KEY AUTOINCREMENT,nome TEXT,password TEXT,note TEXT,);
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at it.della90.bilancio.db.LeMiePasswordHelper.onCreate(LeMiePasswordHelper.java:55)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
07-12 14:32:35.576: E/AndroidRuntime(2017):         at it.della90.bilancio.Movimenti.insertIntoDb(Movimenti.java:69)
07-12 14:32:35.576: E/AndroidRuntime(2017):         ... 14 more
07-12 14:37:35.746: I/Process(2017): Sending signal. PID: 2017 SIG: 9
07-12 14:37:37.317: E/Trace(2099): error opening trace file: No such file or directory (2)
07-12 14:37:38.206: I/Choreographer(2099): Skipped 42 frames!  The application may be doing too much work on its main thread.
07-12 14:37:38.246: D/gralloc_goldfish(2099): Emulator without GPU emulation detected.


Offline gigias

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • gigias6615
    • @gigias6615
    • Mostra profilo
  • Dispositivo Android:
    Table Nextway E9
  • Sistema operativo:
    Slackware 14.0 x64
Re:Problema SQLite
« Risposta #5 il: 12 Luglio 2013, 16:46:24 CEST »
0
Non ti sei accorto che ora l'errore è su un'altra riga?

Prima era:

07-11 20:43:47.655: E/AndroidRuntime(2747): Caused by: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: CREATE TABLE Accountweb (_id INTEGER PRIMARY KEY AUTOINCREMENT,nome TEXT,nome_utente TEXT,password TEXT,note TEXT,);

Ora è:

07-12 14:32:35.576: E/AndroidRuntime(2017): Caused by: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: CREATE TABLE Logpc (_id INTEGER PRIMARY KEY AUTOINCREMENT,nome TEXT,password TEXT,note TEXT,);

quindi era sulla creazione della tabella Accountweb, ora l'errore è più avanti sulla creazione della tabella Logpc.

Non ti viene il sospetto che tutte e 4 le creazioni delle tabelle hanno lo stesso problema?

Rimuovi quella benedetta virgola sulle 3 creazioni delle tabelle rimaste e non dovrebbe apparire più questo errore.

builder.append("{5} TEXT,"); // <----------------------------
builder.append(");");


Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Problema SQLite
« Risposta #6 il: 12 Luglio 2013, 16:54:47 CEST »
0
Perdonami!!! sono stato troppo frettoloso e superficiale!!!
Questo problema per ora è risolto Grazie

Offline gigias

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • gigias6615
    • @gigias6615
    • Mostra profilo
  • Dispositivo Android:
    Table Nextway E9
  • Sistema operativo:
    Slackware 14.0 x64
Re:Problema SQLite
« Risposta #7 il: 12 Luglio 2013, 16:59:34 CEST »
0
Non c'è problema.

Un Saluto.