没有这样的表 SQLite 错误:电子邮件 [重复]

Posted

技术标签:

【中文标题】没有这样的表 SQLite 错误:电子邮件 [重复]【英文标题】:no such table SQLite Error: email [duplicate] 【发布时间】:2018-09-05 04:43:59 【问题描述】:

错误:03-26 23:19:58.913 12137-12137/com.example.johnwalls.projet E/SQLiteLog:(1)没有这样的表:email1 03-26 23:19:58.913 12137-12137/com.example.johnwalls.projet E/SQLiteDatabase: 插入错误 dem=hdhdhbbdbdjd description=demande source=bechir@gmail.com

inboxFrgment.java

package com.example.johnwalls.projet;


import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import static com.example.johnwalls.projet.R.id.pr;


/**
 * A simple @link Fragment subclass.
 */
public class InboxFragment extends Fragment 



    private Button sendB;
    private  EditText d;
    private EditText des;
    private DB base;
    public InboxFragment() 
        // Required empty public constructor
    


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        // Inflate the layout for this fragment
       base=new DB(getActivity());
       final View view = inflater.inflate(R.layout.fragment_inbox, container, false);

        TextView text2 =  view.findViewById(R.id.in);//Find textview Id

        String getArgument = getArguments().getString("main");
        text2.setText(getArgument);


        Button button = (Button) view.findViewById(R.id.log);
        button.setOnClickListener(new View.OnClickListener()
        
            @Override
            public void onClick(View v)
            


                String getArgument = getArguments().getString("main");

                EditText d= (EditText) view.findViewById(R.id.dem);
                EditText des=(EditText) view.findViewById(R.id.desc);

                String dem=d.getText().toString();
                String desc=des.getText().toString();


                Email e=new Email();

                e.setSource(getArgument);
                e.setDem(dem);
                e.setDescription(desc);
                base.insertEmail(e);
                Toast.makeText(getActivity(), "Email Envoyé", Toast.LENGTH_SHORT).show();


            
        );


        return view;
    

    

DB.java

package com.example.johnwalls.projet;

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

/**
 * Created by John Walls on 04-Mar-18.
 */

public class DB extends SQLiteOpenHelper 

    private static final int DATABASE_VERSION=1;
    private static final String DB_nom="bef.db";
    private static final String table_admin="admin";
    private static final String table_email1="email1";
    private static final String col_source="source";
    private static final String col_description="description";
    private static final String col_dem="dem";


    private static final String col_cin="cin";
    private static final String col_nom="nom";
    private static final String col_pren="pren";
    private static final String col_email="email";
    private static final String col_password="password";
    private static final String col_age="age";
    SQLiteDatabase db;
    private static final String creation_admin="create table admin (cin integer primary key,"+"nom text not null ,pren text not null ,email text not null,password text not null ,age integer not null);";

    private static final String creation_email="create table email1 (source text primary key,"+"dem text not null ,description text not null);";

    public DB(Context context) 
        super(context,DB_nom, null,DATABASE_VERSION);

    

    @Override
    public void onCreate(SQLiteDatabase db) 
        db.execSQL(creation_admin);
        db.execSQL(creation_email);
        this.db=db;
    


    public void insertEmail(Email e)
    
        db=this.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put(col_source,e.getSource());
        values.put(col_dem,e.getDem());
        values.put(col_description,e.getDescription());
        db.insert(table_email1,null,values);
    

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
String query ="DROP TABLE IF EXISTS "+table_admin;
        String query2="DROP TABLE IF EXISTS "+table_email1;
        db.execSQL(query);
        db.execSQL(query2);
        this.onCreate(db);
    

你试图达到什么你期望得到什么你得到了什么(包括错误消息)你还尝试了什么?你认为是什么原因造成的?为什么你需要为它提出一个新问题?为什么您的问题与此处的其他类似问题不同?

【问题讨论】:

【参考方案1】:

我怀疑您在运行应用程序后添加了 email1 表,并且由于常见的误解是数据库助手的 onCreate每当您创建数据库助手的实例(SQLiteOpenHelper 的子类,即 DB.java)时,该方法就会运行。

'onCreate' 方法只在创建数据库时运行一次。

您可以通过三个选项来解决此问题:-

    删除应用程序的数据,然后重新运行应用程序。

    卸载应用程序并重新运行应用程序。

    在您的情况下,onUpgrade 方法将删除表然后调用onCreate,以增加数据库版本号(例如将private static final int DATABASE_VERSION=1; 更改为private static final int DATABASE_VERSION=2;然后重新运行应用程序。

【讨论】:

换句话说,当调用助手的 onCreate 时重复... 我做了 2 和 3,现在可以了,非常感谢 MikeT

以上是关于没有这样的表 SQLite 错误:电子邮件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 SQLite Android 中发现“没有这样的表”错误

如何解决android.database.sqlite.SQLiteException:没有这样的表错误?

Android SQLite“没有这样的表”异常

android.database.sqlite.SQLiteException:没有这样的表:

使用 SQLite“没有这样的表”测试 NHibernate - 生成模式

FATAL EXCEPTION:后台任务android.database.sqlite.SQLiteException:没有这样的表。