package com.haii.android;import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;public class SQLiteTestActivity extends Activity {
   OnClickListener listener_add=null;
   OnClickListener listener_update=null;
   OnClickListener listener_delete=null;
   OnClickListener listener_clear=null;
   Button button_add;
   Button button_update;
   Button button_delete;
   Button button_clear;
   DBConnection helper;
   public int id_this;
   public interface UserSchema{
   String TABLE_NAME="Users";
   String ID="_id";
   String USER_NAME="user_name";
   String ADDRESS="address";
   String TELEPHONE="telephone";
   String MAIL_ADDRESS="mail_address";
   }
   /** Called when the activity is first created. */
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // getIntent().setData(Uri.parse("content://com.haii.provider.testprovider"));
       // final Uri uri_test=getIntent().getData();
        setContentView(R.layout.main);
        final EditText mEditText01=(EditText)findViewById(R.id.editText1);
        final EditText mEditText02=(EditText)findViewById(R.id.editText2);
        final EditText mEditText03=(EditText)findViewById(R.id.editText3);
        final EditText mEditText04=(EditText)findViewById(R.id.editText4);
        helper=new DBConnection(this);
       final SQLiteDatabase db=helper.getWritableDatabase();
        final String[] FROM={
         UserSchema.ID,
         UserSchema.USER_NAME,
         UserSchema.TELEPHONE,
         UserSchema.ADDRESS,
         UserSchema.MAIL_ADDRESS
        };
        Cursor c=db.query(UserSchema.TABLE_NAME, new String[]{UserSchema.USER_NAME}, null,null,null,null,null);
       // Cursor c=managedQuery(uri_test,new String[]{UserSchema.USER_NAME},null,null,null);
        c.moveToFirst();
        CharSequence[] list=new CharSequence[c.getCount()];
        for(int i=0;i<list.length;i++){
         list[i]=c.getString(0);
         c.moveToNext();
        }
        c.close();
        Spinner spinner=(Spinner)findViewById(R.id.spinner1); 
        spinner.setAdapter(new ArrayAdapter<CharSequence>(this,android.R.layout.simple_spinner_item,list));
        spinner.setOnItemSelectedListener(new OnItemSelectedListener(){ @Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String user_name=((Spinner)parent).getSelectedItem().toString();
//Cursor c=managedQuery(uri_test,FROM,"user_name='"+user_name+"'",null,null);

Cursor c=db.query("Users", FROM, "user_name='"+user_name+"'", null,null,null,null);
c.moveToFirst();
id_this=Integer.parseInt(c.getString(0));
String user_name_this=c.getString(1);
String telephone_this=c.getString(2);
String address_this=c.getString(3);
String mail_address_this=c.getString(4);
c.close();
mEditText01.setText(user_name_this);
mEditText01.setText(telephone_this);
mEditText03.setText(address_this);
mEditText04.setText(mail_address_this);

// TODO Auto-generated method stub

} @Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub

}
        
        });
        listener_add=new OnClickListener(){ @Override
public void onClick(View v) {
ContentValues values=new ContentValues();
values.put(UserSchema.USER_NAME, mEditText01.getText().toString());
values.put(UserSchema.TELEPHONE, mEditText02.getText().toString());
values.put(UserSchema.ADDRESS, mEditText03.getText().toString());
values.put(UserSchema.MAIL_ADDRESS, mEditText04.getText().toString());// TODO Auto-generated method stub

SQLiteDatabase db=helper.getWritableDatabase();
db.insert(UserSchema.TABLE_NAME, null, values);
db.close();
//getContentResolver().insert(uri_test, values);
onCreate(savedInstanceState);
}
        
        };
        listener_update=new OnClickListener(){ @Override
public void onClick(View v) {
ContentValues values=new ContentValues();
values.put(UserSchema.USER_NAME, mEditText01.getText().toString());
values.put(UserSchema.TELEPHONE, mEditText02.getText().toString());
values.put(UserSchema.ADDRESS, mEditText03.getText().toString());
values.put(UserSchema.MAIL_ADDRESS, mEditText04.getText().toString());
String where=UserSchema.ID+" = "+id_this;// TODO Auto-generated method stub

SQLiteDatabase db=helper.getWritableDatabase();
db.update(UserSchema.TABLE_NAME, values, where, null);
db.close();//getContentResolver().update(uri_test, values, where, null);
onCreate(savedInstanceState);// TODO Auto-generated method stub

}
        
        };
        listener_delete=new OnClickListener(){ @Override
public void onClick(View v) {
String where=UserSchema.ID+" = "+id_this;
SQLiteDatabase db=helper.getWritableDatabase();
db.delete(UserSchema.TABLE_NAME, where, null);
db.close();
///getContentResolver().delete(uri_test, where,null);// TODO Auto-generated method stub
onCreate(savedInstanceState);
}
        
        };
        listener_clear=new OnClickListener(){ @Override
public void onClick(View v) {
mEditText01.setText("");
mEditText02.setText("");
mEditText03.setText("");
mEditText04.setText("");
// TODO Auto-generated method stub

}
        
        };
        button_add=(Button)findViewById(R.id.button1);
        button_add.setOnClickListener(listener_add);
        button_update=(Button)findViewById(R.id.button2);
        button_update.setOnClickListener(listener_update);
        button_delete=(Button)findViewById(R.id.button3);
        button_delete.setOnClickListener(listener_delete);
        button_clear=(Button)findViewById(R.id.button4);
        button_clear.setOnClickListener(listener_clear);
        }
    public static class DBConnection extends SQLiteOpenHelper {
     private static final String DATABASE_NAME="PhoneBookDB";
     private static final int DATABASE_VERSION=1;
     public DBConnection(Context ctx) {
     super(ctx,DATABASE_NAME,null,DATABASE_VERSION);
     // TODO Auto-generated constructor stub
     }     @Override
     public void onCreate(SQLiteDatabase db) {
     String sql="CREATE TABLE "+UserSchema.TABLE_NAME+ " ("+UserSchema.ID+" INTEGER primary key autoincrement, "+UserSchema.TABLE_NAME+" text not null, "
     +UserSchema.TELEPHONE+" text not null, "
     +UserSchema.ADDRESS+" text not null, "
     +UserSchema.MAIL_ADDRESS+" text not null "+");";
     db.execSQL(sql);// TODO Auto-generated method stub     }     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
     // TODO Auto-generated method stub     }     }}

解决方案 »

  1.   

    你自己先检查下log啊。这多难找啊。
    参考:package com.jftt.smart.db;
    import com.jftt.smart.data.Const;import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;/**
     * class name:SQLiteOpenHelper<BR>
     * class description:<BR>
     * PS: <BR>
     * 
     * @version 1.00 2011/09/21
     * @author CODYY)peijiangping
     */
    public class DB extends SQLiteOpenHelper {
    private final static String DATEBASE_NAME = "smart scence.db";
    private final static int DATABASE_VERSION = 1; private final static String TABLE_ROUTINE = "routine";
    private final static String TABLE_DETAIL = "routine_detail"; private final static String TABLE_SCENCE = "scene"; public DB(Context context) {
    super(context, DATEBASE_NAME, null, DATABASE_VERSION);
    } @Override
    public void onCreate(SQLiteDatabase db) { // 情景模式表
    String sql = "CREATE TABLE "
    + TABLE_SCENCE
    + "(_id INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT,"
    + "icon INTEGER,"
    + "name TEXT,"
    + "run NUMERIC,"
    // + "ringtones INTEGER NOT NULL ,"
    + "r_ring NONE,"
    // + "volume INTEGER NOT NULL CONSTRAINT fk_volume_id REFERENCES volume(_id) ON DELETE CASCADE,"
    + "v_ring INTEGER," + "v_media INTEGER," + "v_clock INTEGER,"
    + "v_inform INTEGER,"
    + "shake NUMERIC,"
    + "wallpaper NONE," + "topics NONE," + "backlight INTEGER,"
    + "backlightTime INTEGER," + "bluetooth NUMERIC,"
    + "re TEXT)";
    db.execSQL(sql);
    // 作息模式表
    sql = "CREATE TABLE " + TABLE_ROUTINE
    + "(_id INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT,"
    + "name TEXT NOT NULL," + "run NUMERIC NOT NULL,"+ "tempset NUMERIC,"
    + "re TEXT)";
    db.execSQL(sql); // 作息明细表
    sql = "CREATE TABLE "
    + TABLE_DETAIL
    + "(_id INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT,"
    + "rest_id INTEGER,"
    + "ss_id INTEGER,"
    + "packagename TEXT,"
    + "labelname TEXT,"
    + "wifi NUMERIC," 
    + "flightmode NUMERIC,"
    + "week TEXT,"
    + "starttime NUMERIC,"
    + "endtime NUMERIC,"
    + "re TEXT)";
    db.execSQL(sql);
    // 标准
    sql = "insert into scene(name,run,r_ring,v_ring,v_media,v_clock,v_inform,shake,backlight,backlightTime,bluetooth,re) values(?,?,?,?,?,?,?,?,?,?,?,?)";
    db.execSQL(sql, new Object[] { Const.MODE_GENERAL, 1, "Riffing.mp3",
    5, 10, 5, 5,0,128,60,0,"General Mode"});

    // 震动
    sql = "insert into scene(name,run,r_ring,v_ring,v_media,v_clock,v_inform,shake,backlight,backlightTime,bluetooth,re) values(?,?,?,?,?,?,?,?,?,?,?,?)";

    db.execSQL(sql, new Object[] { Const.MODE_VIBRATE, 0, "Riffing.mp3",
    0, 0, 0, 0,1,128,60,0,"Vibrate Mode"});
    // 静音
    sql = "insert into scene(name,run,r_ring,v_ring,v_media,v_clock,v_inform,shake,backlight,backlightTime,bluetooth,re) values(?,?,?,?,?,?,?,?,?,?,?,?)";
    db.execSQL(sql, new Object[] {Const.MODE_SILENT, 0, "Riffing.mp3",
    0, 0, 0, 0,0,128,60,0,"Silent"});

    } @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String sql = "DROP TABLE IF EXISTS " + TABLE_ROUTINE;
    db.execSQL(sql);

    sql = "DROP TABLE IF EXISTS " + TABLE_DETAIL;
    db.execSQL(sql);

    // sql = "DROP TABLE IF EXISTS " + TABLE_RING;
    // db.execSQL(sql);
    //
    // sql = "DROP TABLE IF EXISTS " + TABLE_VOLUMe;
    // db.execSQL(sql);

    sql = "DROP TABLE IF EXISTS " + TABLE_SCENCE;
    db.execSQL(sql);

    onCreate(db);
    }
    //
    // /**
    //  * DB操作[增、删、改]
    //  * @param sql
    //  * @param args
    //  */
    public void execSQL(String sql, Object[] args){
    SQLiteDatabase db = this.getReadableDatabase();
    db.execSQL(sql,args);
    }

    /**
     * DB查询
     * @param sql
     * @param args
     * @return
     */
    public Cursor query(String sql, String[] args){
    SQLiteDatabase db = this.getReadableDatabase();
    return db.rawQuery(sql, args);
    }
     
    /*
     * create table foo ( id INTEGER NOT NULL PRIMARY KEY );
     * 
     * CREATE TABLE bar ( id INTEGER NOT NULL PRIMARY KEY, foo_id INTEGER NOT
     * NULL CONSTRAINT fk_foo_id REFERENCES foo(id) ON DELETE CASCADE ); CREATE
     * TRIGGER fki_bar_foo_id BEFORE INSERT ON bar FOR EACH ROW BEGIN SELECT
     * RAISE(ROLLBACK, 'insert on table "bar" violates foreign key constraint
     * "fk_foo_id"') WHERE (SELECT id FROM foo WHERE id = NEW.foo_id) IS NULL;
     * END; CREATE TRIGGER fkd_bar_foo_id BEFORE DELETE ON foo FOR EACH ROW
     * BEGIN SELECT RAISE(ROLLBACK, 'delete on table "foo" violates foreign key
     * constraint "fk_foo_id"') WHERE (SELECT foo_id FROM bar WHERE foo_id =
     * OLD.id) IS NOT NULL; END;
     */
    }
      

  2.   

    贴LOG吧,大略看了一下代码,大方向没有什么问题,细节问题没有LOG太难找了。
      

  3.   


    如果你用的是eclipse。。 在 选项 window -showview-other-android-logcat。。红色的log是错误的。 把他贴出来看看
      

  4.   

    11-10 03:44:05.983: ERROR/Database(494): Error inserting mail_address= address= telephone= user_name=
    11-10 03:44:05.983: ERROR/Database(494): android.database.sqlite.SQLiteException: table Users has no column named user_name: , while compiling: INSERT INTO Users(mail_address, address, telephone, user_name) VALUES(?, ?, ?, ?);
    11-10 03:44:05.983: ERROR/Database(494):     at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
    11-10 03:44:05.983: ERROR/Database(494):     at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
    11-10 03:44:05.983: ERROR/Database(494):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
    11-10 03:44:05.983: ERROR/Database(494):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
    11-10 03:44:05.983: ERROR/Database(494):     at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:925)
    11-10 03:44:05.983: ERROR/Database(494):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1300)
    11-10 03:44:05.983: ERROR/Database(494):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1173)
    11-10 03:44:05.983: ERROR/Database(494):     at com.haii.SQLtest2Activity$2.onClick(SQLtest2Activity.java:113)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.View.performClick(View.java:2344)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.View.onTouchEvent(View.java:4133)
    11-10 03:44:05.983: ERROR/Database(494):     at android.widget.TextView.onTouchEvent(TextView.java:6510)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.View.dispatchTouchEvent(View.java:3672)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
    11-10 03:44:05.983: ERROR/Database(494):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712)
    11-10 03:44:05.983: ERROR/Database(494):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202)
    11-10 03:44:05.983: ERROR/Database(494):     at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
    11-10 03:44:05.983: ERROR/Database(494):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
    11-10 03:44:05.983: ERROR/Database(494):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1658)
    11-10 03:44:05.983: ERROR/Database(494):     at android.os.Handler.dispatchMessage(Handler.java:99)
    11-10 03:44:05.983: ERROR/Database(494):     at android.os.Looper.loop(Looper.java:123)
    11-10 03:44:05.983: ERROR/Database(494):     at android.app.ActivityThread.main(ActivityThread.java:4203)
    11-10 03:44:05.983: ERROR/Database(494):     at java.lang.reflect.Method.invokeNative(Native Method)
    11-10 03:44:05.983: ERROR/Database(494):     at java.lang.reflect.Method.invoke(Method.java:521)
    11-10 03:44:05.983: ERROR/Database(494):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
    11-10 03:44:05.983: ERROR/Database(494):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
    11-10 03:44:05.983: ERROR/Database(494):     at dalvik.system.NativeStart.main(Native Method)
    这是你说的log吧,不过看不懂
      

  5.   

    哦,有这样一句
    11-10 03:48:31.864: ERROR/dalvikvm(529): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
    是不是在androidmanifest.xml里面要设置许可啊?
      

  6.   

    table Users has no column named user_name
    检查下建表语句,Users是否有user_name这样一列。
      

  7.   

    哦,我最后把数据库的名字改后就可以运行了,之前写掉一个user_name
      

  8.   

    顺便再问一下我的包早com.hii中,,我的TestProvider也在这个目录下,怎么设置provider与authorities?