如何读取现成的sqlLite数据库

本文介绍如何在Windows Phone 8 (WP8) 平台上使用SQLite进行数据库操作,包括数据库复制、数据查询等关键步骤,并提供具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、添加右键引用NUGet包 安装VICI CoolStorage

2、此时可以看到引用中多两个文件Vici.CoolStorage.WP8 和Vici.Core.WP8

3、

  public class SQLite
    {

        private static SQLite _instance;

        public static SQLite getInstance()
        {
            if (_instance == null)
                _instance = new SQLite();
            return _instance;
        }

        public SQLite()
        {
        }


        ///// <summary>
        ///// 通过!iStorage.FileExists(fn)保证 程序第一次
        ///// 运行的时候才会将数据库复制
        ///// 到隔离存储空间中,
        ///// fn为复制的数据库路径及名称
        ///// </summary>
        ///// <param name="fn"></param>
        //private void move(string fn)
        //{
        //    //StreamResourceInfo sr = Application.GetResourceStream(new Uri(fn, UriKind.Relative));
        //    IsolatedStorageFile iStorage = IsolatedStorageFile.GetUserStoreForApplication();
        //    if (!iStorage.FileExists(fn))
        //    {
        //        using (var outputStream = iStorage.OpenFile(fn, System.IO.FileMode.CreateNew))
        //        {
        //            byte[] buffer = new byte[10000];

        //            for (; ; )
        //            {
        //                int read = sr.Stream.Read(buffer, 0, buffer.Length);

        //                if (read <= 0)
        //                    break;

        //                outputStream.Write(buffer, 0, read);
        //            }
        //        }
        //    }
        //}

        /// <summary>
        /// 将文件存储到独立存储空间
        /// </summary>
        /// <param name="assemblyName">项目名</param>
        /// <param name="dbName">文件名</param>
        private void CopyFromContentToStorage(string assemblyName, String dbName)
        {
            IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
            System.IO.Stream src = Application.GetResourceStream(new Uri("/" + assemblyName + ";component/DataBase/" + dbName, UriKind.Relative)).Stream;
            IsolatedStorageFileStream dest = new IsolatedStorageFileStream(dbName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write, store);
            src.Position = 0;
            CopyStream(src, dest);
            dest.Flush();
            dest.Close();
            src.Close();
            dest.Dispose();
        }

        /// <summary>
        /// 复制流
        /// </summary>
        /// <param name="input"></param>
        /// <param name="output"></param>
        private static void CopyStream(System.IO.Stream input, IsolatedStorageFileStream output)
        {
            byte[] buffer = new byte[32768];
            long TempPos = input.Position;
            int readCount;
            do
            {
                readCount = input.Read(buffer, 0, buffer.Length);
                if (readCount > 0)
                {
                    output.Write(buffer, 0, readCount);
                }
            } while (readCount > 0);
            input.Position = TempPos;
        }

 

        /// <summary>
        /// 查询区域信息表中的所有数据信息
        /// </summary>
        /// <param name="sTableName">表名称</param>
        /// <param name="sWhere">查询条件</param>
        /// <param name="sOrder"></param>
        /// <returns></returns>
        public CSGenericRecordList queryAllData(String sSelect, String sTableName, String sWhere, String sOrder)
        {
             string strSql = string.Empty;

            strSql += "SELECT " +sSelect+" FROM " + sTableName;

            if (!sWhere.Equals(""))
            {
                strSql = strSql + " WHERE " + sWhere;
            }
            if (!sOrder.Equals(""))
            {
                strSql=strSql+" ORDER BY "+sOrder;
            }

            //move(fn);

            CopyFromContentToStorage("PingAn_WP", "FinancialTel.db");

            //设置使用的数据库
            CSConfig.SetDB("FinancialTel.db");

            CSGenericRecordList arealist = CSDatabase.RunQuery(strSql);

            return arealist;

        }
    }  

4、 调用

 protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            SQLite sqlLite = new SQLite();
            CSGenericRecordList cslis = sqlLite.queryAllData("distinct level2,tel", "pingan", "level3=''", "sort");
            lb_Main.ItemsSource = from cs in cslis select new PingAn_Model(cs["level2"].ToString(), cs["tel"].ToString());

            //PingAn_Model是一个对象
            base.OnNavigatedTo(e);
        }

<think>嗯,用户问的是如何在Spring Boot中使用JDBC读取SQLite数据库。首先,我需要回想一下Spring Boot整合JDBC的一般步骤,以及SQLite的配置方式。 首先,Spring Boot通常通过JDBC或者Spring Data JPA来操作数据库。用户提到的是JDBC,所以应该用JdbcTemplate的方式。那首先需要添加相关的依赖。SQLite的JDBC驱动可能不在Spring Boot的起步依赖里,所以得找Maven仓库里的SQLite JDBC依赖,比如org.xerial的那个。 然后,配置数据源。SQLite是文件数据库,所以数据源URL应该是jdbc:sqlite:加上数据库文件的路径。在application.properties里设置spring.datasource的各个属性,不过要注意,Spring Boot默认可能使用HikariCP,而SQLite可能需要配置一些特殊的属性,比如关闭连接池或者设置其他参数,因为SQLite是单线程的,连接池可能不适用。这时候可能需要手动配置DataSource Bean,避免使用连接池。 接下来,用户可能需要示例代码,比如创建JdbcTemplate,然后执行查询。比如用jdbcTemplate.queryForList或者query方法,将结果映射成对象或者Map。这里可以举一个简单的查询例子,比如查询用户表的数据。 还有可能需要初始化数据库,比如用schema.sql和data.sql,或者配置Spring Boot在启动时创建数据库文件。不过SQLite如果文件不存在的话会自动创建,所以可能不需要特别的初始化步骤,除非需要建表。 另外,可能会遇到驱动类的问题,需要确认SQLite的驱动类名是否正确,通常是org.sqlite.JDBC。在数据源配置里要指定driver-class-name。 用户可能还会遇到问题,比如ClassNotFoundException,这时候可能是依赖没加对。或者数据库文件路径的问题,比如权限不足或者路径错误。需要提醒用户检查路径是否正确,是否有读写权限。 还有事务管理的问题,不过用JdbcTemplate的话,默认的事务管理可能够用,但SQLite的事务处理可能需要注意,尤其是在并发情况下,可能需要配置为单连接访问。 总结下来,步骤应该是:添加依赖,配置数据源,使用JdbcTemplate操作数据库,处理可能的配置问题。需要把这些步骤用简单的代码示例说明,让用户能够跟着做。同时提醒可能遇到的坑,比如驱动类、文件路径、连接池的问题。</think>在 Spring Boot 中使用 JDBC 读取 SQLite 数据库的步骤如下: --- ### **1. 添加依赖** 在 `pom.xml` 中引入 SQLite JDBC 驱动和 Spring Boot JDBC 支持: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.42.0.0</version> <!-- 使用最新版本 --> </dependency> ``` --- ### **2. 配置数据源** 在 `application.properties` 中配置 SQLite 数据库路径(假设数据库文件为 `test.db`): ```properties # SQLite 配置 spring.datasource.url=jdbc:sqlite:test.db spring.datasource.driver-class-name=org.sqlite.JDBC # 由于 SQLite 无需用户名密码,直接留空 spring.datasource.username= spring.datasource.password= # 禁用 Hikari 连接池(SQLite 不支持并发连接池) spring.datasource.hikari.maximum-pool-size=1 ``` --- ### **3. 创建实体类** 定义一个简单的 Java 实体类(例如 `User`): ```java public class User { private Long id; private String name; // 省略 getter/setter 和构造方法 } ``` --- ### **4. 使用 JdbcTemplate 操作数据库** 通过 `JdbcTemplate` 执行 SQL 查询: ```java import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @Repository public class UserRepository { private final JdbcTemplate jdbcTemplate; public UserRepository(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } // 查询所有用户 public List<User> findAll() { return jdbcTemplate.query( "SELECT * FROM users", (rs, rowNum) -> new User( rs.getLong("id"), rs.getString("name") ) ); } // 插入用户 public void insertUser(User user) { jdbcTemplate.update( "INSERT INTO users (name) VALUES (?)", user.getName() ); } } ``` --- ### **5. 初始化数据库(可选)** 在 `src/main/resources` 下创建 `schema.sql` 初始化表结构: ```sql CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL ); ``` --- ### **6. 测试代码** 编写测试类验证功能: ```java @SpringBootTest public class UserRepositoryTest { @Autowired private UserRepository userRepository; @Test public void testFindAll() { List<User> users = userRepository.findAll(); users.forEach(user -> System.out.println(user.getName())); } } ``` --- ### **常见问题** 1. **数据库文件路径问题** - 如果使用相对路径(如 `jdbc:sqlite:test.db`),文件会生成在项目根目录。 - 绝对路径示例:`jdbc:sqlite:/tmp/test.db` 2. **连接池冲突** SQLite 不支持多线程连接池,需设置 `maximum-pool-size=1` 或禁用连接池。 3. **驱动异常** 确保依赖版本正确,避免 `ClassNotFoundException: org.sqlite.JDBC`。 --- 通过以上步骤,即可在 Spring Boot 中实现基于 JDBC 的 SQLite 数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值