java程序中需要从两个数据库中同时查询数据,应该怎么弄?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序中需要从两个数据库中同时查询数据,应该怎么弄?相关的知识,希望对你有一定的参考价值。

两个办法,一是建两个数据库链接将查到的内容存到内存中再筛选,二是建两个数据库链接将查到内容存到第三个表中再查第三表。看你自己怎么喜欢怎么做了。 参考技术A 使用两个各jdbc配置来获取不同connection,然后分别查询,如果你想将处理结果进行合并,只能在java程序里做。 参考技术B sql2000的用的是msbase、mssqlserver和msutil这三个jar包
连接用的是
string
driver="com.microsoft.jdbc.sqlserver.sqlserverdriver";
string
url="jdbc:microsoft:sqlserver://localhost:1433;databasename=test";
string
username="sa";
string
password="123";
sql2005中用的是sqljdbc.jar包
连接用的是
class.forname("com.microsoft.sqlserver.jdbc.sqlserverdriver").newinstance();
string
url="jdbc:sqlserver://localhost:1433;integratedsecurity=true;databasename=test";
string
user=
"sa";
string
password="123";
多试试一定能成功
参考技术C 只能创建两个Connection,分别查询,
然后在java中处理相连关系,
重新组合结果集。
参考技术D 建两个数据库连接池。

数据没有从我的 java 程序插入到我的数据库中

【中文标题】数据没有从我的 java 程序插入到我的数据库中【英文标题】:Data is not inserting in my database from my java program 【发布时间】:2021-03-11 12:58:21 【问题描述】:

在我的 java 程序运行后,表单将在表单中提供详细信息后出现,它应该将该数据放入我的数据库中,但每次提供数据后,它只在所有行中显示 #Deleted。 在编译和运行 java 文件期间,我的插入查询或数据库连接是否有任何问题,它没有显示任何类型的错误或警告。

import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
@SuppressWarnings("deprecation")
public class Anpr extends JFrame implements ActionListener
            ImageIcon icon; 
            ImageIcon img3;
            JLabel imglab3,label3,label4,label5,label6,label7,label8,label9,label10;
            Dimension dimension;
            JTextField pid,name,cno,age,bgrp,addr,anydis;
            JComboBox<String> gen; 
     Anpr()    
                dimension = Toolkit.getDefaultToolkit().getScreenSize();      
                int x=(int)((dimension.getWidth() - 650)/2);
                int y=(int)((dimension.getHeight() - 650)/2);
                setLocation(x, y);
                setSize(600,600);
                setLayout(null);
                setUndecorated(true);
          //      setDefaultCloseOperation(EXIT_ON_CLOSE);
                icon = new ImageIcon("image/medical-record.png");
                setIconImage(icon.getImage());
                setTitle("Add New Patient Record");
                setResizable(false);
                label3 = new JLabel("Patient ID");
                label3.setBounds(150,50,80,30);
                label4 = new JLabel("Name");
                label4.setBounds(150,90,80,30);
                label5 = new JLabel("Contact No");
                label5.setBounds(150,130,80,30);
                label6 = new JLabel("Age");
                label6.setBounds(150,170,80,30);
                label7 = new JLabel("Gender");
                label7.setBounds(150,210,80,30);
                label8 = new JLabel("Blood Group");
                label8.setBounds(150,250,80,30);
                label9 = new JLabel("Address");
                label9.setBounds(150,290,80,30);
                label10 = new JLabel("Any Major Disease Suffered Earlier");
                label10.setBounds(150,330,200,30);
                add(label3);
                add(label4);
                add(label5);
                add(label6);
                add(label7);
                add(label8);
                add(label9);
                add(label10);
                JButton btnsa=new JButton("Save");
                JButton btnco=new JButton("Close");
                btnsa.setBounds(150,450,80,30);
                btnco.setBounds(350,450,80,30);
                add(btnsa);
                add(btnco);
                btnsa.addActionListener(this);
                btnco.addActionListener(this);
                pid = new JTextField();
                pid.setBounds(270,50,180,30);
                name = new JTextField();
                name.setBounds(270,90,180,30);
                cno = new JTextField();
                cno.setBounds(270,130,180,30);
                age = new JTextField();
                age.setBounds(270,170,180,30);
                gen = new JComboBox<String>(new String[] "Male","Female","Other");
                gen.setBounds(270,210,180,30);
                bgrp = new JTextField();
                bgrp.setBounds(270,250,180,30);
                addr = new JTextField();
                addr.setBounds(270,290,180,30);
                anydis = new JTextField();
                anydis.setBounds(150,370,300,30);
                 add(pid);
                 add(name);
                 add(cno);
                 add(age);
                 add(gen);
                 add(bgrp);
                 add(addr);
                 add(anydis);
             //   Background image 
                img3 = new ImageIcon("image/m_back2.jpg");
                imglab3 = new JLabel(img3);
                imglab3.setSize(600,600);
                add(imglab3);
            
            public void actionPerformed(ActionEvent ael)
                    String str1 =ael.getActionCommand();
                    String PatientID =pid.getText();
                    String Pname =name.getText();
                    String ContactNumber =cno.getText();
                    String ages=age.getText();
                    String gender=(String)gen.getSelectedItem();
                    String bloodGroup=bgrp.getText();
                    String address=addr.getText();
                    String anyMajorDisease=anydis.getText(); 
                    if(str1.equals("Save"))
                    try 
                       String url="jdbc:ucanaccess://Hospital.accdb";
                       Connection connection=DriverManager.getConnection(url);
                       Statement st=connection.createStatement();
                       st.executeUpdate("insert into Patient(PatientID,Pname,ContactNumber,ages,gender,bloodGroup,address,anyMajorDisease) values('"+PatientID+"','"+Pname+"','"+ContactNumber+"','"+ages+"','"+gender+"','"+bloodGroup+"','"+address+"','"+anyMajorDisease+"')");
                       JOptionPane.showMessageDialog(null,"Added New Patient Record Successfull");
                        catch(Exception ex)
                                 ex.printStackTrace();
                            
                    
                    else if(str1.equals("Close"))
                       System.exit(0);     
                      
            
    public static void main(String[] args)
         Anpr apr=new Anpr();
        apr.setVisible(true); 
     
    

【问题讨论】:

Java 命名约定的类以大写字母开头;方法和变量以小写字母开头。 你更新了表,但我可以想象一个成功的更新被回滚。我认为如果您使用准备好的语句会更好。 您应该学会在语句中使用参数,请参阅this article 以获得更安全、更易读且总体上更好的代码。您还需要验证任何强制值。你有例外吗? 好的,现在我的数据正在插入到我的数据库中,但每次它都会自动添加#Delete,如上图行,因为每次单击保存按钮以备份数据库中的详细信息时它都会引发警告 【参考方案1】:

#Deleted 是一条 Microsoft Access 应用程序错误消息,可能有许多潜在原因。当所有数据都显示为#deleted 时,通常是主键值超出MS Access 支持范围的问题。

检查您插入到表中的所有值,并确保它们不超过指定数据类型的最大大小(例如,在 VARCHAR 的情况下字符过多,或超出范围的数值)。还要确保不要在需要数值的地方使用字符串值(使用的 JDBC 驱动程序可能会将字符串转换为意外的数值)

【讨论】:

以上是关于java程序中需要从两个数据库中同时查询数据,应该怎么弄?的主要内容,如果未能解决你的问题,请参考以下文章

Java -SQL 查询从两个表中提取数据?

通过 RESTful API 查询 SPARK 作业产生的数据

如何在 SQL Server 中同时连接两个数据库?

在基于 Java 的 Web 应用程序中从数据库到前端的实时数据复制

如何在 Java 中同时设置客户端-服务器程序和数据库?

SQL多表链接查询、嵌入SELECT语句的子查询技术