2016-07-31 7 views
0

db.insert(table_name,null,contentValues);は常に-1を返し、データベースに値を挿入していません。ContentValues常に-1を返します。

私が間違っていることを理解するのに手伝ってもらえますか?

database_class.java:

public class database_class extends SQLiteOpenHelper { 
    public static final String database_name = "signup_db"; 
    public static final String table_name = "signup"; 
    public static final String column_1 = "FIRST_NAME"; 
    public static final String column_2 = "SECOND_NAME"; 
    public static final String column_3 = "EMAIL"; 
    public static final String column_4 = "PASSWORD"; 
    public static final String column_5 = "c_password"; 

    public database_class(Context context){ 
     super(context,database_name , null, 1); 
     //Toast.makeText(context, "Class called ", Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table" + table_name + "(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT)"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int i, int i1) { 
     db.execSQL("DROP TABLE IF EXISTS" + table_name); 
     onCreate(db); 
    } 
    public boolean insertData(String first_name, String second_name, String email, String password){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(column_1,first_name); 
     contentValues.put(column_2,second_name); 
     contentValues.put(column_3,email); 
     contentValues.put(column_4,password); 
     long result = db.insert(table_name,null,contentValues); 
     if (result == -1) 
      return false; 
     else 
      return true; 

    } 
} 

MainActivityコード:

fn = editText1.getText().toString(); 
ln = editText2.getText().toString(); 
em = editText3.getText().toString(); 
pass = editText4.getText().toString(); 
cpass = editText5.getText().toString(); 

if (1 == 1) { 
    //boolean isInserted = mydb.insertData(signup_values[0].toString(),signup_values[1].toString(),signup_values[2].toString(),signup_values[3].toString()); 
    boolean isInserted = mydb.insertData(fn,ln,em,pass); 
    if(isInserted == true) { 
     Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_SHORT).show(); 
    } 
    else 
     Toast.makeText(MainActivity.this, "Data not Inserted", Toast.LENGTH_SHORT).show(); 
} 
else 
    Toast.makeText(MainActivity.this, "Password Mismatch", Toast.LENGTH_SHORT).show(); 
+0

super(context, database_name , null, 2);私はアンドロイドの開発者ではないが、私は、DBからエラーを取得する方法を参照することはできません与えられた、私はあなたに挿入されているDBが利用できる、オープンであることを確認しますあなたの挿入をしようとする前に。 – Gavin

+0

ヒント:Java命名規則について読む。クラスは大文字で始まり、変数名に_はありません。それに、あなたの名前はかなり恐ろしいです!文字を保存する必要はありません。好きなものはどういう意味ですか?そう?パス? cpass?彼らが何を表すのかを言う名前を使用する** **です。また、テキストフィールドに配列を使用するか、それらの適切な名前も与えてください。最後に、自分のフィールドに静的な場所を使わないでください。あなたは、たとえば、コンストラクタでクラスに与えたフィールドをdb名にすることができます。 – GhostCat

+0

@GhostCat問題を解決して、構文をニックにしないようにしてください;)あなたの息を無駄にしています –

答えて

3

私はあなたのデータベースを作成中にエラーがあると信じています。この方法では、createテーブルが失敗し、insertも失敗します(テーブルが正しく作成されなかったため)。あなたのコードの

他の部分は

この行は、次の文字列を生成します... OKらしい:

db.execSQL("create table" + table_name + "(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT)"); 

結果:

create tablesignup(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT) 

これは、有効なSQLコマンドではありません。あなたのonUpgrade()も原因同じエラーに仕事を文句を言わない

db.execSQL("create table " + table_name + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIRST_NAME TEXT, SECOND_NAME TEXT, EMAIL TEXT, PASSWORD TEXT)"); 

エラー2

db.execSQL("DROP TABLE IF EXISTS" + table_name); 

は、のようないくつかのスペースを追加する必要があるので、のようないくつかのスペースを追加してみてください

db.execSQL("DROP TABLE IF EXISTS " + table_name); 

最終ly

私はあなたのコードをテストし、うまく動作します。おそらく、以前に何らかのエラーが発生していた可能性があります。データベースを「再インストールする」ことをお勧めします。

あなたが行うことができますどのように

  • アンイ/あなたのアプリをインストール

  • onUpgrade()を強制的にデータベースのバージョンを更新します。ただ、やる:onCreate()

+0

あなたは答えは論理的でした。私はスペースでクエリを変更しましたが、依然として-1の値を返しました。 –

+0

@MudasirRao私は自分の答えを更新しました。その後、私は結果コードをテストして正常に動作しています...エラーが解決しない場合、データベースの作成を再度強制的にアプリをアンインストール/再インストールしてください – W0rmH0le

+0

ありがとうございます。今すぐ働いています。あなたの時間に感謝します。 –

関連する問題