2016-09-02 2 views
0

세부 정보를 입력하라는 signUp 페이지를 만든 다음 저장하고 있습니다. 그 (것)들은 데이타베이스에서 그 후에 그 (것)들을 인쇄하고 "데이타베이스를 통해서만 가져 오기"버튼을 클릭하여 다른 활동에 그들을 인쇄합니다.원인 : 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

신경 쓰지 마라, 나는 모바일에 있었고, 놓쳤을 것임에 틀림 없다. 나는 지금 내 바탕 화면에있다. 문제는 여러분이 여러분의 가치를 벗어나지 못했기 때문입니다. 그래서 그것이 열로 읽으려고했습니다. 나는 2 분 안에 대답을 게시 할 것이다. –

답변

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

내 코드 Hari에서 무엇이 잘못 되었습니까? 나는 모든 것을 올바른 방법으로 기록했다. –

-1

값을 이스케이프하지 않았기 때문에 쿼리가 실패 했으므로 데이터베이스의 열이라고 가정합니다.

INSERT 쿼리의 라인을 따라 뭔가해야한다 :

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

또는

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

모든 탈출을 방지하기 위해, 당신은 또한 ContentValues 접근 방식을 사용할 수있다.

관련 문제