首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从H2DB读取结果

从H2DB读取结果
EN

Stack Overflow用户
提问于 2018-01-14 11:35:09
回答 2查看 50关注 0票数 0

我在读取数据库中的行的内容时遇到了问题。我想显示有关给定职位和姓名的员工的信息(暂时在控制台中)。我已经构建了路径,在H2中启动了数据库,但我不确定我是否正确地使用了PreparedStatement。

找不到"MyTable“表

为了提高可读性,我删除了try/catch。

代码语言:javascript
复制
static public void  Search (JButton a , JFormattedTextField name, JComboBox<String> b ) {
    a.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e ) {
            Connection con = null;

            con = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/test" + "sa" + "");

            Statement stm = null;
            String ime = name.getText();// reads the name 
            String poz = (String) b.getSelectedItem();// reads the position

            Class.forName("org.h2.Driver");

            String sql1 = String.format("SELECT * FROM  RABOTNICI  WHERE IME = '%s' OR POZICIA = '%s'", ime, poz);
            PreparedStatement prstm = null;

            prstm = con.prepareStatement(sql1);

            ResultSet rs = null;

            rs = prstm.executeQuery(sql1);
        }
    });
}
EN

回答 2

Stack Overflow用户

发布于 2018-01-14 11:51:18

jdbc:H2:tcp:.

您使用的是TCP连接,但没有像这样启动H2 TCP服务器:服务器

通常,H2数据库在没有TCP服务器的情况下用作嵌入式数据库,如下所示:jdbc

jdbc:h2:/path/to/dbfile

票数 0
EN

Stack Overflow用户

发布于 2018-01-14 12:01:06

我认为你有一些信息来源,但还是出了点问题。

  • 创建preparedStatement的方式,即使解析正确,也很容易被SQL注入。您应该首先创建语句,然后注入值。 字符串sql1 = "SELECT * FROM RABOTNICI其中IME =?或POZICIA = ?“PreparedStatement prstm = con.prepareStatement(sql1);prstm.setString(1,ime);prstm.setString(2,poz); 请参阅此doc页面以了解PreparedStatements的正确用法
  • 另外,getConnection的论点看上去有点混乱。 con = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/test“+ "sa”+“);
  • 下面的行应该出现在连接创建之前。 Class.forName(org.h2.Driver); 我建议使用这个教程来指导与H2 DB的连接。
  • 最后,我不知道如何获得"MyTable“错误--在代码段中从未提到过。

我的代码引号没有经过测试,但我相信已经足够清楚地得到了这个想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48249146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档