根据数据类型进行验证

时间:2014-08-11 07:45:47

标签: sqlite

希望根据SQLite表数据类型

验证编辑文本

我的SQLite数据库中有一个表,它分别有三种数据类型整数,整数,文本。编辑文本是根据table.now中的列动态创建的。现在我想对每个文本框进行验证,就像我输入整数数据类型的字符串值一样,然后会显示一个弹出窗口显示消息"不能插入数据类型的文本值整数&#34 ;.那我现在该怎么办。

这是我的代码

 public class DisplayTable_Grid extends  Activity
{
TableLayout table_layout;
SQL_crud sqlcon;
TableRow rw;
TextView gettxt_onLongclik;
ArrayList<String> storeColumnNames;

EditText enter_text;
TextView set_txt;
List<EditText> allEds = new ArrayList<EditText>();
ArrayList<String> storeallEds=new ArrayList<String>();
ArrayList<String> storeEditextText=new ArrayList<String>();
List<TextView> textViewlst = new ArrayList<TextView>();
ArrayList<String> getColumnNames=new ArrayList<String>();
 ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>();

@Override
 protected void onCreate(Bundle savedInstanceState) 
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.displaytable);
  sqlcon = new SQL_crud(this);
  table_layout = (TableLayout) findViewById(R.id.diplay_table);
  BuildTable();
}
 private void BuildTable() 
 {
      sqlcon.open();
      storeColumnNames=sqlcon.getColumnNames(DisaplayTables_list.getTableNameFromListView.toString());
      Cursor c = sqlcon.readEntryofTable(DisaplayTables_list.getTableNameFromListView.toString());

      int rows = c.getCount();
      int cols = c.getColumnCount();
      String colN=c.getColumnNames().toString();

           arraylist=sqlcon.readColumn_Datatypes(DisaplayTables_list.getTableNameFromListView.toString  ());
      ArrayList<String> colName=new ArrayList<String>();
      colName=sqlcon.getColumnNames(DisaplayTables_list.getTableNameFromListView.toString());
      //colName.add(colN);

      c.moveToFirst();
      System.out.println("size of hash map:"+arraylist.size());

      for(int k=0;k<1;k++)
       {
          TableRow rowcolumnName = new TableRow(this);
          rowcolumnName.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
          rowcolumnName.setBackgroundColor(Color.GRAY);

          for(int a=0;a<cols/*arraylist.size()*/;a++)

              {
              TextView columnName = new TextView(this);
            columnName.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));           
            columnName.setGravity(Gravity.CENTER);
            columnName.setTextSize(18);
            columnName.setPadding(0, 5, 0, 5);
            columnName.setText(colName.get(a)+"  "+arraylist.get(a).toString());
            rowcolumnName.addView(columnName);}

            table_layout.addView(rowcolumnName);
           // c.moveToNext();      
       }
      // outer for loop
      if(rows==0)
      {
          Toast.makeText(getApplicationContext(), "rows not found..cant build table", Toast.LENGTH_LONG);
      }
      else{
      for (int i = 0; i < rows; i++)
      {  
           TableRow row = new TableRow(this);
           row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

       // inner for loop
       for (int j = 0; j < cols; j++)
       {
        TextView tv = new TextView(this);
        tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));         
        tv.setGravity(Gravity.CENTER);
        tv.setTextSize(18);
        tv.setPadding(0, 5, 0, 5);
        tv.setText(c.getString(j));

        row.addView(tv);   
       }
       row.setClickable(true);
       row.requestFocus();         
       row.setOnLongClickListener(new OnLongClickListener()
       {            
        @Override
        public boolean onLongClick(View viewlong)
        {
            rw=(TableRow) viewlong;
            gettxt_onLongclik=(TextView)rw.getChildAt(0);

            Toast.makeText(getApplicationContext(),gettxt_onLongclik.getText().toString(),Toast.LENGTH_SHORT).show();

            final AlertDialog.Builder alertForSelectOperation=new AlertDialog.Builder(DisplayTable_Grid.this); 
            final LinearLayout linear=new LinearLayout(DisplayTable_Grid.this);
            linear.setOrientation(LinearLayout.VERTICAL);

            //TextView update=(TextView)new TextView(DisplayTable_Grid.this);
            Button update=(Button)new Button(DisplayTable_Grid.this);
            //update.setBackgroundColor(Color.rgb(3,12,90));
            update.setText(Html.fromHtml("<font size=10>Update</font>"));
            update.setOnClickListener(new OnClickListener()
            {   @Override
                public void onClick(View arg0) 
                {                       

                final AlertDialog.Builder alertDialogOK_CANCEL=new AlertDialog.Builder(DisplayTable_Grid.this); 
                final LinearLayout linearlayout=new LinearLayout(DisplayTable_Grid.this);
                linearlayout.setOrientation(LinearLayout.VERTICAL);
                    sqlcon.open();
                    getColumnNames=sqlcon.getColumnNames(DisaplayTables_list.getTableNameFromListView.toString());
                    Cursor crs=sqlcon.readColumnCnt(DisaplayTables_list.getTableNameFromListView.toString());               
                    int count=crs.getColumnCount();

                    Cursor cr=sqlcon.getSinlgeEntryof_table(DisaplayTables_list.getTableNameFromListView.toString(),getColumnNames.get(0), gettxt_onLongclik.getText().toString());
                    cr.moveToFirst();

                            for(int i=0;i<count;i++)
                            {   //add edittext to arralist                  
                                enter_text=new EditText(DisplayTable_Grid.this);
                                allEds.add(enter_text); 
                                allEds.get(i).setText(cr.getString(cr.getColumnIndex(getColumnNames.get(i))));
                                linearlayout.addView(enter_text);                           
                            }                           

                    sqlcon.close();
                    //finish();
                    alertDialogOK_CANCEL.setPositiveButton("Update", new DialogInterface.OnClickListener()
                    {   @Override
                        public void onClick(DialogInterface arg0, int arg1)
                        {
                        for(int i=0;i<allEds.size();i++)
                        {
                            //System.out.println(allEds.get(i).getText().toString());
                            storeallEds.add(allEds.get(i).getText().toString());
                            String getarraylist=arraylist.get(i).toString();
                            String datatype_text="{datatype=text}";
                            String datatype_integer="{datatype=integer}";
                            if(getarraylist.equals(datatype_text) || getarraylist.equals(datatype_integer))
                            {
                            if(getarraylist.equals(datatype_text))
                            {

                                Toast.makeText(getApplicationContext(), "text"+storeallEds.get(i),Toast.LENGTH_LONG).show();
                                //enter_text.setInputType(InputType.TYPE_CLASS_TEXT);
                            }
                            else if(getarraylist.equals(datatype_integer))
                            {


                                if(storeallEds.get(i).contains("a"))//allEds.get(i).getText().toString().contains("a")||allEds.get(i).getText().toString().contains("b"))
                                {
                                    Toast.makeText(getApplicationContext(), "String in integer value",Toast.LENGTH_LONG).show();
                                    //enter_text.setInputType(InputType.TYPE_CLASS_NUMBER);
                                }
                                else
                                {
                                    //storeallEds.add(allEds.get(i).getText().toString());
                                    Toast.makeText(getApplicationContext(), "integer"+storeallEds.get(i),Toast.LENGTH_LONG).show();

                                }


                                }
                            else
                            {
                                Toast.makeText(getApplicationContext(), "no datatype found",Toast.LENGTH_LONG).show();  
                            }
                            }

                        }
                        //System.out.println(storeallEds);
                        sqlcon.open();

                        try
                        {
                        sqlcon.updateRecord(DisaplayTables_list.getTableNameFromListView.toString(), gettxt_onLongclik.getText().toString(), storeallEds);
                        }
                        catch(Exception e)
                        {
                            Toast.makeText(getApplicationContext(),"Can't Update column already exists ",Toast.LENGTH_LONG).show();
                        }
                        Intent i=new Intent(getApplicationContext(),DisplayTable_Grid.class);
                        startActivity(i);

                        sqlcon.close();
                        }                           
                    });
                    alertDialogOK_CANCEL.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
                    {   @Override
                        public void onClick(DialogInterface dialog, int arg1)
                        {
                        dialog.dismiss();
                        }

                    });
                    alertDialogOK_CANCEL.setView(linearlayout);
                    alertDialogOK_CANCEL.setTitle("insert values here");
                    alertDialogOK_CANCEL.create();
                    alertDialogOK_CANCEL.show();


                }
            });         

            //TextView delete=(TextView)new TextView(DisplayTable_Grid.this);
            Button delete=(Button)new Button(DisplayTable_Grid.this);
            delete.setText(Html.fromHtml("<font size=10> Delete</font>"));
            //delete.setBackgroundColor(Color.rgb(3,12,90));
            delete.setOnClickListener(new OnClickListener()
            {   @Override
                public void onClick(View arg0) 
                {
                final AlertDialog.Builder alertDialogOK_CANCEL=new AlertDialog.Builder(DisplayTable_Grid.this); 
                alertDialogOK_CANCEL.setMessage("Press OK to Delete this Record");
                alertDialogOK_CANCEL.setPositiveButton("OK", new DialogInterface.OnClickListener()
                {   @Override
                    public void onClick(DialogInterface arg0, int arg1)
                    {
                    sqlcon.open();
                    sqlcon.deleteEntry(DisaplayTables_list.getTableNameFromListView, storeColumnNames.get(0), gettxt_onLongclik.getText().toString());
                    sqlcon.close();
                    Intent i=new Intent(getApplicationContext(),DisplayTable_Grid.class);
                    startActivity(i);

                    }
                });

                alertDialogOK_CANCEL.setNegativeButton("CANCEL",new DialogInterface.OnClickListener()
                {   @Override
                    public void onClick(DialogInterface dialog, int arg1)
                    {
                    dialog.dismiss();
                    }
                });

                alertDialogOK_CANCEL.create();
                alertDialogOK_CANCEL.show();
                }
            });

            //TextView insert=(TextView)new TextView(DisplayTable_Grid.this);
            Button insert=(Button)new Button(DisplayTable_Grid.this);
            insert.setText(Html.fromHtml("<font size=10>Insert</font>"));
            //insert.setBackgroundColor(Color.rgb(3,12,90));
            insert.setOnClickListener(new OnClickListener()
            {

                @Override
                public void onClick(View arg0)
                {

                    final AlertDialog.Builder alertDialog=new AlertDialog.Builder(DisplayTable_Grid.this); 
                    final LinearLayout linearlayout=new LinearLayout(DisplayTable_Grid.this);
                    linearlayout.setOrientation(LinearLayout.VERTICAL);

                    sqlcon.open();

                    getColumnNames=sqlcon.getColumnNames(DisaplayTables_list.getTableNameFromListView);
                    Cursor crs=sqlcon.readColumnCnt(DisaplayTables_list.getTableNameFromListView);              
                    int count=crs.getColumnCount();
                    for(int i=0;i<count;i++)
                    {   //add edittext to arralist                  
                        enter_text=new EditText(DisplayTable_Grid.this);
                        allEds.add(enter_text);

                        String getarraylist=arraylist.get(i).toString();
                        String datatype_text="{datatype=text}";
                        String datatype_integer="{datatype=integer}";
                        if(getarraylist.equals(datatype_text))
                        {
                            Toast.makeText(getApplicationContext(), "text",Toast.LENGTH_LONG).show();
                            enter_text.setInputType(InputType.TYPE_CLASS_TEXT);
                        }
                        else if(getarraylist.equals(datatype_integer))
                        {
                            Toast.makeText(getApplicationContext(), "integer",Toast.LENGTH_LONG).show();
                            //enter_text.setInputType(InputType.TYPE_CLASS_NUMBER);
                        }
                        else
                        {
                            Toast.makeText(getApplicationContext(), "no datatype found",Toast.LENGTH_LONG).show();  
                        }
                        //add textview to ayyalist
                        set_txt=new TextView(DisplayTable_Grid.this);
                        set_txt.setText(getColumnNames.get(i));
                        set_txt.setTextSize(15);
                        textViewlst.add(set_txt);
                        linearlayout.addView(set_txt);
                        linearlayout.addView(enter_text);

                        }                   
                    sqlcon.close();

                    alertDialog.setPositiveButton("Insert", new DialogInterface.OnClickListener()
                    {                   
                        @Override
                        public void onClick(DialogInterface arg0, int arg1)
                        {
                            if(allEds.size()==0)
                            {Toast.makeText(getApplicationContext(), "value not found",Toast.LENGTH_LONG).show();}
                            else
                            {
                                for(int i=0; i < allEds.size(); i++)
                                {   storeEditextText.add(allEds.get(i).getText().toString());                               
                                    System.out.println("show gettext: "+storeEditextText.get(i).toString());

                                                        String getarraylist=arraylist.get(i).toString();
                                                        String datatype_text="{datatype=text}";
                                                        String datatype_integer="{datatype=integer}";
                                                        if(getarraylist.equals(datatype_text))
                                                        {
                                                            Toast.makeText(getApplicationContext(), "text",Toast.LENGTH_LONG).show();

                                                        }
                                                        else if(getarraylist.equals(datatype_integer))
                                                        {
                                                        Toast.makeText(getApplicationContext(), "integer",Toast.LENGTH_LONG).show();

                                                                if(storeEditextText.contains("a")||storeEditextText.contains("b"))
                                                                {
                                                                    try
                                                                    {                                                       
                                                                    int edittxtint=Integer.parseInt(allEds.get(i).getText().toString());//enter_text.setInputType(InputType.TYPE_CLASS_NUMBER);
                                                                    }
                                                                    catch(Exception e)
                                                                    {
                                                                        System.out.println("exception....."+e);
                                                                        Toast.makeText(getApplicationContext(),"value must be an integer",Toast.LENGTH_LONG).show();
                                                                    }

                                                                    }
                                                                }
                                                        else
                                                        {
                                                            Toast.makeText(getApplicationContext(), "no datatype found",Toast.LENGTH_LONG).show();  
                                                        }

                                }

                                if(storeEditextText.size()==0)
                                {Toast.makeText(getApplicationContext(), "Text is empty",Toast.LENGTH_LONG).show();}
                                else
                                {
                                sqlcon.open();

                                    try
                                    {sqlcon.insert(DisaplayTables_list.getTableNameFromListView,storeEditextText);}
                                    catch(Exception e)
                                    {Toast.makeText(getApplicationContext(),"emp_id is Primary key", Toast.LENGTH_LONG).show();
                                    Toast.makeText(getApplicationContext(),"column value already exists",Toast.LENGTH_LONG).show();}



                                System.out.println("size of storeEdittext="+storeEditextText.size());
                                System.out.println("size of Edit Texts: "+allEds.size());

                                }

                                Intent i=new Intent(getApplicationContext(),DisplayTable_Grid.class);
                                startActivity(i);
                                sqlcon.close();
                                }
                        }

                    });

                    alertDialog.setView(linearlayout);
                    alertDialog.setTitle("insert values here");
                    alertDialog.create();
                    alertDialog.show();

                }
            });


            linear.addView(insert);         
            linear.addView(update);
            linear.addView(delete);
            alertForSelectOperation.setView(linear);
            alertForSelectOperation.setTitle("perform operations here");
            alertForSelectOperation.create();
            alertForSelectOperation.show();
            alertForSelectOperation.setCancelable(true);

            return false;
        }
    });
       row.setOnClickListener(new OnClickListener()
       {            
        @Override
        public void onClick(View v)
        {
            TableRow rw=(TableRow) v;
            TextView gettxt=(TextView)rw.getChildAt(0);
            Toast.makeText(getApplicationContext(), gettxt.getText().toString(),Toast.LENGTH_SHORT).show();
        }
    });
       c.moveToNext();
       table_layout.addView(row);
      }
      }//end of else for null rows
      sqlcon.close();
     }

}

1 个答案:

答案 0 :(得分:0)

您可以修改表格定义并添加&#34; CHECK&#34;约束,像这样:

CREATE TABLE tab (
    column1 INTEGER CHECK(typeof(column1) == "integer"),
    column2 INTEGER CHECK(typeof(column2) == "integer"),
    column3 TEXT CHECK(typeof(column3) == "text")
);

这将使您的数据库能够对此表强制执行数据类型检查。这会稍微减慢这个表上的插入/更新速度。