技术韭菜 2022-05-23 17:23 采纳率: 60%
浏览 30
已结题

Android中编写SQLite数据库代码

Android中编写SQLite数据库代码,创建表的时候写的代码如下:
db.execSQL("CREATE TABLE information(_id INTERGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),price INTEGER)");
问题(1)其中id为何前边加了下划线 “_” ,不是不能以下划线开头吗?
问题(2)能否介绍一下execSQL()这个方法的使用方法,例如:如何定义里边的参数?能否教一教底层的实现逻辑?
刚初学数据库,还望大咖们不吝赐教!

  • 写回答

2条回答 默认 最新

  • sinJack 2022-05-23 17:32
    关注

    sql没有规定不能以“_”开头啊,只是定义规范不建议用下划线开头。
    不能以下划线开头,在编程语言中才有语法、语义的检测,数据库没有。
    sql语句在数据库客户端执行一遍,不会报错就是可以的。


    execSQL()方法的使用例子:

    SQLiteDatabase db = ....;

    db.execSQL("insert into person(name, age) values('传智播客', 4)");

    db.close();

    执行上面SQL语句会往person表中添加进一条记录,在实际应用中, 语句中的“传智播客”这些参数值会由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句,当用户输入的内容含有单引号时,组拼出来的SQL语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“ & ”这些特殊SQL符号,为保证组拼好的SQL语句语法正确,必须对SQL语句中的这些特殊SQL符号都进行转义,显然,对每条SQL语句都做这样的处理工作是比较烦琐的。 SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。使用例子如下:

    SQLiteDatabase db = ....;

    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4});

    db.close();

    execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。

    1. SQLiteDatabase的rawQuery() 用于执行select语句,使用例子如下:
      SQLiteDatabase db = ....;

    Cursor cursor = db.rawQuery(“select * from person”, null);

    while (cursor.moveToNext()) {

     int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
    
     String name = cursor.getString(1);//获取第二列的值
    
     int age = cursor.getInt(2);//获取第三列的值
    

    }

    cursor.close();

    db.close();

    rawQuery()方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。带占位符参数的select语句使用例子如下:

    Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"%传智%", "4"});

    Cursor是结果集游标,用于对结果集进行随机访问,如果大家熟悉jdbc, 其实Cursor与JDBC中的ResultSet作用很相似。使用moveToNext()方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true。另外Cursor 还有常用的moveToPrevious()方法(用于将游标从当前行移动到上一行,如果已经移过了结果集的第一行,返回值为false,否则为true )、moveToFirst()方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true )和moveToLast()方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true )

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月3日
  • 已采纳回答 5月26日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 recipe通过gem协议传的是什么
  • ¥15 TS2307: Cannot find module 'cc'.
  • ¥15 100小时学会sap 书上pp章节5.22,标准成本计算逻辑?
  • ¥50 达梦数据库误删日志文件重做DAMENG01.log启动仍然-712错误
  • ¥15 cellranger化学处理类型报错
  • ¥15 用texstudio插入图片出现下面情况,怎么办
  • ¥15 ubantu 用samba挂载windows的共享文件夹,无法挂载二级目录和修改文件
  • ¥15 有没有会五轴RTCP算法,双转台AC结构。
  • ¥25 对于LSTM实践问题的疑问
  • ¥15 PHP中关于排名和显示的问题