一、文章背景

关于Lotus Notes查询功能用过的就知道有多烂,用过的都知道。

二、项目效果

点击按钮→弹出窗口→输入条件→查询→选择结果→确定→数据会写界面

三、使用技术

LS2J、Java AWT、JDBC

四、具体实现步骤

4.1、表单字段


字段:MergeSupplierCode
字段:MergeSupplierName

4.2、表单按钮的LotusScript代码

Sub Click(Source As Button)Dim cBasic As New BasicTool   '获取数据库连接信息Dim Session As New NotesSession' --基础数据配置库Dim BasicDB As NotesDatabase' --数据库信息视图Dim DBInfoView As NotesView' --数据库配置记录Dim DBInfo As Notesdocument' --本项目把数据库的连接信息用另外一个Notes数据库里记录着,需要用的时候通过代码实时查,若只是测试,可以直接写死在代码里Set BasicDB = Session.GetDatabase("oa/landworld","Landworld\BaseConfig.nsf")Set DBInfoView = BasicDB.GetView("vwSAPDB")' --要查询的数据库的账号密码信息,' -- DBInfo.IPAdr(0) 数据库IP地址' -- DBInfo.username(0) 数据库用户名' -- DBInfo.password(0) 数据库密码' -- DBInfo.DBName(0) 数据库实例名Set DBInfo = DBInfoView.GetdocumentByKey("DEV",True)Dim Uidoc As NotesUIDocumentDim Ws As New NotesUIWorkspaceDim Curdoc As NotesdocumentSet Db = Session.CurrentDatabaseSet Uidoc = Ws.CurrentDocumentSet Curdoc= Uidoc.DocumentDim jsession As JavaSessionDim jclass As JavaClassDim myObject As JavaObjectDim vender As JavaObjectSet jsession = New JavaSessionSet jclass = jsession.GetClass("Untitled")Set myObject = jclass.CreateObject()' 弹出查询窗口Set vender = myObject.getVender(DBInfo.IPAdr(0),DBInfo.username(0),DBInfo.password(0),DBInfo.DBName(0))If Not Trim(vender.getVenderID()) = "" ThenCurDoc.MergeSupplierCode = vender.getVenderID()End IfIf Not Trim(vender.getVenderName()) = "" ThenCurDoc.MergeSupplierName = vender.getVenderName()End If
End Sub

4.3、后台JAVA脚本库


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/*** 数据库工具类* @author IT**/
public class DBUtil {/*** * @param DBIPAdr 数据库IP地址* @param DBUSN 数据库用户名* @param DBPWD 数据库密码* @param DBName 数据库实例名* @return*/public static Connection getDBconn(String DBIPAdr,String DBUSN,String DBPWD,String DBName){Connection con = null;try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");con = DriverManager.getConnection("jdbc:sqlserver://" + DBIPAdr + ":1433;DatabaseName=" + DBName + "",DBUSN, DBPWD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return con;}/*** 数据库关闭* @param con* @param stmt* @param rst*/public static void close(Connection con,Statement stmt,ResultSet rst){try {if (null != rst) {rst.close();}if (null != stmt) {stmt.close();}if (null != con) {con.close();}} catch (Exception e) {System.out.println("数据库关闭异常:"+e.toString());}}/*** 数据库关闭* @param con* @param stmt*/public static void close(Connection con,Statement stmt){try {if (null != stmt) {stmt.close();}if (null != con) {con.close();}} catch (Exception e) {System.out.println("数据库关闭异常:"+e.toString());}}
}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;import javax.swing.JOptionPane;/*** * @author IT**/
public class VenderServer {/*** 查询供应商信息* @param CardCode* @param CardName* @return* @throws SQLException*/public List<Vender> getVenders(String CardCode,String CardName,String DBIPAdr,String DBUSN,String DBPWD,String DBName) {List<Vender> res = new ArrayList<Vender>();try {String sql = "select CardCode ,CardName,CardType from OCRD WHERE CardType = 'S' ";if (StringUtil.isValid(CardCode)) {sql = sql + "AND CardCode LIKE '%" + CardCode + "%' ";}if (StringUtil.isValid(CardName)) {sql = sql + "AND CardName LIKE '%" + CardName + "%' ";}Connection con = DBUtil.getDBconn(DBIPAdr,DBUSN,DBPWD,DBName);Statement stmt = con.createStatement();ResultSet rst = stmt.executeQuery(sql);while (rst.next()) {res.add(new Vender(rst.getString("CardCode"), rst.getString("CardName")));}DBUtil.close(con, stmt, rst);} catch (SQLException e) {javax.swing.JOptionPane.showMessageDialog(null,"VenderServer getVenders()"+e.toString(), "错误提示",JOptionPane.ERROR_MESSAGE);}return res;}}
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;public class Untitled {// 窗口宽高private static int windowWidth = 800;private static int windowHeigh = 500;// 屏幕宽高 默认值private int screenWidth = 1024;private int screenHeigh = 768;// 结果表的表头private static String[] resultTableHeader = new String[] {"序号","编码","描述"};// 结果表格private JTable resultTable = null;private DefaultTableModel resultTableModel = null;// 编码输入,描述输入private JTextField codeField,nameField = null;// 返回结果(这样写页面上不报错)Vender vender = new Vender("","");/*** 供应商信息查询弹窗* @param DBIPAdr 数据库IP* @param DBUSN 数据库账号* @param DBPWD 数据库密码* @param DBName 数据库实例名* @return*/public Vender getVender(final String DBIPAdr,final String DBUSN,final String DBPWD,final String DBName) {JPanel content = new JPanel();content.setLayout(new BorderLayout());// 北JPanel northP = new JPanel(new FlowLayout());JPanel northPLeft = new JPanel(new GridLayout(2,1));JPanel northPCenter = new JPanel(new GridLayout(2,1));JPanel northPRigtt = new JPanel(new FlowLayout());JLabel codeLabel = new JLabel("供应商代码:  ");northPLeft.add(codeLabel);JLabel nameLabel = new JLabel("供应商描述:  ");northPLeft.add(nameLabel);northP.add(northPLeft);codeField = new JTextField(55);northPCenter.add(codeField);nameField = new JTextField(55);northPCenter.add(nameField);northP.add(northPCenter);JButton querBtn = new JButton("查  询");querBtn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {String code = codeField.getText();String name = nameField.getText();if (!StringUtil.isValid(code) && !StringUtil.isValid(name)) {javax.swing.JOptionPane.showMessageDialog(null,"供应商代码和供应商描述不能都为空!", "错误提示",JOptionPane.ERROR_MESSAGE);return;}VenderServer server = new VenderServer();List<Vender> venders = server.getVenders(code, name,DBIPAdr,DBUSN,DBPWD,DBName);// 清空上一次的记录int rowCount = resultTable.getRowCount();for (int i = 0; i < rowCount; i++) {resultTableModel.removeRow(rowCount - 1 - i);}// 结果展示int i = 0;for (Vender vender : venders) {String[] row = {++i + "",vender.getVenderID(),vender.getVenderName()};resultTableModel.addRow(row);}if (i<=0){javax.swing.JOptionPane.showMessageDialog(null,"按输入条件查询为空!", "消息提示",JOptionPane.INFORMATION_MESSAGE);return;}}});northPRigtt.add(querBtn);northP.add(northPRigtt);content.add(northP,BorderLayout.NORTH);// 中  明细表String date[][] = {};resultTableModel = new DefaultTableModel(date, resultTableHeader);resultTable = new JTable(resultTableModel){private static final long serialVersionUID = 1L;public boolean isCellEditable(int row, int column) { return false;}};resultTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 单选 resultTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // 关闭列宽自动调整resultTable.getColumnModel().getColumn(0).setPreferredWidth(60);resultTable.getColumnModel().getColumn(1).setPreferredWidth(100);resultTable.getColumnModel().getColumn(2).setPreferredWidth(610);JScrollPane eventScroll = new JScrollPane(resultTable);eventScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);eventScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);content.add(eventScroll,BorderLayout.CENTER);// 南JPanel southP = new JPanel(new FlowLayout(FlowLayout.RIGHT));JButton sureBtn = new JButton("确  定");sureBtn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {int selectedRow = resultTable.getSelectedRow();if (-1 == selectedRow){javax.swing.JOptionPane.showMessageDialog(null,"请先选择需要的数据", "警告提示",JOptionPane.WARNING_MESSAGE);return;}String venderCode = resultTableModel.getValueAt(selectedRow, 1).toString();String venderName = resultTableModel.getValueAt(selectedRow, 2).toString();vender.setVenderID(venderCode);vender.setVenderName(venderName);JButton button = (JButton)arg0.getSource();SwingUtilities.getWindowAncestor(button).dispose();}});southP.add(sureBtn);southP.add(new JLabel("  |  "));JButton cancleBtn = new JButton("取  消");cancleBtn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {JButton button = (JButton)arg0.getSource();SwingUtilities.getWindowAncestor(button).dispose();}});southP.add(cancleBtn);content.add(southP,BorderLayout.SOUTH);JDialog dialog = new JDialog();dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);dialog.setModal(true);dialog.setTitle("供应商信息查询窗口");dialog.getContentPane().add(content);dialog.setSize(windowWidth, windowHeigh);dialog.setResizable(false);dialog.pack();Toolkit kit = Toolkit.getDefaultToolkit();Dimension screenSize = kit.getScreenSize();screenWidth = (int)screenSize.getWidth();screenHeigh = (int)screenSize.getHeight();dialog.setLocation(screenWidth/2 - windowWidth/2, screenHeigh/2 - windowHeigh/2);dialog.setLocationRelativeTo(null);dialog.setVisible(true);return vender;}}
/*** String 工具类* @author IT**/
public class StringUtil {/*** 判断字符串是否有效* @param str* @return true:str非空,false:str为null或空白字符串*/public static boolean isValid(String str) {if (null == str || "".equals(str.trim())) {return false;}return true;}
}
/*** 供应商信息* * @author IT* */
public class Vender {private String venderID;private String venderName;public String getVenderID() {return venderID;}public void setVenderID(String venderID) {this.venderID = venderID;}public String getVenderName() {return venderName;}public void setVenderName(String venderName) {this.venderName = venderName;}public Vender(String venderID, String venderName) {super();this.venderID = venderID;this.venderName = venderName;}public Vender() {super();}
}

4.4、表单引入后台JAVA库

Uselsx “*javacon”
Use “QueryVender”

4.5、依赖包及代码

点击下载,该资源不要积分

五、坑

每次修改Java代码后,要重启Notes客户端,包括开发工具

Notes弹窗查询异构系统数据库解决方案相关推荐

  1. 异构系统数据备份解决方案

    一.   用户需求<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ...

  2. c# combobox集合数据不显示_VBA与数据库解决方案:Recordset记录集合的动态查询,并显示结果...

    大家好,今日继续讲解VBA与数据库解决方案的第10讲内容,打开一个指定的数据库记录集,把所得的数据显示到工作表中的方法.今日的内容是和第8讲,第9讲内容是相连续,在第9讲中讲了打开记录集的用的方法是r ...

  3. 排队叫号机控制系统与自助查询终端系统解决方案

    排队叫号机控制系统与自助查询终端系统解决方案 一.需求分析: 随着医疗建设的发展,医院在筹建新业务楼时提出了智能化的要求,营造良好的设施.幽雅的就医环境.提供优质的医疗服务已成为医院运营必不可少的手段 ...

  4. java毕业设计飞机航班信息查询系统源码+系统+数据库+lw文档+调试运行

    java毕业设计飞机航班信息查询系统源码+系统+数据库+lw文档+调试运行 注意:该项目只展示部分功能,如需了解,文末获取源码地址. 临近学期结束,还是毕业设计,你还在做java程序.网络编程.课程设 ...

  5. java毕业设计飞机航班信息查询系统演示视频2021源码+系统+数据库+lw文档+调试运行

    java毕业设计飞机航班信息查询系统演示视频2021源码+系统+数据库+lw文档+调试运行 注意:该项目只展示部分功能,如需了解,文末获取源码地址. 临近学期结束,还是毕业设计,你还在做java程序. ...

  6. 构建施耐德楼控系统数据库后台服务器示例工程二(数据库查询编写)

    构建施耐德楼控系统数据库后台服务器示例工程-(工程创建)记录了一个Spring.Hibernate.Rest的工程如何创建,这篇将简单介绍在这个框架下如何利用注释编程. 1.Spring注释 Spri ...

  7. java毕业设计OTET交通在线查询购票系统Mybatis+系统+数据库+调试部署

    java毕业设计OTET交通在线查询购票系统Mybatis+系统+数据库+调试部署 java毕业设计OTET交通在线查询购票系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S ...

  8. java毕业设计城市公交查询系统Mybatis+系统+数据库+调试部署

    java毕业设计城市公交查询系统Mybatis+系统+数据库+调试部署 java毕业设计城市公交查询系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  9. Java计算机毕业设计天津城建大学教室查询预约管理系统源码+系统+数据库+lw文档

    Java计算机毕业设计天津城建大学教室查询预约管理系统源码+系统+数据库+lw文档 Java计算机毕业设计天津城建大学教室查询预约管理系统源码+系统+数据库+lw文档 本源码技术栈: 项目架构:B/S ...

  10. java毕业设计公益组织登记与查询系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计公益组织登记与查询系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计公益组织登记与查询系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目 ...

最新文章

  1. 关于Warshall、Roy对寻找传递闭包方法的不同表达的探讨
  2. ASP.NET Web 页面生命中的一天
  3. 1.2 什么是神经网络-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
  4. 【opencv】14.cv::cvtColor函数转换颜色空间时使用CV_RGB2BGR与CV_BGR2RGB结果一样的原因
  5. Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
  6. 数据库分组选 第一条
  7. c语言中error c2601,C 语言   dd.cpp(46) : error C2601: 'main' : local function definitions are illegal...
  8. HTTP响应头信息 Content-Disposition 文件的显示或下载
  9. 不可不知的CSS小技巧
  10. C#事件(event)解析(转)
  11. 缓和曲线——回旋曲线的计算
  12. 兼容性视图html页面,浏览器兼容性视图设置在哪
  13. 一个脚本教你快速去除桌面图标烦人的小箭头
  14. 阿里 P9 用 500 多页手册完成双十一高并发秒杀系统,绝了
  15. 20110814炒股日记--关于内外盘【600192长城电工】
  16. 高中数学之向量外积的运用
  17. java自我介绍_口语化java自我介绍
  18. 为什么颤振不是下一件大事
  19. Altium designer 3维显示角度切换
  20. led驱动程序_点亮led(imx6ull)

热门文章

  1. Collected errors: * check_data_file_clashes: Package libustream-openssl wants to install file /home/
  2. css display contents
  3. Redis Master/Salve Replication(主从复制模式)
  4. jQuery DOM操作 实现本地表格查询
  5. 联想计算机打开盖子自动开机,联想笔记本开盖自动开机怎么关闭
  6. JVM之常用的字节码指令(基于《深入理解Java虚拟机》之第六章类文件结构)(下)
  7. 卡贴机变无锁教程_如何让“有锁”iPhone变“无锁”?“有锁”iPhone变“无锁”设置教程...
  8. Vivado中Global和Out-of-context(OOC)综合模式
  9. Python图像处理笔记——形态学处理(skimage.morphology)
  10. Codeforces Round #469 (Div. 2) C. Zebras