2013-02-28 82 views
0

這是MainActivity.javaAndroid SQLite:如何使查詢工作?

package com.example.sqltwo; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class MainActivity extends Main { 
public static final String KEY_NAMES = ""; 
public static final String KEY_VALUES = ""; 

private static final String DATABASE_NAME = "Database"; 
private static final String DATABASE_TABLE = "DBTable"; 
private static final int DATABASE_VERSION = 1; 

private DbHelper qhelper; 
private final Context qcontext; 
private SQLiteDatabase qdatabase; 

private static class DbHelper extends SQLiteOpenHelper{ 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
      KEY_NAMES + " TEXT NOT NULL, " + 
      KEY_VALUES + " TEXT NOT NULL);" 
      ); 
} 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 

    } 
} 
public MainActivity(Context c){ 
    qcontext = c; 
} 
public MainActivity open() throws SQLException{ 
    qhelper = new DbHelper(qcontext); 
    qdatabase = qhelper.getWritableDatabase(); 
    return this; 
} 
public void close(){ 
    qhelper.close(); 
} 

public long createEntry(String name, String value) { 
    ContentValues cv = new ContentValues(); 
      cv.put(KEY_NAMES, name); 
      cv.put(KEY_VALUES, value); 
      return qdatabase.insert(DATABASE_TABLE, null, cv); 
} 
public String getData() { 
    String[] columns = new String[]{KEY_NAMES, KEY_VALUES}; 
    Cursor c = qdatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 
    String result = ""; 

    int iValue = c.getColumnIndex(KEY_VALUES); 
    int iName = c.getColumnIndex(KEY_NAMES); 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
     result = result + c.getString(iName) + "\n" + c.getString(iValue) + "\n"; 
    } 
    return result; 
} 
} 

這是Main.java

package com.example.sqltwo; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class Main extends Activity implements OnClickListener{ 
Button sqlUpdate, sqlView, sqlQuery; 
EditText sqlName, sqlValue, sqlQuery_value; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sqlUpdate = (Button) findViewById(R.id.buttonupdate); 
    sqlName = (EditText) findViewById(R.id.editname); 
    sqlValue = (EditText) findViewById(R.id.editvalue); 
    sqlView = (Button) findViewById(R.id.buttonview); 
    sqlView.setOnClickListener(this); 
    sqlUpdate.setOnClickListener(this); 
    sqlQuery = (Button) findViewById(R.id.buttonsearch); 
    sqlQuery_value = (EditText) findViewById(R.id.editquery); 
} 
public void onClick(View arg0) { 
    switch (arg0.getId()) { 
    case R.id.buttonupdate: 
     String name = sqlName.getText().toString(); 
     String value = sqlValue.getText().toString(); 
     MainActivity entry = new MainActivity(Main.this); 
     entry.open(); 
     entry.createEntry(name, value); 
     entry.close(); 
     break; 
    case R.id.buttonview: 
     Intent intentone = new Intent(); 
     intentone.setClassName("com.example.sqltwo", "com.example.sqltwo.View"); 
     startActivity(intentone); 
     break; 
    } 
} 
} 

我的錯誤

02-28 09:23:07.334: E/AndroidRuntime(827): android.database.sqlite.SQLiteException: duplicate column name: TEXT (code 1): , while compiling: CREATE TABLE DBTable (TEXT NOT NULL, TEXT NOT NULL); 

我想這是什麼做的?

您可以輸入名稱和值並將數據更新到數據庫中。 查看功能尚未編碼。 我需要輸入數據,沒有崩潰。 我需要在MainActivity中設置一個查詢系統,它將與Main中的switch-case系統一起工作。 我該如何做到這一點,當我輸入查詢時,它需要數據將其發送到MainActivity,運行搜索,然後返回一個有效值列表?

-extra: 如何使每個查詢返回的數據集顯示在一個表格中,並在出現更多數據時添加行?

-extra: 我可以讓某人實時幫我嗎?要問的問題太多了?

回答

2

當您創建一個對象時,您還沒有列名稱。您必須按照列的名稱傳遞參數或者像Malaka說的那樣初始化變量。

public static final String KEY_NAMES = "column1"; 
public static final String KEY_VALUES = "column2"; 
1

您需要同時提供兩列(KEY_NAMESKEY_VALUES)的唯一名稱。

嘗試:

public static final String KEY_NAMES = "column1"; 
public static final String KEY_VALUES = "column2"; 

您可以更改column1column2你想要的任何兩個不同的字符串,只要你記得同名整個應用程序來指代他們。

我該如何做到這一點,當我鍵入查詢,它需要數據發送到MainActivity,運行搜索,然後返回一個有效值列表?

只需使用輸入值在數據庫上運行SQL語句。

-extra:如何讓每個查詢返回的數據集顯示在一個表格中,並在出現更多數據時添加行?

有一個顯示行的UI。做一個select語句,迭代返回的遊標並填充每一行。更新數據庫時,只需再次運行select語句並重新填充UI。如果添加主鍵,則可以運行後續的select語句,該語句僅查找比最後一行主鍵的數據更新的數據。

-extra:我可以讓某人實時幫我嗎?要問的問題太多了?

僱用某人以獲得專屬幫助。