sqlite-集成和运用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、sqlite是什么?

  • 一种嵌入式数据库,相比mysql等更轻量,但是不需要安装服务器,直接引入jar即可使用,数据存储在本地文件中。多应用于本地文件数据存储,智能设备应用,手机设备应用,全面支持sql,操作方便。

二、使用步骤

1.引入jar

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.21.0.1</version>
</dependency>

2.代码编写

  • 项目结构

    在这里插入图片描述

  • Column.java

    package com.tsn.serv.common.sqlite;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Retention(RetentionPolicy.RUNTIME) 
    @Target(ElementType.FIELD) // 声明可以使用该注解的目标类型为在方法中使用
    public @interface Column {
    	
    	String type() default "string";
    	
    	int length();;
    }
    
  • SqliteManager.java

    package com.tsn.serv.common.sqlite;
    
    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.text.StringSubstitutor;
    
    public class SqliteManager {
    	
    	private Connection connection;
    	
    	private SqliteManager(Connection connection){
    		this.connection = connection;
    	}
    	
    	public static class Single {
    		
    		private static SqliteManager sqliteManager = null;
    		
    		static {
    			
    			try {
    				sqliteManager = new SqliteManager(getConnection());
    			} catch (ClassNotFoundException | SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    		}
    		
    		public static Connection getConnection() throws ClassNotFoundException, SQLException{
    			Class.forName("org.sqlite.JDBC");
    	        return DriverManager.getConnection("jdbc:sqlite:data/node.db");
    		}
    		
    		public static SqliteManager build(){
    			return sqliteManager;
    		}
    	}
    	
    	public static SqliteManager build(){
    		return Single.build();
    	}
    	
    	public void createTable(String tableName, String className) throws SQLException, SecurityException, ClassNotFoundException {
    		StringBuffer sql = new StringBuffer("create table if not exists ");
    		sql.append(tableName).append("(");
            String reg = " ";
            Field[] columnFields = Class.forName(className).getDeclaredFields();
            for (Field field : columnFields) {
    		  //设置反射对象属性访问权限
              field.setAccessible(true);
              
              Column col = field.getAnnotation(Column.class);
              
              if (col != null) {
            	  sql.append(reg + field.getName() + " " + col.type() + "(" + col.length() + ") ");
            	  continue;
              }
              
              
    		  //通过获得的字段,获取字段类型,和字段名,来定义创建表的字段名和字段类型
              if (field.getType().getName().equals(Long.class.getName())) {
            	  sql.append(reg + field.getName() + " bigint(20) ");
              } else if (field.getType().getName().equals(String.class.getName())) {
            	  sql.append(reg + field.getName() + " varchar(255) ");
              } else if (field.getType().getName().equals(Date.class.getName())) {
            	  sql.append(reg + field.getName() + " datetime ");
              } else {
            	  sql.append(reg + field.getName() + " int(11) ");
              }
              reg = ",";
          }
            sql.append(")");
            Statement stmt = connection.createStatement();
            stmt.executeUpdate(sql.toString());
    	}
    	
    	public int add(String addSql, Object obj) throws SQLException, InstantiationException, IllegalAccessException{
    		Statement stmt = connection.createStatement();
    		StringSubstitutor sub = new StringSubstitutor(objectToMap(obj));
    		String resolvedString = sub.replace(addSql);
    	    return stmt.executeUpdate(resolvedString);
        }
    	
    	public int update(String sql, Object obj) throws Exception {
    		Statement stmt = connection.createStatement();
    		StringSubstitutor sub = new StringSubstitutor(objectToMap(obj));
    		String resolvedString = sub.replace(sql);
    	    return stmt.executeUpdate(resolvedString);
    	}
    	
    	public List<?> queryList(String sql, Class<?> cls) throws SQLException, IllegalArgumentException, IllegalAccessException, InstantiationException{
            Statement stmt = connection.createStatement();
            stmt.setQueryTimeout(30); // set timeout to 30 sec.
            ResultSet rs = stmt.executeQuery(sql);
            
            List<Object> result = new ArrayList<Object>();
            while ( rs.next() ) {
            	
            	Object objTemp = cls.newInstance();
            	
            	Field[] fileds = objTemp.getClass().getDeclaredFields();
            	
            	for (Field fd : fileds) {
            		fd.setAccessible(true);
            		setValue(objTemp, fd, rs);
            	}
            	
            	result.add(objTemp);
            	
             }
            
            return result;
                
         }
    	
    	private void setValue(Object obj, Field fd, ResultSet rs) throws IllegalArgumentException, IllegalAccessException, SQLException{
    		String filedName = fd.getName();
    		if (fd.getType().getName().equals("java.lang.String")) {
    			fd.set(obj, rs.getString(filedName));
    		}else if (fd.getType().getName().equals("java.lang.Integer") || fd.getType().getName().equals("int")) {
    			fd.set(obj, rs.getInt(filedName));
    		}else if (fd.getType().getName().equals("java.lang.Double") || fd.getType().getName().equals("double")) {
    			fd.set(obj, rs.getDouble(filedName));
    		}else if (fd.getType().getName().equals("java.lang.Float") || fd.getType().getName().equals("float")) {
    			fd.set(obj, rs.getFloat(filedName));
    		}else if (fd.getType().getName().equals("java.lang.Long") || fd.getType().getName().equals("long")) {
    			fd.set(obj, rs.getLong(filedName));
    		}else if (fd.getType().getName().equals("java.lang.Short") || fd.getType().getName().equals("short")) {
    			fd.set(obj, rs.getShort(filedName));
    		}else if (fd.getType().getName().equals("java.lang.Byte") || fd.getType().getName().equals("byte")) {
    			fd.set(obj, rs.getByte(filedName));
    		}else if (fd.getType().getName().equals("java.lang.Boolean") || fd.getType().getName().equals("boolean")) {
    			fd.set(obj, rs.getBoolean(filedName));
    		}
    	}
    
        public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
            Map<String, Object> map = new HashMap<String,Object>();
            Class<?> clazz = obj.getClass();
            for (Field field : clazz.getDeclaredFields()) {
                field.setAccessible(true);
                String fieldName = field.getName();
                Object value = field.get(obj);
                map.put(fieldName, value);
            }
            return map;
        }
    }
    
  • 调用demo

    public class TestSqliteDao {
    
    	private SqliteManager sqliteManager = SqliteManager.build();
    
    	public List<PathInfo> queryPathList() {
    		try {
    			@SuppressWarnings("unchecked")
    			List<User> pathInfoList = (List<User>) sqliteManager.queryList("select col1, col2 from t_user", User.class);
    			return pathInfoList;
    		} catch (Exception e) {
    			return null;
    		}
    		
    	}
    }
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio是一种集成开发环境,用于开发Android移动应用程序。而学生信息管理SQLite是一种使用SQLite数据库的学生信息管理系统。 在Android Studio中,我们可以创建一个新项目来建立学生信息管理系统。首先,我们需要创建一个SQLite数据库,并定义学生的相关信息,如学生ID、姓名、年龄、性别等。然后,我们可以使用SQLiteOpenHelper类来管理数据库的创建和版本控制。 在应用程序的界面上,我们可以使用各种Android组件来展示学生的信息,如ListView或RecyclerView来展示学生的列表,EditText和Button来添加和修改学生的信息。我们还可以使用SQL语句来进行数据库的查询和更新操作,如通过姓名查询学生、修改学生的年龄等。 为了提高用户体验,我们还可以使用一些Android Studio提供的功能和类库,如Shared Preferences来保存用户的配置信息,如排序方式、模糊搜索等。我们还可以使用Android的模板和样式来美化界面,使用户操作更加友好和直观。 总而言之,在Android Studio中,我们可以使用SQLite数据库来实现学生信息管理系统。通过创建数据库、定义表结构、使用SQL语句进行数据库操作以及合理运用Android Studio提供的功能和类库,我们可以开发一个功能完善、易用且美观的学生信息管理系统。 ### 回答2: 在Android Studio中使用SQLite数据库进行学生信息管理非常简单。首先,我们需要在项目中创建一个数据库和表来存储学生的信息。可以使用SQLiteOpenHelper类来创建数据库和表。 在创建数据库时,需要定义数据库的名称和版本号,然后在onCreate()方法中创建表,并定义表的列。例如,可以创建一个名为"students"的表,包含id、姓名和年龄这三个列。 在应用程序的主界面上,可以使用EditText和Button来输入和保存学生的信息。当用户点击保存按钮时,首先获取EditText中的学生信息并存储在相应的变量中。然后,创建一个ContentValues对象,将学生信息插入到数据库表中。 下一步是显示已保存的学生信息。可以使用RecyclerView来显示学生列表。在RecyclerView的适配器中查询数据库,并将查询结果显示在列表中。可以将学生的姓名和年龄显示在列表项中,并为每个列表项添加了一个点击事件监听器。 在点击学生列表项时,可以使用Intent来传递学生信息到下一个界面,以便进行学生详细信息的展示和编辑。可以在目标界面使用TextView和EditText来显示和编辑学生信息。并且还可以添加一个删除按钮,让用户可以删除存储在数据库中的学生信息。 总结来说,使用Android Studio进行学生信息管理SQLite数据库是一个简单而有用的应用。通过创建数据库和表、使用适配器将数据展示在RecyclerView中,并使用意图传递数据到其他界面,我们可以轻松地实现学生信息的存储、显示和编辑。 ### 回答3: Android Studio 是一款用于开发 Android 应用程序的集成开发环境。学生信息管理是一个常见的应用场景,可以利用 Android Studio 结合 SQLite 数据库来实现。 首先,在 Android Studio 中创建一个新的项目。在项目的布局文件中,可以设计一个输入学生信息的界面,包括学生的姓名、学号、性别、年龄等信息。 接下来,创建一个 DBHelper 类来管理数据库的创建、更新和操作。通过 SQLiteDatabase 类提供的方法,可以创建数据库、创建表、插入数据、查询数据等。例如,可以创建一个名为 "students" 的表来存储学生的信息,包括学生的姓名、学号、性别、年龄等字段。 在应用程序的逻辑代码中,可以编写增、删、改、查等操作的方法,并与用户界面进行交互。例如,可以编写一个添加学生信息的方法,当用户在界面上输入学生信息并点击提交按钮时,可以将信息通过 DBHelper 类插入到数据库中。另外,也可以编写一个查询学生信息的方法,当用户点击查询按钮时,可以根据输入的条件查询数据库中的学生信息,并在界面上显示查询结果。 此外,还可以使用 RecyclerView 来展示学生信息列表,可以通过适配器将查询到的数据展示在 RecyclerView 中。可以根据学号、姓名等关键字对学生信息进行排序和搜索,并进行相应的响应操作,如删除、修改等。 综上所述,通过使用 Android Studio 和 SQLite 数据库,可以实现学生信息的管理功能。这样的应用程序可以方便地记录和管理学生的基本信息,并支持增、删、改、查等操作,提高学校管理的效率和便利性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值