2017-11-16 8 views
0

AndroidスタジオとSQLiteが新しくなりました。AndroidスタジオのSQLiteデータベースにデータを追加する際にエラーが発生しました

友だちの詳細に入力してデータベースに追加するアプリを作成する。

私は友人を追加するために、私のデータベースのクラスと私の活動を作成しましたが、私はデータベースに追加しようとするたびに、私は述べlogcatでエラーが出ます:

11-16 20:40:20.083 2641-2641/com.example.kod45.myapplication E/SQLiteDatabase: Error inserting [email protected] NAME=paul ID=1 SURNAME=pail 
                      android.database.sqlite.SQLiteException: table friends_table has no column named EMAIL (code 1): , while compiling: INSERT INTO friends_table(EMAIL,NAME,ID,SURNAME) VALUES (?,?,?,?) 
                      ################################################################# 
                      Error Code : 1 (SQLITE_ERROR) 
                      Caused By : SQL(query) error or missing database. 
                      (table friends_table has no column named EMAIL (code 1): , while compiling: INSERT INTO friends_table(EMAIL,NAME,ID,SURNAME) VALUES (?,?,?,?)) 

をここに私のデータベースハンドラは次のとおりです。

public class DBHandler extends SQLiteOpenHelper { 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "Friends.db"; 
    public static final String TABLE_NAME = "friends_table"; 
    public static final String ID_COL = "ID"; 
    public static final String EMAIL = "EMAIL"; 
    public static final String FIRST_NAME = "NAME"; 
    public static final String SURNAME = "SURNAME"; 

public DBHandler(Context context) 
{ 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

public void onCreate(SQLiteDatabase db) 
{ 
    String CREATE_FRIENDS_TABLE = "CREATE TABLE " + TABLE_NAME + "(" 
      + ID_COL + " INTEGER PRIMARY KEY," 
      + EMAIL + "TEXT," 
      + FIRST_NAME + "TEXT," 
      + SURNAME + "TEXT" + ")"; 

    db.execSQL(CREATE_FRIENDS_TABLE); 
} 

public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) { 
    // example of drop old tables and Re- 
    //create tables. 
    //you can alter tables such as add 
    //columns, etc. but not drop tables 
    db.execSQL("drop table if exists " 
      + TABLE_NAME); 
    onCreate(db); 
} 

public void addNewFriend(Friend newFriend) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 

    values.put(ID_COL, newFriend.getFriendID()); 
    values.put(EMAIL, newFriend.getEmailAddress()); 
    values.put(FIRST_NAME, newFriend.getFirstName()); 
    values.put(SURNAME, newFriend.getSurname()); 

    db.insert(TABLE_NAME, null, values); 
    db.close(); 
} 

public ArrayList<Friend> getAllFriends() 
{ 
    ArrayList<Friend> friendList = new ArrayList<Friend>(); 

    String selectQuery = "SELECT * FROM " + TABLE_NAME; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if(cursor.moveToFirst()) { 
     do 
      { 
       Friend friend = new Friend(); 
       friend.setFriendID(Integer.parseInt(cursor.getString(0))); 
       friend.setEmailAddress(cursor.getString(1)); 
       friend.setFirstName(cursor.getString(2)); 
       friend.setSurname(cursor.getString(3)); 


       //Adding to list 
       friendList.add(friend); 
      } 
      while (cursor.moveToNext()) ; 


     } 
    return friendList; 
    } 

}

そしてまた、私は追加してい方法:

public class AddFriends extends AppCompatActivity { 
     DBHandler myDB; 
     @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_friends); 
     myDB = new DBHandler(this); 
    } 

    public void addFriend(View v) { 
     EditText email = (EditText) findViewById(R.id.emailText); 
     EditText firstName = (EditText) findViewById(R.id.firstnameText); 
     EditText surname = (EditText) findViewById(R.id.surnameText); 
     EditText id = (EditText) findViewById (R.id.idText); 
     Button addData = (Button)findViewById(R.id.addFriendButton); 

     //Passing them as strings 
     String emailString = email.getText().toString(); 
     String firstNameString = firstName.getText().toString(); 
     String surnameString = surname.getText().toString(); 
     int idNum = Integer.parseInt(id.getText().toString()); 

     String emailPattern = "[a-zA-Z0-9._-][email protected][a-z0-9]+\\.+[a-z0-9]+"; 

     if(emailString.matches(emailPattern)) 
     { 
      Friend friend = new Friend(idNum, emailString, firstNameString, surnameString); 

      myDB.addNewFriend(friend); 
    //   startActivity(new Intent(this, ViewAllFriends.class)); 

     } 
     else 
     { 
      Toast.makeText(this, "Email not valid", Toast.LENGTH_SHORT).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_home) { 
      startActivity(new Intent(this, MainActivity.class)); 
     } 
     else if(id == R.id.action_search) 
     { 
//   startActivity(new Intent(this, SearchFriends.class)); 
      Toast.makeText(this, "Already on Add Friend Page", Toast.LENGTH_SHORT).show(); 
     } 
     else if(id == R.id.action_view) 
     { 
//   startActivity(new Intent(this, ViewAllFriends.class)); 
      Toast.makeText(this, "Already on Add Friend Page", Toast.LENGTH_SHORT).show(); 
     } 
     else if(id == R.id.action_add){ 
      Toast.makeText(this, "Already on# Add Friend Page", Toast.LENGTH_SHORT).show(); 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

答えて

0

テーブル作成SQLには、最後の3つの列の列名と列の種類の間にはスペースがありません。

変更

String CREATE_FRIENDS_TABLE = "CREATE TABLE " + TABLE_NAME + "(" 
     + ID_COL + " INTEGER PRIMARY KEY," 
     + EMAIL + "TEXT," 
     + FIRST_NAME + "TEXT," 
     + SURNAME + "TEXT" + ")"; 

: -

String CREATE_FRIENDS_TABLE = "CREATE TABLE " + TABLE_NAME + "(" 
     + ID_COL + " INTEGER PRIMARY KEY," 
     + EMAIL + " TEXT," 
     + FIRST_NAME + " TEXT," 
     + SURNAME + " TEXT" + ")"; 

は、次

  • のは、Appのデータを削除し、アプリケーションを再実行をアンインストール
  • を再実行してください
  • 変更public static final int DATABASE_VERSION = 1;からpublic static final int DATABASE_VERSION = 2;に変更し、アプリケーションを再実行します。

    while(cursor.moveToNext) { 
         .... 
        } 
    

    2)あなたは決定の問題を減らすことができる - :あなたは使用してカーソルをループ簡素化することができます)

    1:


はまた、以下の点を考慮することを望むかもしれません/オフセットをハードコーディングするのではなく、CursorのgetColumnIndex(columnname)メソッドを利用して列のオフセットを計算します。

1と2の両方を使用すると、コードは次のようになります - これだけ

while(cursor.moveToNext()) { 
    Friend friend = new Friend(); 
    friend.setFriendID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ID_COL)))); 
    friend.setEmailAddress(cursor.getString(cursor.getColumnIndex(EMAIL))); 
    friend.setFirstName(cursor.getString(cursor.getColumnIndex(FIRST_NAME))); 
    friend.setSurname(cursor.getString(cursor.getColumnIndex(SURNAME))); 

    //Adding to list 
    friendList.add(friend); 
} 
+0

!それは私が探していないものでしたが、私は今になります。どうもありがとうございました! –

-1

これは、あなたが基本的にエラーメッセージをお読みください 、修正するために本当に簡単誤りであるテーブルfriends_tableはEMAILという名前の列を持っていない

...ので、あなたが挿入するエラーを持っている あなたのキャリアの一部です。 (コード1):

だから、あなたはどう思いますか? もちろんEMAIL列を作成する必要があります。 もちろん、あなたはメールを作成したと思うでしょうが、あなたが見逃したのはスペースです。基本的に、テーブルを作成するときは、SQLクエリが完全に形成されていることに注意する必要があります。

"TEXT"と書く代わりに、 "TEXT"と書いて、フィールドEMAILとSURNAMEの両方に空白を残すようにしてください。

また、エミュレータまたはデバイスを使用してアプリケーションを実行する場合は、uninstallにアプリケーションをインストールしておく必要があります。これにより、実行時に再起動する際に、新しい「正しい」データベースがインストールされます。

関連する問題