2013-03-26 27 views
0

代码:的SQLite的Android点击插入按钮后,它崩溃(插入按钮意味着用于创建和插入表和表值)

public class DatabaseOpenHelper extends SQLiteOpenHelper { 
public String str=null; 
public static final String TABLE_SPEECH = "takespeech"; 
public static final String COLUMN_ID = "id"; 
public static final String SPEECH_TEXT = "speech"; 

private static final String DATABASE_NAME = "speechtext.db"; 
private static final int DATABASE_VERSION = 1; 

private SQLiteDatabase database; 
private DatabaseOpenHelper dbHelper; 
private static final String TABLE_CREATE = 
       "CREATE TABLE " + TABLE_SPEECH + "(" + COLUMN_ID +" INTEGER, " + 
       SPEECH_TEXT + " TEXT);"; 

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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(TABLE_CREATE); 
     Log.v("MainActivity", "after creation"); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_SPEECH); 

     // Create tables again 
     onCreate(db); 
    } 

    public void open() throws SQLException { 
     database=dbHelper.getWritableDatabase(); 
    } 

    public void close() { 
     database.close(); 
    } 

    public void insert(String getpass) { 
     ContentValues cv=new ContentValues(); 
     cv.put(COLUMN_ID, 1); 
     cv.put(SPEECH_TEXT,getpass); 
     // open(); 
     database.insert(TABLE_SPEECH, null, cv); 
     // close(); 
    } 

    public String readme() { 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery("SELECT"+SPEECH_TEXT+"FROM"+TABLE_SPEECH,null); 
     if (cursor.moveToFirst()) { 
      str = cursor.getString(cursor.getColumnIndex(SPEECH_TEXT)); 
     } 

     return str; 
    } 
} 

而且在Mainactivty一个按钮(是)添加和创建表和表值:单击此应用程序后崩溃。

yes.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view) { 
      try { 
       createTable();  
      } 
      catch (SQLiteException se) { 
       Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
      } 
     } 
}); 

这是功能,当用户点击Yes按钮和数据插入的onCreate()应该被调用,但然后当我点击是不KNWŸ崩溃调用。

public void createTable() { 
    DatabaseOpenHelper dbhelper=new DatabaseOpenHelper(getBaseContext()); 
    dbhelper.getWritableDatabase(); 
    dbhelper.insert(pass); 
    String a=dbhelper.readme(); 
    TextView reads=(TextView)findViewById(R.id.textView2); 
    reads.setText(a); 
} 
+2

请发布堆栈跟踪。 – Cornholio 2013-03-26 18:13:36

+0

你需要通过在sqlite关键字之间放置空格来正确地格式化选择查询:'cursor cursor = db.rawQuery(“SELECT”+ SPEECH_TEXT +“FROM”+ TABLE_SPEECH,null);' – 2013-03-26 18:17:14

+0

@ρяσѕρєяK但是OP说他得到异常他试图插入正确的..? – Pragnani 2013-03-26 18:21:26

回答

0

在你的“CREATETABLE”方法,你不是要设置“数据库”变量你使用你插入这一点,所以它是空的。检查你的堆栈跟踪,看看错误是否在insert()方法中。

在CREATETABLE()的变化:

dbhelper.getWritableDatabase(); 

dbhelper.open(); 
+0

OOK YAA我会尽力THT – shan 2013-03-26 18:26:45

+0

http://mobileapplications-by-himanshu.blogspot.in/阅读本 – Unknown 2013-03-27 10:25:15

0

所以,你有我想两个问题。第一个问题是rawQuery()方法。看

db.rawQuery("SELECT"+SPEECH_TEXT+"FROM"+TABLE_SPEECH, null); 

在这里,你是缺少保留字之间的空格。你的输出现在是这样的:

selecttextfromtable 

这听起来不太好,不是吗?解决方案是在单词之间添加空格,它应该起作用。

String query = "SELECT " + SPEECH_TEXT + " FROM " + TABLE_SPEECH; 
db.rawQuery(query, null); 

二是你可能通过分配给NULL语境)

DatabaseOpenHelper dbhelper = new DatabaseOpenHelper(getBaseContext()); 

变化getBaseContext(进入

new DatabaseOpenHelper(YourActivity.this); 
+0

YAA thts西隧中号改变NW – shan 2013-03-26 18:30:05

+0

哎其再次崩溃:( – shan 2013-03-26 19:29:39

0

放UI更新用内部处理程序或的AsyncTask

mHandler.post(新可运行()

{ @Override 公共无效的run(){ reads.setText(a)的

} });