Android - sqlite

1.sqlyog软件的使用.
 使用这个工具可以直接创建数据库 表 直接添加数据
2.jdbc
   jdbc是什么          jdbc:java数据库连接.
   jdbc有什么用      jdbc可以适配市面上大多数数据库.我们使用java语言开发只要写一套程序就ok.
   jdbc怎么用 
        [1]加载对应数据库的驱动 
        [2]连接要操作的数据库
        [3]准备你要执行的sql语句  select * from info;
        [4]执行sql语句 返回一个结果 
        [5]把结果数据取出来.
 
 
  1. @Test
  2. public void jdbcTest1() throws Exception{
  3. //1.加载对应的驱动程序
  4. DriverManager.registerDriver(new Driver());
  5. //2.获取数据库的连接 参数1:通过url地址来连接数据库 参数2:用户名 参数3:密码
  6. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hm104", "root", "123");
  7. //3.准备一个要执行的sql语句
  8. String sql = "select * from orders";
  9. //4.执行sql语句前 要先获取statement对象 用来执行sql语句
  10. Statement statement = conn.createStatement();
  11. //5.执行一个查询sql语句 返回一个结果集
  12. ResultSet resultSet = statement.executeQuery(sql);
  13. //6.想取出数据需要先移动光标 因为光标默认是第一行之前
  14. // resultSet.first();
  15. while(resultSet.next()){
  16. //7.获取对应列的数据
  17. int id = resultSet.getInt(1);
  18. String name = resultSet.getString(2);
  19. int price = resultSet.getInt(3);
  20. System.out.println("id:"+id+"---"+name+"--->"+price);
  21. }
  22. //8.关闭conn statement result对象 释放资源 先打开的后释放
  23. resultSet.close();
  24. statement.close();
  25. conn.close();
  26. }
3.jdbc加强
 1.driverManager:注册驱动  获取一个数据库连接
 2.Connection :获取一个statement对象,获取一个preparedStatement(预编译对象 可以防止sql注入)
 3.statement对象 :执行一个查询的sql语句使用 executeQuery ( String  sql) 如果执行的是insert update delete 应该使用executeUpdate();
 4.ResultSet:代表结果集 只有进行查询的sdl语句的时候才会返回该对象,结果集内部默认有一个光标 光标默认在数据第一行之前.我们需要获取数据需要移动光标   移动光标的方法next()  first()  last();
4.sql注入
  1.通过一个登录案例模拟   创建一个用户表用来模拟用户登录信息
     create table login(id int,name varchar(20),pwd varchar(20));
     insert into login values(1,'abc','123');
     insert into login values(2,'abcd','1234');
  2.模拟登录 
      select * from login where name='abc' and pwd='123'
      select * from login where name='abc'or'1==1' and pwd='123dhdhdhdhdhd'
    select * from login where name= 'abc\'or\'1==1' and pwd= '123dhdhdhdhdhd'
  3.代码实现:
 
  
  1. private static void loginIn(String name, String pwd) throws Exception{
  2. //1.加载对应的驱动程序
  3. DriverManager.registerDriver(new Driver());
  4. //2.获取数据库的连接 参数1:通过url地址来连接数据库 参数2:用户名 参数3:密码
  5. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hm104", "root", "123");
  6. //3.准备一个要执行的sql语句 ?代表占位符 607
  7. String sql = "select * from login where name= ? and pwd= ?";
  8. //4.执行sql语句前 要先获取statement对象 为了防止sql注入 我们获取一个preparedstatement 对象
  9. PreparedStatement prepareStatement = conn.prepareStatement(sql);
  10. //4.1 设置?占位符的内容
  11. prepareStatement.setString(1, name);
  12. prepareStatement.setString(2, pwd);
  13. //5.执行一个查询sql语句 返回一个结果集
  14. ResultSet resultSet = prepareStatement.executeQuery();
  15. //6.想取出数据需要先移动光标 因为光标默认是第一行之前
  16. if (resultSet.next()) {
  17. System.out.println("登录成功");
  18. }else {
  19. System.out.println("登录失败");
  20. }
  21. //8.关闭conn statement result对象 释放资源 先打开的后释放
  22. resultSet.close();
  23. prepareStatement.close();
  24. conn.close();
  25. }
  26. }
5.sqlite数据库
   sqlite是轻量级 嵌入式的数据库. 不需要安装sqlite软件.因为已经嵌入到android系统里
   先创建数据库 在操作数据库里面的表 在操作表里面的记录  sqliteOpenHelper
   5.1使用传统sql语句实现增删改查逻辑
 
  
  1. //点击按钮实现向数据库增加一条记录 其实就是执行一个插入的sql语句
  2. public void click1(View view) {
  3. //1.想把数据库文件创建出来 第一次是创建数据库 第二次调用就是打开数据库
  4. SQLiteDatabase db = myOpenHelper.getWritableDatabase();
  5. //2.执行一个插入的sql语句
  6. db.execSQL("insert into info(name,phone) values('abc','13777777')");
  7. //3.当db对象用完后 需要关闭
  8. db.close();
  9. }
  10. //点击按钮实现向数据库删除一条记录 其实就是执行一个插入的sql语句
  11. public void click2(View view) {
  12. //1. 第一次是创建数据库 第二次调用就是打开数据库
  13. SQLiteDatabase db = myOpenHelper.getWritableDatabase();
  14. //2.执行一个插入的sql语句
  15. db.execSQL("delete from info where name='abc'");
  16. //3.当db对象用完后 需要关闭
  17. db.close();
  18. }
  19. //点击按钮实现向数据库修改一条记录 其实就是执行一个插入的sql语句
  20. public void click3(View view) {
  21. //1. 第一次是创建数据库 第二次调用就是打开数据库
  22. SQLiteDatabase db = myOpenHelper.getWritableDatabase();
  23. //2.执行一个插入的sql语句
  24. db.execSQL("update info set phone='139999999'where name='abc'");
  25. //3.当db对象用完后 需要关闭
  26. db.close();
  27. }
  28. //点击按钮实现向数据库 查询记录 其实就是执行一个插入的sql语句
  29. public void click4(View view) {
  30. //1. 第一次是创建数据库 第二次调用就是打开数据库
  31. SQLiteDatabase db = myOpenHelper.getReadableDatabase();
  32. //2.执行一个插入的sql语句 当执行查询sql语句的时候不能使用execSQL方法 因为这个方法返回值是void
  33. Cursor cursor = db.rawQuery("select * from info", null);
  34. //3.移动光标把数据取出来
  35. if (cursor!=null){
  36. while (cursor.moveToNext()){
  37. //4.取出对应列的值 列的索引 从0开始
  38. // int id = cursor.getInt(0);
  39. String id = cursor.getString(0);
  40. String name = cursor.getString(1);
  41. String phone = cursor.getString(2);
  42. System.out.println("id:"+id+"---"+name+"---"+phone);
  43. }
  44. }
  45. //3.当db对象用完后 需要关闭
  46. db.close();
  47. }
  5.2.使用谷歌封装好的api实现增删改查逻辑
  传统实现方式 调用方法没有返回值,程序员不容易进行判断 ,传统的sql语句很容易写错.
 
  
  1. //点击按钮实现向数据库增加一条记录 其实就是执行一个插入的sql语句
  2. public void click1(View view) {
  3. //1.想把数据库文件创建出来 第一次是创建数据库 第二次调用就是打开数据库
  4. SQLiteDatabase db = myOpenHelper.getWritableDatabase();
  5. //2.调用insert方法执行插入逻辑
  6. // db.execSQL("insert into info(name,phone) values('abc','13777')");
  7. /**
  8. * 参数1:表名
  9. * 参数2:占位作用 如果字段什么数据也不插入就使用NULL占位 如果插入数据了就使用插入的数据
  10. * 参数3:编程小技巧 填写参数的时候 先不用管参数具体是什么含义 先把方法写完整.
  11. */
  12. //2.1创建ContentValues实例 这个实例其实就是map 往数据库中添加记录
  13. ContentValues values = new ContentValues(); //实际上底层就是一个map map由键值构成
  14. values.put("name","lisi"); //key:应该是列名
  15. values.put("phone","110");
  16. //2.2 调用insert方法插入数据 返回值:代表新插入行的id 2条记录 1 2 3
  17. long info = db.insert("info", null, values);
  18. if (info!=-1){
  19. Toast.makeText(this, "插入成功", Toast.LENGTH_SHORT).show();
  20. }else{
  21. Toast.makeText(this, "插入失败", Toast.LENGTH_SHORT).show();
  22. }
  23. //3.当db对象用完后 需要关闭
  24. db.close();
  25. }
  26. //点击按钮实现向数据库删除一条记录 其实就是执行一个插入的sql语句
  27. public void click2(View view) {
  28. //1. 第一次是创建数据库 第二次调用就是打开数据库
  29. SQLiteDatabase db = myOpenHelper.getWritableDatabase();
  30. //2.执行一个插入的sql语句
  31. // db.execSQL("delete from info where name='abc'");
  32. /**
  33. * 参数2:删除条件
  34. * 参数3:?号占位
  35. * 返回值: 代表删除的行数
  36. * 原理:底层在帮助我们封装sql语句
  37. */
  38. int info = db.delete("info", "name=?", new String[]{"lisi"});
  39. Toast.makeText(this, "删除了"+info+"行", Toast.LENGTH_SHORT).show();
  40. //3.当db对象用完后 需要关闭
  41. db.close();
  42. }
  43. //点击按钮实现向数据库修改一条记录 其实就是执行一个插入的sql语句
  44. public void click3(View view) {
  45. //1. 第一次是创建数据库 第二次调用就是打开数据库
  46. SQLiteDatabase db = myOpenHelper.getWritableDatabase();
  47. //2.执行一个插入的sql语句
  48. // db.execSQL("update info set phone='139999999'where name='abc'");
  49. ContentValues values = new ContentValues();
  50. values.put("phone","120");
  51. int info = db.update("info", values, "name=?", new String[]{"lisi"});
  52. Toast.makeText(this, "更新了"+info+"行", Toast.LENGTH_SHORT).show();
  53. //3.当db对象用完后 需要关闭
  54. db.close();
  55. }
  56. //点击按钮实现向数据库 查询记录 其实就是执行一个插入的sql语句
  57. public void click4(View view) {
  58. //1. 第一次是创建数据库 第二次调用就是打开数据库
  59. SQLiteDatabase db = myOpenHelper.getReadableDatabase();
  60. //2.执行一个插入的sql语句 当执行查询sql语句的时候不能使用execSQL方法 因为这个方法返回值是void
  61. // Cursor cursor = db.rawQuery("select * from info", null); id name phone
  62. /**
  63. * 参数1:表名
  64. * 参数2 :代表要查询的列 new String[]{"id","name","phone"} null什么也不写就不知道要查什么 默认查所有
  65. * 参数3:查询条件 没有查询条件 ?
  66. * 参数4: 对条件占位
  67. * 参数5:group by 分组 不分组
  68. * 参数6:having null
  69. */
  70. Cursor cursor = db.query("info", null, null, null, null, null, null, null);
  71. //3.移动光标把数据取出来
  72. if (cursor!=null){
  73. while (cursor.moveToNext()){
  74. //4.取出对应列的值 列的索引 从0开始
  75. // int id = cursor.getInt(0);
  76. String id = cursor.getString(0);
  77. String name = cursor.getString(1);
  78. String phone = cursor.getString(2);
  79. System.out.println("id:"+id+"---"+name+"---"+phone);
  80. }
  81. }
  82. //3.当db对象用完后 需要关闭
  83. db.close();
  84. }
 
6.事务
什么是事务:事务就是执行一段逻辑 要么同时成功 要么同时失败. 银行转账. 张三给李四转账    张三账户-100 李四账号+100
sqlite3    指令打开数据库  sqlite3 Account.db  如何改变dos编码  chcp 936(gbk) 65001(utf-8) 
 
  
  1. public void click(View view) {
  2. //1.先开启事务 //当硬盘满的时候 只能调用读
  3. SQLiteDatabase db = myOpenHelper.getReadableDatabase();
  4. //2.开启事务
  5. db.beginTransaction();
  6. try {
  7. //代表你要实现的逻辑 张三-100 李四+ 100
  8. db.execSQL("update info set money= money-200 where name=?",new String[] { "张三" });
  9. int i = 10/0;
  10. db.execSQL("update info set money= money+200 where name=?",new String[] { "李四" });
  11. //设置一个标记 当这行代码成功的时候 说明事务执行成功 当事务没进行成功 事务会进行一个回滚操作
  12. db.setTransactionSuccessful();
  13. }catch (Exception e){
  14. Toast.makeText(this, "服务器忙!!!!请稍后在转", Toast.LENGTH_SHORT).show();
  15. }finally {
  16. //结束事务
  17. db.endTransaction();
  18. }
  19. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值