2017-04-04 147 views
-2

我是Android应用程序开发新手。我试图创建一个插入一些值的基本SQL表。当我试图从表中提取值时,一些异常被捕获。在Android Studio中管理SQLite数据库

任何人都可以请帮忙。

Database Helper: 

package com.example.mathialagan.app1; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.Toast; 

import static java.security.AccessController.getContext; 

/** 
* Created by MATHIALAGAN on 3/12/2017. 
*/ 

public class DatabaseHelper extends SQLiteOpenHelper { 

public static final String db_name= "Employee_Details.db"; 
public static final String table_name="Table_1"; 
public static final String column_1= "ID"; 
public static final String column_2= "Name"; 
public static final String column_3= "Surname"; 
public static final String column_4= "Joining_Year"; 

public DatabaseHelper(Context context) { 
    super(context, db_name, null, 1); 
    //SQLiteDatabase db= this.getWritableDatabase() 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 

    // db.execSQL("CREATE TABLE" + table_name + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Surname TEXT, Joining_Year INTEGER)"); 


    String CREATE_DATABASE = "CREATE TABLE " + table_name + "(" + 
      column_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     column_2 + " TEXT, "+ 
      column_3 +" TEXT, "+ 
      column_4+ " TEXT"+")" ; 

    db.execSQL(CREATE_DATABASE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

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

} 


public boolean insertData (String name, String surname, String yr) 
{ 

    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues cv = new ContentValues(); 

    cv.put(column_2, name); 
    cv.put(column_3, surname); 
    cv.put(column_4, yr); 

    long result=db.insert(table_name, null, cv); 

    if (result == -1) 
     return false; 
    else 
     return true; 

} 

    public Cursor getAllData() 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    // Cursor res = db.rawQuery("SELECT * FROM" + table_name, null); 

    Cursor res = db.rawQuery("SELECT * FROM" + table_name, null); 
    return res; 
} 

}

MainActivity:

package com.example.mathialagan.app1; 

import android.database.Cursor; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

DatabaseHelper myDb; 


EditText editName, editSurname, editYear , please; 
Button btnAddData, btnView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myDb = new DatabaseHelper(this); 

    editName = (EditText)findViewById(R.id.editText); 
    editSurname = (EditText)findViewById(R.id.editText2); 
    editYear = (EditText)findViewById(R.id.editText3); 
    please = (EditText)findViewById(R.id.editText4) ; 

    btnAddData = (Button)findViewById(R.id.button); 
    btnView = (Button)findViewById(R.id.button2); 

    adddata(); 

    viewData(); 

} 

public void adddata() 
{ 
    btnAddData.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        boolean isInserted = myDb.insertData(editName.getText().toString(), 
                  editSurname.getText().toString(), 
                   editYear.getText().toString()); 
        if (isInserted == true) 
         Toast.makeText(MainActivity.this, "SUCCESS", Toast.LENGTH_SHORT).show(); 
        else 
         Toast.makeText(MainActivity.this, "HAVE TO WORK MORE", Toast.LENGTH_SHORT).show(); 

       } 
      } 
    ); 
} 

public void viewData() 
{ 
     btnView.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
       public void onClick(View v) { 


        try { 




         Cursor res = myDb.getAllData(); 


         if (res.getCount() == 0) { 
          Toast.makeText(MainActivity.this, "Nothing in DB", Toast.LENGTH_SHORT).show(); 
          return; 
         } else { 

          StringBuffer bf = new StringBuffer(); 

          while (res.moveToNext()) { 
           bf.append("ID:" + res.getString(0) + "\n"); 
           bf.append("NAME:" + res.getString(1) + "\n"); 
           bf.append("SURNAME:" + res.getString(2) + "\n"); 
           bf.append("JOINING YEAR:" + res.getString(3) + "\n"); 

          } 

          showMessage("Data " , bf.toString()); 


         } 
        } 

        catch (Exception e) 
        { 
         Toast.makeText(MainActivity.this,"DB ", Toast.LENGTH_SHORT).show(); 
        } 



       } 
      } 
    ); 

    } 


public void showMessage (String title, String message) 
{ 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setCancelable(true); 
    builder.setTitle(title); 
    builder.setMessage(message); 
    builder.show(); 
} 

}

回答

1

也许将像 “SELECT * FROM” 到 “SELECT * FROM” 空间?

Cursor res = db.rawQuery("SELECT * FROM " + table_name, null); //<----- 
return res; 
+0

非常感谢.. FROM之后的空间造成了差异..你能解释我吗?这很重要吗? – Raj

+0

,因为SQLite正在读取您的查询,如“select * fromtable_1”。当然,构建查询时需要间距。 – Hrnz

+0

连接字符串时要小心,因为每次使用'+ – Hrnz