马上就答辩了,项目中遇到个问题,是android项目,用的SQLite数据库。现在有个数据库的方法不会写,具体内容是:通过表中的name字段,查出对应的phonenumber字段。数据库方法不会写,求助一下。
我写了个方法,想让他传进sql语句,就返回该name的phonenumber,帮忙解答下,这么写对嘛
/*
 * 操作数据库对象
 */
private SQLiteDatabase mDataBase; public String queryName(String sql) {
String count;
if (mDataBase == null) {
return 0;
}
Cursor cursor = mDataBase.rawQuery(sql, null);
count = cursor.getString(0);
cursor.close();
return count; }

解决方案 »

  1.   

    不考虑SQL注入漏洞的话就是:
    public String getPhoneByName(String pName) {
      String sql = "Select phonenumber From TABLENAME Where name='" + pName + "'";
      

  2.   

    哥们,能写个完整的方法吗,方法的返回值是phonenumber的值。因为这块薄弱,网上也没找到相关资料。谢谢了。
      

  3.   

    哥们,能写个完整的方法吗,方法的返回值是phonenumber的值。因为这块薄弱,网上也没找到相关资料。谢谢了。
      

  4.   

    哥们,能写个完整的方法吗,方法的返回值是phonenumber的值。因为这块薄弱,网上也没找到相关资料。谢谢了。
      

  5.   

    用JDBC的話,只是驅動部份不一樣
    import java.sql.*;public class Test {
      public static void main(String[] args) throws Exception {
        Class.forName("org.sqlite.JDBC");
        Connection conn =
          DriverManager.getConnection("jdbc:sqlite:test.db");
        Statement stat = conn.createStatement();
        stat.executeUpdate("drop table if exists people;");
        stat.executeUpdate("create table people (name, occupation);");
        PreparedStatement prep = conn.prepareStatement(
          "insert into people values (?, ?);");    prep.setString(1, "Gandhi");
        prep.setString(2, "politics");
        prep.addBatch();
        prep.setString(1, "Turing");
        prep.setString(2, "computers");
        prep.addBatch();
        prep.setString(1, "Wittgenstein");
        prep.setString(2, "smartypants");
        prep.addBatch();    conn.setAutoCommit(false);
        prep.executeBatch();
        conn.setAutoCommit(true);    ResultSet rs = stat.executeQuery("select * from people;");
        while (rs.next()) {
          System.out.println("name = " + rs.getString("name"));
          System.out.println("job = " + rs.getString("occupation"));
        }
        rs.close();
        conn.close();
      }
    }
    http://www.zentus.com/sqlitejdbc/
      

  6.   

    不好意思,对具体操作并不熟悉,只是对SQL有所了解而已。大致类似于:
    public String getPhoneByName(String pName) {
    String sql = "Select phonenumber From TABLENAME Where name='" + pName + "'";
    String phonenumber;
    if (mDataBase == null) {
      return 0;
    }Cursor cursor = db.rawQuery(sql, null); 
    while (cursor.moveToNext()) { 
      phonenumber = cursor.getString(0); //获取第一列的值,第一列的索引从0开始 

    cursor.close(); 
    db.close(); 
    return phonenumber;
    }
    参考下吧:
    http://www.javaask.com/mobile/android/2011/1116/9180.html
      

  7.   

    Cursor c = mDataBase.rawQuery(sql, null);
    if(c.moveToFirst()){
      for(int i=0;i!=c.getCount();i++){
        c.move(i);
        phonenumber = c.getString(0);
      }
    }
      

  8.   

    安卓上面注入漏洞,这个好玩。
    不过说实在的,要是PHONENUMBER由用户输入还真可能存在。
      

  9.   

    大哥,十分感谢,现在问题解决了,之前对游标不熟悉,缺少这个方法moveToNext()导致取不到值。
    我对数据库操作这块比较生疏,能请教个查询数据库,返回整个表,然后怎么把数据库里的字段全部显示出来。
    如果可以,留下QQ好吗?
      

  10.   

    你说的这个操作不复杂,其实Google下都有不少例子,包括我给你的那个链接就有。无非是你这个函数返回时,直接返回成一个List,其中的元素是匹配的VO就行了,类似:
    List lst = new ....;
    while (cursor.moveToNext()) {  
      VO vo = new VO();
      vo.setPhone(cursor.getString(0));
      vo.setName(cursor.getString(1));
      ...
      lst.add(vo);
    }  
    return lst;可以多看看这里的文章,这家伙对安卓开发很熟:
    http://blog.csdn.net/Android_Tutor/article/details/5654124