Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:如何将数据从sql server保存到android';s sqlite数据库_Android_Sql Server_Json_Sqlite - Fatal编程技术网

android:如何将数据从sql server保存到android';s sqlite数据库

android:如何将数据从sql server保存到android';s sqlite数据库,android,sql-server,json,sqlite,Android,Sql Server,Json,Sqlite,我正在尝试创建一个从sql server获取数据并在listview中显示的应用程序,但我还想将json保存在sqlite数据库中。为此,我创建了以下SqliteDB类,但我不知道如何将json数据发送到此类 public class SqliteDB { public static final String KEY_ID = "id"; public static final String KEY_NAME = "name"; private static fina

我正在尝试创建一个从sql server获取数据并在listview中显示的应用程序,但我还想将json保存在sqlite数据库中。为此,我创建了以下SqliteDB类,但我不知道如何将json数据发送到此类

public class SqliteDB {

    public static final String KEY_ID = "id";
    public static final String KEY_NAME = "name";

    private static final String TAG = "DBAdapter";
    private static final String DATABASE_NAME = "SQLiteDB";

    private static final String TABLE_NAME = "departmentList";
    private static final int DATABASE_VERSION = 1;

    private static final String CREATE_TABLE = 
            "create table departmentList (id text primary key autoincrement, name text not null);";

    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;


    public SqliteDB(Context ctx) {

        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }
    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {           
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

        @Override
        public void onCreate(SQLiteDatabase db) {           
            try {
                    db.execSQL(CREATE_TABLE);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS sample");
            onCreate(db);
            }
        }

  //---open SQLite DB---
    public SqliteDB open() throws SQLException {    
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //---close SQLite DB---
    public void close() {   
        DBHelper.close();
    }

    //---insert data into SQLite DB---
    public long insert(String name) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_NAME, name);      
        return db.insert(TABLE_NAME, null, initialValues);
    }

    //---Delete All Data from table in SQLite DB---
    public void deleteAll() {
        db.delete(TABLE_NAME, null, null);
    }

    //---Get All Contacts from table in SQLite DB---
    public Cursor getAllData() {
        return db.query(TABLE_NAME, new String[] {KEY_NAME}, 
                null, null, null, null, null);
    }

}
类,该类接收json响应

public class DeptActivity extends Activity{


ArrayAdapter<String> adapter;
ListView listv;
Context context;
ArrayList<String> data;
SqliteDB sqlite;


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

      sqlite = new SqliteDB(DeptActivity.this);
      setupActionBar();
      data = new ArrayList<String>();
      listv = (ListView) findViewById(R.id.lv_dept);
      context = this;

      adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, data);
      listv.setAdapter(adapter);
      Toast.makeText(this,"Loading Please Wait..",Toast.LENGTH_SHORT).show();
      new AsyncLoadDeptDetails().execute();

}
public class DeptActivity扩展活动{
阵列适配器;
ListView-listv;
语境;
阵列列表数据;
SqliteDB-sqlite;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u dept);
sqlite=newsqlitedb(DeptActivity.this);
setupActionBar();
数据=新的ArrayList();
listv=(ListView)findViewById(R.id.lv\U部门);
上下文=这个;
adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,数据);
listv.setAdapter(适配器);
Toast.makeText(这是“正在加载请稍候…”),Toast.LENGTH_SHORT.show();
新建AsyncLoadDeptDetails().execute();
}
公共类AsyncLoadDeptDetails扩展 异步任务>{ ArrayList deptTable=null

      @Override
      public ArrayList<DeptTable> doInBackground(Void... params) {
            // TODO Auto-generated method stub

            RestAPI api = new RestAPI();
            try {
                   JSONObject jsonObj = api.GetDepartmentDetails();
                   JSONParser parser = new JSONParser();
                   Log.i( "department list", jsonObj.toString()); 
                   deptTable = parser.parseDepartment(jsonObj);
                   sqlite();

            } catch (Exception e) {
            }
      return deptTable;
  }

   //method to insert data json in sqlite
     private void sqlite() {
        // TODO Auto-generated method stub

        sqlite.open();
    for(int i=0; i<deptTable.size(); i++) {

            sqlite.insert(deptTable.get(i).toString());

        }

        sqlite.close();
    }   

      @Override
      protected void onPostExecute(ArrayList<DeptTable> result) {
            // TODO Auto-generated method stub

            for (int i = 0; i < result.size(); i++) {
                  data.add(result.get(i).getNo() + " " + result.get(i).getName());
            }

            adapter.notifyDataSetChanged();

            Toast.makeText(context,"Loading Completed",Toast.LENGTH_SHORT).show();
      }
@覆盖
公共ArrayList doInBackground(无效…参数){
//TODO自动生成的方法存根
RestAPI api=new RestAPI();
试一试{
JSONObject jsonObj=api.GetDepartmentDetails();
JSONParser=新的JSONParser();
Log.i(“部门列表”,jsonObj.toString());
deptTable=parser.parseDepartment(jsonObj);
sqlite();
}捕获(例外e){
}
返回deptTable;
}
//方法在sqlite中插入数据json
私有void sqlite(){
//TODO自动生成的方法存根
sqlite.open();

对于(int i=0;i我怀疑没有调用SQLiteOpenHelper的onCreate方法。这就是为什么没有创建DB表的原因。请在DatabaseHelper的onCreate中放置一个日志,检查它是否正在打印。还可以尝试将SQLiteOpenHelper用作非静态内部类,即删除SQLiteDB类并使用DatabaseHelperClass Constructtor直接创建。

public void onCreate(SQLiteDatabase db){
试一试{
db.execSQL(创建_表);
}捕获(SQLE异常){
e、 printStackTrace();
}
}
问题是您的
CREATE\u TABLE
语句有一个错误,但是
onCreate
函数抑制了这个错误,因此
SQLiteOpenHelper
假设它成功了,并且数据库可用

删除该
尝试
/
捕获
,然后删除应用程序的数据(以强制再次执行
onCreate
)。 然后修复错误消息中出现的错误

Error inserting name=com.example.db_client.DeptTable@b3e53870
android.database.sqlite.SQLiteException: no such table: departmentList (code 1): , while compiling: INSERT INTO departmentList(name) VALUES (?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
at com.example.db_client.SqliteDB.insert(SqliteDB.java:73)
at com.example.db_client.DeptActivity$AsyncLoadDeptDetails.sqlite(DeptActivity.java:91)
at com.example.db_client.DeptActivity$AsyncLoadDeptDetails.doInBackground(DeptActivity.java:68)
at com.example.db_client.DeptActivity$AsyncLoadDeptDetails.doInBackground(DeptActivity.java:1)