Skip to main content
 首页 » 编程设计

android之Android:如何将单个表字段的值设置为String变量

2025年05月04日12mfryf

我是Android编程的新手。我正在制作一个应用程序,该应用程序从表my_table的特定行(其中id = 1)上获取单个字段Phone的值,并将其分配给String编号。然后打印该字符串。但是,应用程序在获取数据后仍然崩溃。

我要从这里搬到哪里?我哪里错了?我想念什么?

下面是代码。

MainActivity.java

public class MainActivity extends Activity { 
 
SQLiteDatabase db; 
EditText pin, phone, email; 
 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
 
    ImageButton btn=(ImageButton)findViewById(R.id.btn); 
    pin = (EditText)findViewById(R.id.pin); 
    phone = (EditText)findViewById(R.id.phone); 
    email = (EditText)findViewById(R.id.email); 
 
    btn.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
            SaveData(); 
            Toast.makeText(MainActivity.this,"Info saved!", Toast.LENGTH_SHORT).show(); 
        } 
 
    }); 
 
} 
 
public void SaveData(){ 
 
    db = this.openOrCreateDatabase("my_database",MODE_PRIVATE, null); 
    db.execSQL("CREATE TABLE IF NOT EXISTS my_table(id INTEGER PRIMARY KEY AUTOINCREMENT, Pin varchar," 
            + " Phone varchar, EMail varchar);"); 
 
    String query = "INSERT INTO my_table (Pin,Phone,EMail) VALUES ('"+pin.getText().toString()+"','"+phone.getText().toString()+"','"+email.getText().toString()+"')"; 
    db.execSQL(query); 
 
 
    Display(); 
} 
 
void Display(){ 
    Intent Intent=new Intent(MainActivity.this,Output.class); 
    startActivity(Intent); 
} 
} 

Output.java
public class Output extends Activity{ 
 
TextView phone; 
SQLiteDatabase db; 
 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.output); 
 
    db = this.openOrCreateDatabase("my_database",MODE_PRIVATE, null); 
    Cursor csr =  db.rawQuery( "SELECT Phone FROM my_table WHERE id = 1", null);  
    String number = csr.toString(); 
    db.execSQL(number); 
 
    phone.setText(number); 
 
} 
} 

Manifest.xml
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.ali.readonefield" 
android:versionCode="1" 
android:versionName="1.0" > 
 
<uses-sdk 
    android:minSdkVersion="19" 
    android:targetSdkVersion="22" /> 
 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
        android:name=".MainActivity" 
        android:label="@string/app_name" > 
        <intent-filter> 
            <action android:name="android.intent.action.MAIN" /> 
 
            <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity> 
    <activity 
        android:name=".Output" 
        android:label="@string/app_name" > 
    </activity> 
</application> 
 
</manifest> 

LogCat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ali.readonefield/com.ali.readonefield.Output}: android.database.sqlite.SQLiteException: near "android": syntax error (code 1): , while compiling: android.database.sqlite.SQLiteCursor@42a2c6b0

请您参考如下方法:

尝试这个:

String number = csr.getString(csr.getColumnIndex("columnName"));