Android 中数据库查询方法 query()

在使用android sqlite 的时候  经常对query() 方法不太记得,网上找了些东西

Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query 中有大都(全部?)会有一个参数 selectionArgs,比如下面这个 android.database.sqlite.SQLiteDatabase.query():

  • public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)  

selection 参数很好理解,就是 SQL 语句中 WHERE 后面的部分,即过滤条件, 比如可以为 id=3 AND name='Kevin Yuan' 表示只返回满足 id 为 3 且 name 为 "Kevin Yuan" 的记录。

    再实际项目中像上面那样简单的“静态”的 selection 并不多见,更多的情况下要在运行时动态生成这个字符串,比如

view plaincopy to clipboardprint?
public doQuery(long id, final String name) {  
  mDb.query("some_table", // table name   
        null, // columns  
        "id=" + id + " AND name='" + name + "'", // selection  
         //...... 更多参数省略  
  );  

public doQuery(long id, final String name) {
  mDb.query("some_table", // table name
        null, // columns
        "id=" + id + " AND name='" + name + "'", // selection
         //...... 更多参数省略
  );
}

在这种情况下就要考虑一个字符转义的问题,比如如果在上面代码中传进来的 name 参数的内容里面有单引号('),就会引发一个 "SQLiteException syntax error .... "。

     手工处理转义的话,也不麻烦,就是 String.replace() 调用而已。但是 Android SDK 为我们准备了 selectionArgs 来专门处理这种问题:

view plaincopy to clipboardprint?
public void doQuery(long id, final String name) {  
  mDb.query("some_table", // table name   
        null, // columns  
        "id=" + id + " AND name=?", // selection  
        new String[] {name}, //selectionArgs  
         //...... 更多参数省略  
  );  
  // ...... 更多代码  

public void doQuery(long id, final String name) {
  mDb.query("some_table", // table name
        null, // columns
        "id=" + id + " AND name=?", // selection
        new String[] {name}, //selectionArgs
         //...... 更多参数省略
  );
  // ...... 更多代码
}

也就是说我们在 selection 中需要嵌入字符串的地方用 ? 代替,然后在 selectionArgs 中依次提供各个用于替换的值就可以了。在 query() 执行时会对 selectionArgs 中的字符串正确转义并替换到对应的 ? 处以构成完整的 selection 字符串。 有点像 String.format()。

    不过需要注意的是 ? 并不是“万金油”,只能用在原本应该是字符串出现的地方。比如下面的用法是错误的:

view plaincopy to clipboardprint?
public void doQuery(long id, final String name) {  
  mDb.query("some_table", // table name   
        null, // columns  
        "? = " + id + " AND name=?", // selection XXXX 错误!? 不能用来替换字段名  
        new String[]{"id", name}, //selectionArgs  
      //...... 更多参数省略  
  );  
  // ...... 更多代码  

andorid column ‘_id’ does not exist错误的解决

这个问题搞了我晚上好几个小时,最后查了下网上,才找到问题。

关于这一部分,必须注意sqlite的主键命名,由于simpleCursorAdapter的方法只识别_id,所以,当你用到sqlite的simpleCursorAdapter时,必须把数据表的主键命名为_id。否则就会出现java.lang.IllegalArgumentException: column '_id' does not exist错误。

android 学习笔记

android模拟器(simulator)把它自己作为了localhost,也就是说,代码中使用localhost或者127.0.0.1来访问,都是访问模拟器自己!这是不行的!

如果你想在模拟器simulator上面访问你的电脑,那么就使用android内置的IP 10.0.2.2 吧,  10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名alias

记住,在模拟器上用10.0.2.2访问你的电脑本机

 

android http post  实现

 

  public void onClick(View v) {
    dopost(txt.getText().toString());
    
   }
  });
    }

 private void dopost(String val){
     //封装数据
     Map<String, String> parmas = new HashMap<String, String>();
     parmas.put("name", val);
    
     DefaultHttpClient client = new DefaultHttpClient();//http客户端
     HttpPost httpPost = new HttpPost("http://mhycoe.com/test/post.php");
    
     ArrayList<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
     if(parmas != null){
         Set<String> keys = parmas.keySet();
         for(Iterator<String> i = keys.iterator(); i.hasNext();) {
              String key = (String)i.next();
              pairs.add(new BasicNameValuePair(key, parmas.get(key)));
         }
    }
    
  try {
   UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(pairs, "utf-8");
         /*
          *  将POST数据放入HTTP请求
          */
         httpPost.setEntity(p_entity);
         /*
          *  发出实际的HTTP POST请求
           */
         HttpResponse response = client.execute(httpPost);
         HttpEntity entity = response.getEntity();
         InputStream content = entity.getContent();
   String returnConnection = convertStreamToString(content);
         show.setText(returnConnection);
  } catch (IllegalStateException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
    
 }

  private String convertStreamToString(InputStream is) {
   BufferedReader reader = new BufferedReader(new InputStreamReader(is));
         StringBuilder sb = new StringBuilder();
         String line = null;
         try {
              while ((line = reader.readLine()) != null) {
                   sb.append(line);
              }
         } catch (IOException e) {
              e.printStackTrace();
         } finally {
              try {
                   is.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
         }
         return sb.toString();
 }
}

回家迷途

又一次出远门,这次走的方向走反了,走北方去了。所以特别想家,9月29号晚坐上回南昌的火车,从北京返家。经过12个小时不合眼的火车硬座,差点肛裂了。。下次一定给我买张卧的,再送她一张。也许这也只能想想啦,我还是一直这么穷。。北漂的生活虽说已经剥落了我梦的外皮,但现实已经入我骨了。下火车之后就票也没买到,看到回家无望了,只好去学校走走,在学校的好好走了好多次。看到了好些同学,他们考公务员的考公务员的,考研的考研;像我这样子的都一起出去实习了。每一个同学都说要请我吃饭,都说好久没见了。中午我请他们一起吃了个饭。下午在床上 几秒钟就睡着了,这次是很快睡着了,一次深度睡眠。好久没睡个好觉了,很幸福的睡觉是我现在的梦想。晚上寝友请我吃饭,吃完后我一个人在学校里面自己走走,接着走第5圈。在路上又遇上了好几个同学,陪他们聊天,之后他们请我吃饭了,完他们又陪我走走,之后又撞上同学,他们又请我吃饭。然后就聊了聊他们在公司的故事,蛮好玩的。吃的差不多,又走了走,之后又撞到同学了,这次考研的看书回来,就一次聊着回寝室了。

寝室没床,就去同学那睡了,几天没睡好,拿着书睡着了,这次真是睡的很好。接第二天就没怎么爽,火车站不让进,我没票,人很多。打电话都不通,差点都要走丢,其实我们都找不到对方了。后来没办法,等等了好久发短信才找到对方的。去拦汽车也没拦到,为了1号能到安福,所以我晚上也去拦汽车回家,最后被我拦到了。晚10点半到安福,哈哈。。。回家真好。。。虽然一路杯具着。。

 

 

JAVA 数字转人民币大写

在写这个之前,老师出的,把阿拉伯数字转化为人民币大写

因为想的跟老师不一样,被老师BS了下,回到住处就把这个写出来

如果有问题,请提出

package com.joyleft.client;

public class MoneyUtil {
 
 private static final String[] NUMBERS={ "","壹", "贰", "叁", "肆", "伍", "陆",
       "柒", "捌", "玖" };
 private static final String[]  IUNIT = { "元", "拾", "佰", "仟", "万", "拾", "佰",
       "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" };

 private static final String[] DUNIT = { "角", "分" };
 private static final String TOTAL="整";
 
 /**
  * 转成数组
  * @param number
  */
 public int[] toArray(String number){
  
  char[]cn=number.toCharArray();
  int []num=new int[cn.length];
  for(int i=0;i<cn.length;i++)
  {
   num[i]=Integer.parseInt(String.valueOf(cn[i]));
  }
  return num;
 }
 
 public void toChinese(String number){
  String strInt="";
  String strFloat="";
  String StrNum="";
  if(number.indexOf(",")>0)
   number=number.replace(",", "");
   
  if(number.indexOf(".")>0){//是否有小数点
   strInt=number.substring(0,number.indexOf("."));
  
   strFloat=number.substring(number.indexOf(".")+1);
   
   strFloat=round(strFloat);
   
   if("100".equals(strFloat)){//四舍五入后小数位没有了
    StrNum=this.handleInteger(strInt,true);
    strFloat="";
   }else{
    StrNum=this.handleInteger(strInt,false)+handleDecimal(strFloat);
   }
   
  }else{
   System.out.println(number);
  }
  System.out.println(StrNum);
 }
 /**
  * 整数部分处理
  * @param number
  */
 public String handleInteger(String number,boolean b){
  String strNum="人民币:";
  int[] num=null;
  if("0".equals(number)){
   return strNum+"";
  }
  num=toArray(number);

  for(int i=0;i<num.length;i++){
   if(b&&i==num.length-1){
    num[i]=num[i]+1;
    
   }
   if(num[i]!=0){
    strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1];
    
    }else{
      if(num.length-i==13)//万亿位为零 加万字
       strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1];
      else if(num.length-i==9)//亿位为零 加亿字
       strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1];
      else if(num.length-i==5)//万位为零 加万字
       strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1];
      else if(num.length-i==1)
       strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1]+TOTAL;
    }
   }
  return strNum;
 }
 /**
  * 小数部分处理
  * @param number
  */
 public String handleDecimal(String number){
  String strNum="";
  
  int[] num=toArray(number);

  for(int i=0;i<num.length;i++){
   
   if(num[i]!=0)
    strNum=strNum+NUMBERS[num[i]]+DUNIT[i];
   else
    strNum=strNum+NUMBERS[num[i]]+TOTAL;
  }
  return strNum;
 }
 /**
  * 四舍五入  保留两位
  * @param num
  */
 public String round(String number){
  String strNum="0."+number;
  float num=Float.parseFloat(strNum);
  int reNum=(int)num*1000%10;//取得千分位
  int intNum=0;
  
  if(reNum>=5){
   num=(num*100+1);
   intNum=(int)num;
  }else{
   
   intNum=(int)(num*100);
  }
  
  strNum=String.valueOf(intNum);
  if(strNum.length()==1)
   strNum="0"+strNum;
  return strNum;
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  new MoneyUtil().toChinese("3453845546430.200");
  new MoneyUtil().toChinese("0.99");
 
 }

}
结果

人民币:叁万肆仟伍佰叁拾捌亿肆仟伍佰伍拾肆万陆仟肆佰叁拾元整贰角整
人民币:玖角玖分
 

JAVA面试编程题

有4个彩色的立方体。立方体的6个面,每面都涂上了1种颜色。一共有4种颜色,蓝色(B),红色(R),绿色(G)和黄色(Y)。立方体的6个面称为前(front)、后(back)、左(left)、右(right)、上(top)、下(bottom)。

这4个立方体的颜色排列为:

编号    front    back     left     right    top     bottom

1       R      B        G      Y       B       Y

2       R      G        G      Y       B       B

3       Y      B        R      G       Y       R

4       Y      G        B      R       R       R

请将这4个立方体重叠摆放成为一个立柱,这个立柱有4个侧面,要求每个侧面都有4种颜色。

 

代码:

package com.joyleft.client;

public class ShowColor {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String[][] color={
                {"R","B","G","Y","B","Y"},
                {"R","G","G","Y","B","B"},
                {"Y","B","R","G","Y","R"},
                {"Y","G","B","R","R","R"},
        };
        int count=0;
        int AllCount=0;
        for (int i = 0; i < color[0].length; i++) {
            for (int j = 0; j < color[1].length; j++) {
                for (int j2 = 0; j2 < color[2].length; j2++) {
                    for (int k = 0; k < color[3].length; k++) {
                        if(!color[0][i].equals(color[1][j])&&!color[0][i].equals(color[2][j2])&&!color[0][i].equals(color[3][k])){
                            if(!color[1][j].equals(color[2][j2])&&!color[1][j].equals(color[3][k])){
                                if(!color[2][j2].equals(color[3][k])){
                                    System.out.println(count+1+":"+color[0][i]+" "+color[1][j]+" "+color[2][j2]+" "+color[3][k]);
                                    count++;
                                }
                            }
                        }       
                        AllCount++;
                    }
                }
            }
        }
    System.out.println("一共有"+count+"种方法");   
    System.out.println("一共执行了"+AllCount+"步");
    }

}

结果

一共有130种方法
一共执行了1296步

1:R G Y B
2:R G B Y
3:R G Y B
4:R G Y B
5:R G B Y
6:R G Y B
7:R Y B G
8:R Y G B
9:R B Y G
10:R B G Y
11:R B Y G
12:R B Y G
13:R B G Y
14:R B Y G
15:B R Y G
16:B R G Y
17:B R Y G
18:B G Y R
19:B G Y R
20:B G Y R
21:B G R Y
22:B G Y R
23:B G Y R
24:B G Y R
25:B G R Y
26:B G Y R
27:B G Y R
28:B G Y R
29:B G R Y
30:B G Y R
31:B G Y R
32:B G Y R
33:B G R Y
34:B Y R G
35:B Y G R
36:B Y G R
37:B Y G R
38:B Y R G
39:G R Y B
40:G R B Y
41:G R Y B
42:G Y B R
43:G Y B R
44:G Y B R
45:G Y R B
46:G Y R B
47:G B Y R
48:G B Y R
49:G B Y R
50:G B R Y
51:G B Y R
52:G B Y R
53:G B Y R
54:G B R Y
55:G B Y R
56:G B Y R
57:G B Y R
58:G B R Y
59:G B Y R
60:G B Y R
61:G B Y R
62:G B R Y
63:Y R B G
64:Y R G B
65:Y G B R
66:Y G B R
67:Y G B R
68:Y G R B
69:Y G R B
70:Y G B R
71:Y G B R
72:Y G B R
73:Y G R B
74:Y G R B
75:Y B R G
76:Y B G R
77:Y B G R
78:Y B G R
79:Y B R G
80:Y B R G
81:Y B G R
82:Y B G R
83:Y B G R
84:Y B R G
85:B R Y G
86:B R G Y
87:B R Y G
88:B G Y R
89:B G Y R
90:B G Y R
91:B G R Y
92:B G Y R
93:B G Y R
94:B G Y R
95:B G R Y
96:B G Y R
97:B G Y R
98:B G Y R
99:B G R Y
100:B G Y R
101:B G Y R
102:B G Y R
103:B G R Y
104:B Y R G
105:B Y G
R
106:B Y G R
107:B Y G R
108:B Y R G
109:Y R B G
110:Y R G B
111:Y G B R
112:Y G B R
113:Y G B R
114:Y G R B
115:Y G R B
116:Y G B R
117:Y G B R
118:Y G B R
119:Y G R B
120:Y G R B
121:Y B R G
122:Y B G R
123:Y B G R
124:Y B G R
125:Y B R G
126:Y B R G
127:Y B G R
128:Y B G R
129:Y B G R
130:Y B R G

如果不对 请提醒下我,谢谢

微笑计划

很多人都说我应该多笑些,哈哈,好像是很少笑。也许他们没看到我笑,也许我是心笑肉不笑。因为一次意外,一边的面部神经不怎么灵。现在很多人都开始觉得我不是一个开朗的人。但我真是一个开朗的,只是经历过一些事,加上面部神经问题。哈哈,为了笑,现在我得每天笑。让自己真正笑的自然。真的笑才是我想要的。。。

远足只为梦想

已经离开南昌有一些时间了,也没什么时间来写我的博客;本以为出去了就会有更多的时候来写却不知时间更少。换新地方有一周多时间,这里的生活不像家乡,吃不习惯,睡不习惯,很多都不习惯,却习惯着一个人。不过我过的还不错,各位朋友请不要为我担心。老规矩贴代码:

没事写的Pet超市小程序,还是初级,别笑话我。。我现在从基础学起,过些天会写些好玩的,大点的东西。期待吧…..

interface Pet{
    public String getName();
    public String getColor();
    public int getAge();
}
class Cat implements Pet{
    private String name;
    private String color;
    private int age;
    public Cat(String name,String color,int age){
        this.setName(name);
        this.setColor(color);
        this.setAge(age);
    }
    public void setName(String name){
        this.name=name;
    }
    public void setColor(String color){
        this.color=color;
    }
    public void setAge(int age){
        this.age=age;
    }
    public String getName(){
        return this.name;
    }
    public String getColor(){
        return this.color;
    }
    public int getAge(){
        return this.age;
    }

}
class Dog implements Pet{
    private String name;
    private String color;
    private int age;
    public Dog(String name,String color,int age){
        this.setName(name);
        this.setColor(color);
        this.setAge(age);
    }
    public void setName(String name){
        this.name=name;
    }
    public void setColor(String color){
        this.color=color;
    }
    public void setAge(int age){
        this.age=age;
    }
    public String getName(){
        return this.name;
    }
    public String getColor(){
        return this.color;
    }
    public int getAge(){
        return this.age;
    }
}
class PetShop
{
    private Pet[] pets;
    private int foot;
    public PetShop(int len){
        if(len>0){
            this.pets=new Pet[len];
        }else{
            this.pets=new Pet[1];
        }
    }
    public boolean add(Pet pet){
        if(this.foot<this.pets.length){
            this.pets[this.foot]=pet;
            this.foot++;
            return true;
        }else{
            return false;
        }
    }
    public Pet[] search(String keyWord){
        Pet p[] =null;
        int count=0;
        for(int i=0;i<this.pets.length;i++){
            if(this.pets[i]!=null){
                if(this.pets[i].getName().indexOf(keyWord)!=-1||this.pets[i].getColor().indexOf(keyWord)!=-1){
                    count++;
                }
            }
        }
        p=new Pet[count];
        int f=0;
        for(int i=0;i<this.pets.length;i++){
            if(this.pets[i]!=null){
                if(this.pets[i].getName().indexOf(keyWord)!=-1||this.pets[i].getColor().indexOf(keyWord)!=-1){
                    p[f]=this.pets[i];
                    f++;
                }
            }
        }
        return p;
    }
}
public class PetShopDemo{
    public static void main(String args[]){
        PetShop ps=new PetShop(5);
        ps.add(new Cat("白猫","白色的",6));
        ps.add(new Cat("黑猫","黑色的",3));
        ps.add(new Cat("灰猫","灰色的",4));
        ps.add(new Dog("金毛","金色的",1));
        ps.add(new Dog("黄狗","黄色的",3));
        ps.add(new Dog("白狗","白色的",2));
        print(ps.search("黄"));
        }
    public static void print(Pet p[]){
        for(int i=0;i<p.leng
th;i++){
            if(p[i]!=null){
                System.out.println(p[i].getName()+","+p[i].getColor()+","+p[i].getAge());
            }
        }
    }
}

江西安福洲湖镇水灾

这次江西大部分都发生了水灾,我学校本部所在的抚州更是一片汪洋。天灾是天灾,可人呢?

我也不在这里讨论他们的问题,当一天官请为农民想想吧。

以下是我家发大水的视频,前几一水已经退下去了。我刚刚从家里出来,天还大下大雨,下了一个晚上,现在已经涨水了。回县城的时候,发现县城也有好大的水。这天,不让人回学校了。祝灾区人民早日恢复起来吧。

江西省吉安市安福县发生3.0级地震-我家哦

据江西省地震台网测定,2010年5月20日03时54分(北京时间),在江西省吉安市安福县(震中位于北纬27.49度、东经114.73度)发生ML3.0级地震。震源深度7.3千米。

另外5月19日13时17分发生ML2.8级地震(北纬27.48,东经114.71),震源深度4.0千米,21时41分发生ML2.4级地震(北纬27.44,东经114.58),震源深度2.9千米。3次地震均有感。

 

我家也发生地震了,这不2012来了??