2016-09-02 13 views
0

詳細を入力するようユーザーに求めているサインアップページを作成しようとしていますが、保存していますそれらをデータベースに入れ、データベースを介してフェッチすることによって、「Register Me」ボタンをクリックすると別のアクティビティでそれらを印刷します。原因:android.database.sqlite.SQLiteException:コンパイル中に列:名前(コード1)がありません

マイMainActivityクラスは次のとおりです。

package com.example.hsports.signuppage; 

import android.content.Intent; 
import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    String name; 
    String emailId; 
    String password; 
    String cnfpassword; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     TextView tv=(TextView)findViewById(R.id.Title); 
     tv.setSelected(true); 

    } 

    public void storeInfo(View v) 
    { 
     name=findViewById(R.id.name).toString(); 
     emailId=findViewById(R.id.emailId).toString(); 
     password=findViewById(R.id.password).toString(); 
     cnfpassword=findViewById(R.id.cnfpassword).toString(); 


     SQLiteDatabase mydb=openOrCreateDatabase("usersInfo",MODE_PRIVATE,null); 
     mydb.execSQL("create table IF NOT EXISTS userInfo (Name varchar , EmaiId varchar , Password varchar , CnfPassword varchar);"); 
     mydb.execSQL("insert into userInfo (Name, EmaiId , Password , CnfPassword) Values(name , emailId , password , cnfpassword);"); 

     Intent i=new Intent(this,SecondActivity.class); 
     startActivity(i); 



    } 


} 

私activity_main.xmlは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.hsports.signuppage.MainActivity" 
    android:orientation="vertical" 
android:background="@color/WHITE" 

    > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Shaadi Mubarak" 
     android:textSize="30dp" 
     android:textColor="@color/RED" 
     android:layout_gravity="center" 
     android:id="@+id/TitleText" 


     /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="It is a company which aims at bringing people together and it's just a way to make this thing easier." 
     android:textSize="15dp" 
     android:textColor="@color/BLACK" 
     android:textAlignment="center" 
     android:paddingBottom="100dp" 
     android:id="@+id/Title" 
     android:ellipsize="marquee" 
     android:fadingEdge="horizontal" 
     android:marqueeRepeatLimit="marquee_forever" 
     android:scrollHorizontally="true" 
     android:lines="1" 
     android:singleLine="true" 

     /> 


<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:gravity="center_horizontal" 


    > 

     <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/name" 
      android:layout_gravity="center_horizontal" 
      android:hint="Enter your Name" 

      android:gravity="center_horizontal" 

      android:imeOptions="actionGo" 
      android:textColor="@color/BLACK" 

      /> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textEmailAddress" 

      android:id="@+id/emailId" 
      android:hint="Enter your Email Id" 
      android:gravity="center_horizontal" 
      /> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:ems="10" 
      android:id="@+id/password" 
      android:hint="Enter Password" 
      android:gravity="center_horizontal" 
      /> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:ems="10" 
      android:id="@+id/cnfpassword" 
      android:hint="Confirm your password" 
      android:gravity="center_horizontal" 
      /> 

     <Button 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="RegisterMe" 
      android:textStyle="bold" 
      android:textSize="20dp" 

      android:padding="20dp" 
      android:onClick="storeInfo" 
      /> 




</LinearLayout> 

</LinearLayout> 

私はコンソールから取得していますエラーは次のとおりです。

FATAL EXCEPTION: main 
                       Process: com.example.hsports.signuppage, PID: 7232 
                       java.lang.IllegalStateException: Could not execute method for android:onClick 
                        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
                        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) 
                       Caused by: java.lang.reflect.InvocationTargetException 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                        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)  
                       Caused by: android.database.sqlite.SQLiteException: no such column: name (code 1): , while compiling: insert into userInfo (Name, EmaiId , Password , CnfPassword) Values(name , emailId , password , cnfpassword); 
                        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 com.example.hsports.signuppage.MainActivity.storeInfo(MainActivity.java:39) 
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
                        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)  
+0

ヒントメッセージ 'no such column:name'にヒントがあります。存在しない列に挿入しようとしています。あなたのスキーマAKA 'CREATE table'ステートメントを提供するように気をつけてください。 –

+0

私はテーブル作成スキーマを正しく与えました。それは何が間違っていますか? –

+0

気にしないで、私は携帯電話に乗っていて、それを逃したに違いない。私は今、私の机の上にいる。問題は、あなたが値をエスケープしていないということです。そのため、列としてそれらを読み取ろうとしていたのです。私は数分で回答を投稿します。 –

答えて

0

これらの変数を挿入しようとしていますか?

name=findViewById(R.id.name).toString(); 
emailId=findViewById(R.id.emailId).toString(); 
password=findViewById(R.id.password).toString(); 
cnfpassword=findViewById(R.id.cnfpassword).toString(); 

ものはTextViewsている場合は、あなたが実際に

代わりgetText().toString()したいその後、クエリにそれらの値にを置くのではなく、生の文字列値を挿入する必要があります。

SQLインジェクションを防ぐために生のSQLの代わりにContentValuesも使用してください。また、カラム名は大文字と小文字が区別されると思います。

SQLiteDatabase db = this.getWritableDatabase(); 

ContentValues values = new ContentValues(); 
values.put("Name", name); // use the name variable, not the string "name" as the value 
// etc. 

db.insert("userInfo", null, values); 
db.close(); 

その他の注意:パスワードを平文で保存しないでください。なぜあなたは確認パスワードを保存するのですか?

-1

このコードを試してみてください代わりに

public void insertUserInfo() { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(Name, "name"); 
     values.put(Email, "email"); 

     db.insert(LEAD_SOURCE_TABLE, null, values); 
     db.close(); 
    } 
+0

私のコードの何が間違っていますか?私はすべてのことを正しい方法で書いています。 –

-1

値がエスケープされなかったためにクエリが失敗したため、データベース内の列であると見なされました。

INSERTクエリはの線に沿って何かする必要があります:すべてのエスケープを避けるために

mydb.execSQL("INSERT INTO userInfo (Name, EmaiId , Password , CnfPassword) VALUES (\"name\" , \"emailId\" , \"password\" , \"cnfpassword\");") 

OR

mydb.execSQL("INSERT INTO userInfo (Name, EmaiId , Password , CnfPassword) VALUES ('name' , 'emailId' , 'password' , 'cnfpassword');") 

、あなたもContentValuesアプローチを使用することができます。

関連する問題