当前位置: 首页 > 面试题库 >

Java-将SQL语句存储在外部文件中

姚钊
2023-03-14
问题内容

我正在寻找在外部文件中存储SQL语句的Java库/框架/技术。支持团队(包括DBA)应该能够(稍微)更改语句,以使它们保持同步,以防数据库模式更改或出于调整目的。

要求如下:

  • 该文件必须可从Java应用程序读取,而且必须由支持团队进行编辑,而无需高级编辑器
  • 理想情况下,文件应为纯文本格式,但XML也可以
  • 允许存储/检索DML以及DDL语句
  • 可以在以后的阶段添加新语句(应用程序足够灵活,可以选择并执行它们)
  • 语句可以分组(并由应用程序分组执行)
  • 语句应允许参数

笔记

  • 一旦检索到,这些语句将使用Spring的JDBCTemplate执行
  • 不会使用Hibernate或Spring的IOC容器

到目前为止,我设法找到了以下Java库,这些库使用外部文件存储SQL语句。但是,我主要对存储感兴趣,而不是对隐藏所有JDBC“复杂性”的库感兴趣。

  • Axamol SQL库

样本文件内容:

    <s:query name="get_emp">
  <s:param name="name" type="string"/>
  <s:sql databases="oracle">
    select    *
    from      scott.emp
              join scott.dept on (emp.deptno = dept.deptno)
    where     emp.ename = <s:bind param="name"/>
  </s:sql>
</s:query>
  • iBATIS

样本文件内容:

    <sqlMap namespace="Contact"">
    <typeAlias alias="contact"
        type="com.sample.contact.Contact"/">
    <select id="getContact"
        parameterClass="int" resultClass="contact"">
            select CONTACTID as contactId,
                   FIRSTNAME as firstName,
                   LASTNAME as lastName from
                   ADMINISTRATOR.CONTACT where CONTACTID = #id#
    </select>
</sqlMap>
<insert id="insertContact" parameterClass="contact">
INSERT INTO ADMINISTRATOR.CONTACT( CONTACTID,FIRSTNAME,LASTNAME)
        VALUES(#contactId#,#firstName#,#lastName#);
 </insert>
<update id="updateContact" parameterClass="contact">
update ADMINISTRATOR.CONTACT SET
FIRSTNAME=#firstName# ,
LASTNAME=#lastName#
where contactid=#contactId#
</update>
<delete id="deleteContact" parameterClass="int">
DELETE FROM ADMINISTRATOR.CONTACT WHERE CONTACTID=#contactId#
</delete>
  • WEB4J

    -- This is a comment
    

    ADD_MESSAGE {
    INSERT INTO MyMessage – another comment
    (LoginName, Body, CreationDate)
    – another comment
    VALUES (?,?,?)
    }

    – Example of referring to a constant defined above.
    FETCH_RECENT_MESSAGES {
    SELECT
    LoginName, Body, CreationDate
    FROM MyMessage
    ORDER BY Id DESC LIMIT ${num_messages_to_view}
    }

谁能推荐经过尝试和测试的解决方案?


问题答案:

只需使用一个键值对创建一个简单的Java属性文件,如下所示:

users.select.all = select * from user

在您的DAO类中声明一个Properties类型的私有字段,并使用Spring配置将其注入,该配置将从文件中读取值。

UPDATE :如果要在多行中支持SQL语句,请使用以下表示法:

users.select.all.0 = select *
users.select.all.1 = from   user


 类似资料:
  • 问题内容: 我使用的是带有代表数据库连接。 现在,我需要一个相当长(几行)的sql查询,我希望将其保存在classpath中的文件中,而不是直接在代码内部。 但是我怎么能做到这一点呢?我的仓库如下: 问题答案: 如果你的项目设置具有资源文件夹,请在文件下创建并将键值对添加为。spring数据将恢复。 对于更长的查询,最好使用带有CDATA标签的属性文件

  • 问题内容: 我的应用程序( Android API 15 )制作图片并将其存储在内部存储器的文件夹中。现在,我想将此文件复制到外部存储中的另一个文件夹,例如。我尝试了以下方法: 方法1: 方法2: 方法3: 这些方法都不能解决我的任务。在检查了许多相关主题之后,我发现的唯一建议是验证 在和它确实存在。 该 方法#1 完成执行,但没有文件夹和文件被复制。 在 方法#2 ,应用程序失败,异常的,但对象

  • 这些方法都不能解决我的任务。中检查了一些相关主题,我发现的唯一建议是验证 在中,并且它仍然存在。 方法#1完成执行,但没有复制文件夹和文件。 因为这是我迈向Android的第一步,我觉得我错过了一些小东西。请告诉我,如何在Android中将文件从一个文件夹复制到另一个文件夹,包括文件从内部内存移动到外部内存。

  • 我试图使用Adobe reader读取从服务器下载的pdf文件,但问题是当我将其存储在内部存储时,其他应用程序无法读取该文件。现在我想知道如何将此文件复制到外部存储(/sdcard/)中,以便pdf查看器可以查看。 由于安全原因,我将文件存储在内部存储,然后删除外部存储的文件。 我的问题是如何复制保存在内部存储中的文件,而不使用raw或将其放入InputStream中的资产。

  • 问题内容: 兼容JDBC的应用程序应在哪里存储其SQL语句,为什么? 到目前为止,我设法确定了这些选项: 硬编码在业务对象中 嵌入在SQLJ子句中 封装在单独的类中,例如 数据访问对象 驱动元数据(将对象模式与数据模式分离-在元数据中描述它们之间的映射) 外部文件(例如属性或资源文件) 存储过程 各自的“优点”和“缺点”是什么? 应该将SQL代码视为“代码”还是“元数据”? 存储过程应该仅用于性能

  • 问题内容: 如何复制到外部存储保持,以便以后可以共享首选项。 试图读取并另存为一个文件,创建了类型,但我需要一个。想过遍历应用程序的内部存储和复制文件,然后将其放入外部存储,但这可能太复杂了。 真的很想知道是否存在一种简单而明智的方式来传递`sharedpreferences。 问题答案: 使用此代码, 并取回它, 注意 使用此代码只能处理字符串类型首选项,