SQLite 및 ListView에 대한 Android 쿼리 표시

5588 단어
SQLite의 구현
  • 도움말 클래스 계승 SqliteOpenHelper를 만들고 구조 방법 구조 방법 파라미터 추가:context 상하문;name 데이터베이스 파일 이름;factory는cursor 대상을 만드는 데 사용되며 기본값은null입니다.버전 번호, 1부터 4.0 이후 증가만 가능, 증가 후 onUpgrade 방법이 호출됨:
  • public MyOpenHelper (Context context) {    
          super(context, "moveList", null, 1);
    }
    
    
  • onCreate, onUpgrade 구현 방법
  • onCreate 방법은 데이터베이스를 처음 만들 때 호출되고 테이블 구조의 초기화에 적합하며 SQL 문장을 실행해야 한다.
  • @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE [userInfo]([name] VARCHAR(20),[address] VARCHAR(20),[phone] VARCHAR(20))";
        db.execSQL(sql);
    }
    
    
  • onUpgrade 방법은 데이터베이스의 Version이 증가한 후에 호출하여 표 구조의 수정에 적합하다.

  • 새로운 Dao 클래스로 데이터베이스를 추가하고 수정하는 방법
  • 구조 방법에서 도움말 클래스를 만드는 대상:
    public MyDao(Context context) {
    myOpenHelper = new MyOpenHelper(context);
    
  • }
     ```
    
  • 추가 삭제와 수정을 실현하는 데는 두 가지 방식이 있다.
  • 첫 번째는 Sqlite DataBase 대상을 사용하여execSql(String sql) 방법으로 문장을 삭제하고rawQuery() 방법으로 조회하는 것이다.이런 방법은 반환값이 없어서 실행 성공 여부를 판단할 수 없습니다.ql 문장은 손으로 써야 하기 때문에 틀리기 쉽다.
  • public void add(InfoBean bean){
    //  sql    sqliteDatabase  
    //  getReadableDatabase  ,          
    SQLiteDatabase db = myOpenHelper.getReadableDatabase();
    //sql:sql  ,  bindArgs:sql        
    db.execSQL("insert into info(name,phone) values(?,?);", new Object[]{bean.name,bean.phone});
    //       
    db.close();
    

    }
     ```
     -         SqliteDataBase    insert(), delete(), update(), query()          。          ,       ,      。
     ```java
     public boolean add(InfoBean bean){
     SQLiteDatabase db = myOpenHelper.getReadableDatabase();
     ContentValues values = new ContentValues();//  map     ,     
     values.put("name", bean.name);
     values.put("phone", bean.phone);
     
     //table:    , nullColumnHack:    ,        , values:       ,    :         Id ,-1      
     long result = db.insert("info", null, values);//      sql  
    
     //       
     db.close();
     if(result != -1){//-1      
         return true;
     }else{
         return false;
     }
    
    }
     ```
     -                 ,         。       :
     ```java
     public void query(String name){
     //  getReadableDatabase  ,          
     SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
     //sql:sql  ,  selectionArgs:         ,    cursor  
     Cursor cursor = db.rawQuery("select _id, name,phone from info where name = ?", new String []{name});
     //  Cursor    
     if(cursor != null && cursor.getCount() >0){//  cursor       
         
         //       ,        
         while(cursor.moveToNext()){//  ,          
             //    
             int id = cursor.getInt(0);
             String name_str = cursor.getString(1);
             String phone = cursor.getString(2);
             System.out.println("_id:"+id+";name:"+name_str+";phone:"+phone);
         }
         cursor.close();//     
     }
     //       
     db.close();
    
    }
     ```
    
  • Dao의 상응하는 방법을 호출하면 데이터베이스의 삭제와 수정을 완성할 수 있다.
  • 데이터베이스 업무: 여러 개의 sql 문장을 동시에 실행하거나 동시에 실패합니다.
  • DataBase를 사용합니다.beginTransaction에서 트랜잭션 열기
  • 여러 개의 sql 문장이try에 감싸여 있고, 마지막 설정이 성공적으로 실행된 데이터Base입니다.setTransactionSuccessful()
  • finally에서 데이터Base를 사용합니다.endTransaction () 은 업무의 성공 여부를 판단하고, 성공하지 못하면 스크롤합니다.
  • 예: 은행 이체
  •     public void transtation(View v){
        //1.          
        BankOpenHelper bankOpenHelper = new BankOpenHelper(this);
        //2.     ,      ,  SqliteDatabase      (sql  )
        SQLiteDatabase db = bankOpenHelper.getReadableDatabase();
        //3.  ,      200,   200
        db.beginTransaction();//         
        try {
            db.execSQL("update account set money= money-200 where name=?",new String[]{"  "});
            int i = 100/0;//      
            db.execSQL("update account set money= money+200 where name=?",new String[]{"  "});
    
            db.setTransactionSuccessful();//      sql        
        } finally {
            db.endTransaction();//           ,     ,         sql   
        }
    }
    
    

    ListView의 구현
  • 레이아웃에 ListView,Activity를 추가하면listView 대상을 찾을 수 있습니다.
  • Bean 객체를 캡슐화하여 표시할 ArrayList, 즉 위 데이터베이스의 조회 부분을 해당 위치에 작성합니다
  • 어댑터를 만들고 BaseAdapter를 계승하여 구조 방법에context와 beanList를 전송하고 네 가지 방법을 실현한다.
  • getCount:ListView가 표시할 항목 수:return beanList.size();
  • getItem(int position): 해당 항목 반환: return beanList.get(position);
  • getItemId(int position):return position;
  • getView: ListView 항목별로 표시되는 내용
  • getView 메소드 예:
  • public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        
        //ListView    
        if(convertView != null)
            view = convertView;
        else {
            view = View.inflate(context, R.layout.view_item,null);
        }
        
        //  view             
        UserBean userBean = userList.get(position);
        TextView name_item = (TextView) view.findViewById(R.id.item_name);
        TextView phone_item = (TextView) view.findViewById(R.id.item_phone);
        name_item.setText(userBean.name);
        phone_item.setText(userBean.phone);
        //  view
        return view;
    }
    
    

  • adapter 실례 대상을 만들고Activity의ListView에 설정합니다:
  • MyAdapter adapter = new MyAdapter(context,beanList);
    listView.setAdapter(adapter)
    

    SQLite 질의 결과를 ListView에 표시
  • Dao류의 조회 방법에서arrayList를 만들고cursor가 한 번 이동할 때마다 조회의 데이터를 BeanList에 추가합니다.
  • ListView 어댑터 어댑터의 GetView 방법에서position 번호를 통해 항목마다 해당하는 bean 대상을 가져와 구성 요소에 설정합니다.
  • 좋은 웹페이지 즐겨찾기