当前位置: 首页 > 知识库问答 >
问题:

在eclipse中创建的JAVAFX应用程序中安装到另一台笔记本电脑上后,SQlite DB插入和删除问题

臧欣怿
2023-03-14

我使用Eclipse在JavaFx中创建了一个SQLite数据库。创建和访问数据库的功能如下所示。我使用导出选项创建了可运行的jar。我尝试了两种方法:方法1:使用Inno创建安装程序。然后将应用程序安装在另一台笔记本电脑上进行测试。已成功安装并启动。问题是没有创建数据库。然而,它在Eclipse内部的笔记本电脑中运行得很好。方法2:在创建安装程序时,我在Inno中包含了来自基于Eclipse的文件夹的数据库文件以及应用程序JAR。包含数据库文件的exe安装在另一台笔记本电脑上。安装和应用程序启动成功。问题是显示了数据库中已经存在的表格条目。但是,没有插入新条目和删除现有条目。项目结构如图所示。

    public static Connection getConnection() {      
    Connection conn = null;
    Statement stmt = null;
    try {
            String dbName  = "patientdata";             
            File file = new File (dbName);
             //Class.forName("com.html" target="_blank">mysql.cj.jdbc.Driver");            
             //conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+dbName,"root","");     
            if(file.exists())System.out.println("patient file exists:  "+ file.getAbsolutePath());
            else System.out.println("patient file not exist: Creaeted new one ");
            
            try{
                Class.forName("org.sqlite.JDBC");
                //conn = DriverManager.getConnection("jdbc:sqlite:"+dbName,"root","");
                conn = DriverManager.getConnection("jdbc:sqlite:"+dbName);
                System.out.println("data base connection established:  "+ conn.toString());
            
                    stmt = conn.createStatement();
                    String pat = "CREATE TABLE if not exists newpatient " +
                                   "(patientId INTEGER NOT NULL," +
                                   " patientName    CHAR(50)    NOT NULL, " + 
                                   " patientAge     INTEGER     NOT NULL, " + 
                                   "patientGender   CHAR(10) NOT NULL,"+
                                   "patientAddress  CHAR(100) NOT NULL,"+
                                   "patientMobile   BIGINT(10) NOT NULL)";
                       System.out.println("newpatient Table Created:  ");
                      stmt.executeUpdate(pat);
                      stmt.close();
                      
                      stmt = conn.createStatement();
                      String hist = "CREATE TABLE if not exists history " +
                                       "(id INTEGER NOT NULL," +
                                       " date    DATE    NOT NULL, " + 
                                       " start   TIME     NOT NULL, " +                                               
                                       "stop   TIME NOT NULL)";
                      System.out.println("history Table Created:  ");    
                      stmt.executeUpdate(hist);
                      stmt.close();
                      
                      Dialog<Void> pop = new Dialog<Void>();
                      pop.setContentText("Data base accessed");
                      pop.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);

                      Node closeButton = pop.getDialogPane().lookupButton(ButtonType.CLOSE);
                      closeButton.setVisible(false);

                      pop.showAndWait();
                                                
            }catch(SQLException tb){
                System.err.println(tb.getClass().getName() + ": " + tb.getMessage());
                  Dialog<Void> pop = new Dialog<Void>();
                  pop.setContentText("Data base  not accessed");
                  pop.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);

                  Node closeButton = pop.getDialogPane().lookupButton(ButtonType.CLOSE);
                  closeButton.setVisible(false);

                  pop.showAndWait();
            }
    }catch(Exception e)
    {
        //System.out.println("errors to Create Data Base : "+e.getMessage());
        System.err.println(e.getClass().getName() + ": " + e.getMessage());
    }
    return conn;
}


  private void insertrecord()
{
    try{
    String query ="INSERT INTO `newpatient`(patientId,patientName,patientAge,patientGender,patientAddress,patientMobile)"+
    "VALUES("+ newpatient_id.getText() +",'" +  newpatient_name.getText() + "','"+  newpatient_age.getText() + "',"
            + "'"+  selectedGender  + "','"+  newpatient_address.getText() + "',"+  newpatient_mobile.getText() +")";
    System.out.println(gender);     
    executeQuery(query);
        System.out.println("Saved");
        Main.selected_patient_id = Integer.parseInt(newpatient_id.getText());
       }
    catch(Exception e) {
        System.out.println("Execption in Save");
          e.printStackTrace();
          }
}

private void executeQuery(String query) {
    
     Connection  conn= getConnection();
     Statement st;
     try {
            st = conn.createStatement();
            st.executeUpdate(query);         
     }catch(Exception e){
         e.printStackTrace(); 
     }
}

     @FXML
     private void btnFetchHistory(ActionEvent event) {                                  
        try {                       
             Existpatcontrol existpat_controller = new Existpatcontrol();               
             
             FXMLLoader loader1 = new FXMLLoader();
             loader1.setController(existpat_controller.getTvHistory());
             //URL urlext = loader1.getClass().getClassLoader().getResource("Historypat.fxml");
            //Parent root1 = FXMLLoader.load(urlext);
             loader1.setLocation(getClass().getResource("Historypat.fxml"));
             Parent root1 = loader1.load();
             
            
             Stage stage1 = new Stage();
             stage1.setTitle("History");
             stage1.setScene(new Scene(root1));
             stage1.show();                 
                
        }catch (Exception hs) {
            
            System.out.println("errors"+hs.getMessage());
            try {
                PrintStream ps = new PrintStream(Main.test_file);
                hs.printStackTrace(ps);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("errors"+e.getMessage());
            }               
        }            
     } 

在此输入图像描述

在此处输入图像描述在此处输入图像描述

共有1个答案

穆仲卿
2023-03-14

问题得到了解决。我认为jdbc:sqlite在安装应用程序的同一文件夹中创建数据库文件,而这样的文件夹是写保护的。我传递了一个固定路径作为jdbc:sqlite:c://appdata/database.db

 类似资料:
  • 笔记本电脑的键盘+触摸板能否作为另一台主机的输入(替代键鼠)? 笔记本是MacBook Pro,接口是雷厉4;另一台主机是深信服的瘦终端,接口是USB;

  • 问题内容: 我正在尝试制作看起来不像tkinter应用程序的tkinter应用程序。我使用的是ttk笔记本,并且在选中选项卡时,这些选项在文本的周围都有一点点虚线。它看起来很糟糕,我找不到使用样式或配置删除它的方法。这是要说明的屏幕截图: 编辑代码(我认为这不会有很大帮助,因为我实际上只是在尝试删除默认样式的东西。): 这是笔记本的创建: 填写: 相关样式: 问题答案: 您可以通过更改选项卡小部件

  • 我通过Anaconda找到了iPython笔记本。我不小心删除了一个重要的笔记本,但我似乎在垃圾箱里找不到它(我认为iPy笔记本不会被扔进垃圾箱)。 有人知道我怎样才能找回笔记本吗?我正在使用MacOSX。 谢谢

  • 我使用命令启动了一个图像 我相信是images的目录的本地挂载点。但是我不能在我的笔记本电脑上fid这个目录。docker在哪里创建vertica数据目录?

  • 已在远程linux计算机上安装了Anaconda Python。 在本地Windows上使用puty登录到远程linux机器以远程启动Ipython笔记本。它从8888端口开始。 遥远的_user@remote_host$ipython笔记本电脑--无浏览器--端口=8888 现在我需要在本地浏览器上访问这个笔记本。尝试过做ssh隧道。 C:\用户\windowsUser SSH:连接到主机rem

  • 可将游戏等应用程序输入PS Vita,或输出至电脑。 需事先进行以下操作。 将PS Vita专用的存储卡插入PS Vita 操作PS Vita注册PlayStation®Network账号 若持有在PS3™或电脑创建的账号,可直接使用该账号。 操作电脑与互联网连接 操作电脑下载/安装PlayStation®内容管理助手 可在以下网站进行下载。 http://cma.dl.playstation.n