天道酬勤,学无止境

无法从 H2 db 获得结果(Unable to get results from H2 db)

问题

我正在尝试从 h2 db 获取值,但总是收到此错误

 org.h2.jdbc.JdbcSQLException: No data is available [2000-171]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.message.DbException.get(DbException.java:135)
    at org.h2.jdbc.JdbcResultSet.checkOnValidRow(JdbcResultSet.java:2956)
    at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:2962)
    at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:306)

我用谷歌搜索答案

确保调用 rs.next(); 在使用任何 getter 方法之前。

但我确实打电话给 rs.next() ...

这是我的代码:

public User getUser(int userId) throws SQLException {
    User u = new User(userId);

    try {
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery("SELECT * FROM invited_users WHERE user_id=" + userId);
        rs.next();

        u.setName(rs.getString("user_name"));

    } catch (SQLException except) {
        JOptionPane.showMessageDialog(null, "Unable to load user! " + except);
    }
    return u;
}
回答1

问题出在结果集中,它是空的。

只需替换此代码

rs.next();

u.setName(rs.getString("user_name"));

if (rs.next()) {
    u.setName(rs.getString("user_name"));
}
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Unable to get results from H2 db
    I'm trying to get values from h2 db, but always getting this error org.h2.jdbc.JdbcSQLException: No data is available [2000-171] at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) at org.h2.message.DbException.get(DbException.java:169) at org.h2.message.DbException.get(DbException.java:146) at org.h2.message.DbException.get(DbException.java:135) at org.h2.jdbc.JdbcResultSet.checkOnValidRow(JdbcResultSet.java:2956) at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:2962) at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:306) I googled for an answer Make sure to call
  • 嵌入式 h2 数据库:获取连接但未找到表(Embedded h2 database: getting connection but table not found)
    问题 我正在使用 h2 嵌入式数据库。 当我启动我的应用程序时,数据库被初始化并且我能够获得连接对象。 但是,当应用程序尝试在表中插入数据时,它会抛出 sql 异常“找不到表 XXXX”。 我可以从 H2 控制台查看表格。 同样的查询在控制台上完美运行。 通过有关此主题的其他问题的一些答案,我了解到当数据库为空时会发生这种行为。 但是从 H2 控制台我能够查看和执行查询,并且我已经交叉检查它是同一个数据库,因为我使用完全相同的 url 和用户通过应用程序和 H2 控制台进行连接。 有什么建议可以解决吗? 回答1 所有特权都已到位。 所以有一件事可以肯定,我确实指向了错误的数据库。 但我不知道。 然后我注意到,当我第一次启动应用程序服务器时,创建的db文件的扩展名为mv.db。 当我第一次通过 h2 控制台连接时,创建了一个扩展名为 h2.db 的文件。 因此,确实为相同的用户和 url 创建了两个不同的数据库。 原因是我的应用程序中存在的 h2 驱动程序 jar 是 1.4(测试版)版本,它创建了扩展名为 mv.db 的 db。 我访问的控制台是通过 h2 1.3 版(最后一个稳定版)创建的,它创建了 h2.db 文件。 这个问题是由于应用程序和控制台之间的版本不匹配而出现的。 一旦我将两者都移至 1.4(测试版),问题就解决了。 回答2 我的错误是在两个不同的数据库上工作。
  • Heredoc 和 PHP 的问题(Issue with heredoc and PHP)
    问题 我正在关注 Wrox 的“开始 PHP、Apache、MySQL Web 开发”一书。 我一直在逐字跟踪它,出于某种原因,我遇到了代码问题。 编辑器说我的代码中没有错误。 但是当我运行它时,它给了我以下消息:“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以获取在第 3 行附近使用的正确语法”这里是以下代码 <?php //take in the id of a director and return his/her full name function get_director() { global $db; $query = 'SELECT people_fullname FROM people WHERE people_id = ' . $director_id; $result = mysql_query($query, $db) or die(mysql_error($db)); $row = mysql_fetch_assoc($result); extract($row); return $people_fullname; } //take in the id of a lead actor and return his/her full name function get_leadactor($leadactor_id) {
  • H2DB和Java,大约>两个小时的差异(H2DB and Java, an approximate> two hour discrepancy)
    问题 我正在开发一个比赛计时系统,在某些情况下,我需要从H2DB中检索一个时间对象。 像其bretheren(或sisteren)一样,time数据类型是相对于1970年1月1日的,并且以SQL形式以“ hh:mm:ss”格式表示,日期默认情况下设置为1970年1月1日。 默认情况下,它映射到“ java.sql.Time”对象。 作为值得信赖的Padawan,我将以下代码编码为显示目的,将小时数与分钟数分开。 if(race.getCutOffTime()!=null){ long cutOffHour=(race.getCutOffTime().getTime())/(3600000); int cutOffMinute=(int)(race.getCutOffTime().getTime()%(60*60*1000)); System.out.println(cutOffHour+":"+cutOffMinute); } 但是,Java的时间处理方式会产生臭味,因为这些函数输出意外的值,例如,我的数据库中的以下语句给出的输出为3:30。 INSERT INTO MagEye.Races(RaceName, EventID,CutOffTime) VALUES ('TEST', SELECT EventID FROM MagEye.Events WHERE EventName=
  • 在H2DB中如何像MySql一样获得sql dump?(How in H2DB get sql dump like in MySql?)
    问题 我对H2DB有一些疑问。 我有将数据存储在文件中的H2DB数据库,我有3个文件:test.18.log.db,test.data.db,test.index.db。 我想像使用mysqldump一样获得sql dump文件。 是否可以? 回答1 是的,有多种解决方案。 一种是运行SCRIPT SQL语句: SCRIPT TO 'fileName' 另一种是使用脚本工具: java org.h2.tools.Script -url <url> -user <user> -password <password> 然后,还有RUNSCRIPT语句和RunScript工具。 顺便说一句,您应该考虑升级到H2的更新版本。 在较新的版本中,两个文件.data.db和.index.db合并为一个.h2.db文件。 回答2 如果要获取架构和数据,可以使用 SCRIPT TO 'dump.sql'; 如果只想获取架构,则可以使用 SCRIPT SIMPLE TO 'dump.txt'; 回答3 您的捷径: $ ls foo.mv.db $ wget -O h2.jar https://search.maven.org/remotecontent?filepath=com/h2database/h2/1.4.200/h2-1.4.200.jar $ java -cp h2.jar org.h2
  • 将值从下拉菜单传递到Flask模板(Passing value from a drop down menu to a Flask template)
    问题 我在将从HTML下拉菜单中选择的项目传递到SQL查询时遇到问题。 我不确定要实现此功能,我的代码中缺少什么概念。 我发现的大多数示例都在PHP中,但我不确定如何将其转换为Python。 这是场景。 我正在使用Flask和Sqlite,并尝试让用户从HTML下拉菜单中选择一个项目。 从下拉菜单中选择的项目将用于SQL查询中,以从数据库中检索信息,然后将这些结果显示在新页面上。 例如,用户从具有3个选项(红色,蓝色,绿色)的下拉菜单中选择“红色”,然后单击提交按钮。 “红色”将传递到我的app.py文件中的SQL查询,该查询将从color =“红色”的行中检索所有数据。 然后,检索到的数据将显示在/results.html上。 我相信我的问题是我没有正确地将一个值分配给下拉菜单中的项目,然后将该值传递给运行SQL查询的Python代码。 这是我对这应该如何工作的假设,但是我可能在这里错过了一些更大的东西。 我已经尝试了很多HTML来实现此目的,但是我什至不确定那是我的问题所在。 当我点击“提交”时,我进入了新页面,但是数据库中什么都没有显示 这是我的代码,用于我的2个视图(“ /”和“ results.html”)以及我的Python代码: @app.route('/results.html', methods=['GET','POST']) def results(): g
  • 如何使用Node从MySQL正确返回结果?(How to properly return a result from mysql with Node?)
    问题 在代码中 var stuff_i_want = ''; stuff_i_want = get_info(parm); 和功能get_info: get_info(data){ var sql = "SELECT a from b where info = data" connection.query(sql, function(err, results){ if (err){ throw err; } console.log(results[0].objid); // good stuff_i_want = results[0].objid; // Scope is larger than function console.log(stuff_i_want); // Yep. Value assigned.. } 在更大的范围内 stuff_i_want = null 关于返回mysql数据并将其分配给变量,我缺少什么? =============根据Alex建议的新代码 var parent_id = ''; get_info(data, cb){ var sql = "SELECT a from b where info = data" connection.query(sql, function(err, results){ if (err){ throw err; }
  • 带有超链接的PHP / MySQL表(PHP/MySQL Table with Hyperlinks)
    问题 我有2个PHP表格。 一个显示事件列表,另一个显示每个特定事件的结果。 在具有事件列表的页面上,我希望这样做,以便可以创建超链接来访问每个事件的结果。 例如,在“事件”页面上,我单击第2行的超链接,然后将我带到具有该特定事件的结果的“结果”页面。 任何帮助将不胜感激,因为我是PHP的新手。 如果需要任何其他详细信息,请随时询问。 谢谢。 编辑:对不起,我将向您展示“事件”表单到目前为止的样子: <?php mysql_connect('localhost','root',''); mysql_select_db('clubresults') or die( "Unable to select database"); $sql = "SELECT *, DATE_FORMAT(EventDate, '%d/%m/%y') as newdate FROM Events"; $result = mysql_query ($sql); ?> <table border = 1> <tr> <th>Event ID</th> th>Event Name</th> <th>Event Date</th> <th>Location</th> </tr> <?php while ($row = mysql_fetch_array($result)) { echo "</td><td>" .
  • H2 DB — Hibernate 示例 — 无法从资源解析映射文档(H2 DB — Hibernate Example — Could not parse mapping document from resource)
    问题 * 以下每个文件都在同一位置 * 错误 : SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. org.hibernate.InvalidMappingException: Could not parse mapping document from resource ./employee.hbm.xml at org.hibernate.cfg.Configuration.addResource(Configuration.java:616) at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1635) at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1603) at org.hibernate.cfg
  • 解析错误:语法错误,我的PHP代码中文件意外结束(Parse error: Syntax error, unexpected end of file in my PHP code)
    问题 我收到一个错误: Parse error: syntax error, unexpected end of file in the line 使用此代码: <html> <?php function login() { // Login function code } if (login()) {?> <h2>Welcome Administrator</h2> <a href=\"upload.php\">Upload Files</a> <br /> <a href=\"points.php\">Edit Points Tally</a> <?php} else { echo "Incorrect login details. Please login"; } ?> Some more HTML code </html> 有什么问题? 回答1 您应该避免这种情况(在代码末尾): {?> 还有这个: <?php} 您不应该将方括号直接放在php标签的开/关附近,而应使用空格隔开: { ?> <?php { 还避免<? 并使用<?php 回答2 我有同样的错误,但是我通过修改php.ini文件进行了修复。 找到您的php.ini文件,请参见Dude,我的php.ini在哪里? 然后使用您最喜欢的编辑器将其打开。 查找short_open_tag属性,并应用以下更改:
  • 如何在 localhost:8082 查看我的 h2 数据库中的所有表?(How to see all tables in my h2 database at localhost:8082?)
    问题 我使用 JDBC 并从 sql 脚本创建了名为 usaDB 的 h2 数据库。 然后我用 jdbc 填充了所有表。 问题是,在我通过 localhost:8082 连接到 usaDB 后,我在左侧的树上看不到我的表。 只有 INFORMATION_SCHEMA 数据库和rootUser我指定创建 usaDB。 如何查看我的 h2 数据库中表的内容? 我试过查询SELECT * FROM INFORMATION_SCHEMA.TABLES 。 但它返回了许多表名,除了我创建的那些。 我的快照: 回答1 我有同样的问题,答案似乎很愚蠢:当你输入你的数据库名称时,你不应该添加“ .h2.db ”后缀,例如,如果你有 db 文件“ D:\somebase.h2.db " 你的连接字符串应该像 " jdbc:h2:file:/D:/somebase "。 以其他方式 jdbc 创建名为“ somebase.h2.db.h2.db ”的新空数据库文件,您会看到您所看到的:只有系统表。 回答2 您可以使用 SHOW 命令: 使用此命令,您可以列出模式、表或表的列。 例如: SHOW TABLES 回答3 这个问题驱使我绕过这个问题,除了这个页面之外,我还阅读了很多(很多!)其他的,直到我解决了它。 我的用例是查看使用:: Spring Boot :: (v1.3.1.RELEASE)在
  • 将 mysql 转换为 mysqli?(Convert mysql to mysqli?)
    问题 我正在尝试将我的代码更改为mysqli ,我听说不推荐使用mysql并且我无法将我的代码更改为mysqli 。 我设法连接到我的数据库,但其余的代码似乎不起作用,我尝试将所有mysql更改为mysqli但它没有用。 我该怎么做才能使代码工作相同但在mysqli ? 有人可以重写它,以便我可以看到差异。 没看到什么好的教程。 <?php $db = new mysqli('localhost','root', '', 'searchengine'); if($db->connect_errno) { die('sorry we are having some problbems'); } $sql = mysql_query(sprintf( "SELECT * FROM searchengine WHERE pagecontent LIKE '%s' LIMIT 0,%d", '%'. mysql_real_escape_string($_GET['term']) .'%', mysql_real_escape_string($_GET['results'])) ); while($ser = mysql_fetch_array($sql)) { echo "<h2><a href='$ser[pageurl]'>$ser[pageurl]</a></h2>"; }
  • Issue with heredoc and PHP
    I am following The book "Beginning PHP, Apache, MySQL web development" by Wrox. I have been following it verbatim and for some reason I am having a issue with the code. The editor says that there are no errors in my code. but when I run it gives me the following message: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3" here is the following code <?php //take in the id of a director and return his/her full name function get_director() { global $db; $query = 'SELECT people_fullname FROM people
  • org.h2.Driver 的 java ClassNotFoundException(java ClassNotFoundException for org.h2.Driver)
    问题 我正在尝试使用 H2 连接到 Java 中的数据库(使用 Eclipse 作为 IDE)。 该示例确实(如下)抛出ClassNotFoundException 。 问题是,我确实将 h2 jar 文件添加到系统 CLASSPATH。 我什至通过控制台中的printenv多次检查它是否存在。 我省略了一步吗? 代码: import java.sql.*; public class Program { /** * @param args */ public static void main(String[] args) throws Exception{ try{ System.out.println("hello, world!"); Class.forName("org.h2.Driver"); Connection conn = DriverManager.getConnection("jdbc:h2:~/testdb", "sa", ""); // add application code here conn.close(); }catch(ClassNotFoundException ex){ System.out.println( "ERROR: Class not found: " + ex.getMessage() ); } System.exit(0); } }
  • 在Web控制台中看不到我的H2数据库(Can't see my H2 database in Web Console)
    问题 我使用以下URL通过代码创建了一个H2数据库: jdbc:h2:C:/data/fixed.db 我的代码可以创建表,执行查询。 如果手动打开文件,则可以成功查看其内容并查看创建查询等 但是,当我尝试通过Web界面使用H2控制台时,看不到数据库。 而是,Web控制台在此处C:/data/fixed.db.mv.db创建另一个空数据库。 我只是无法加载我的数据库。 我想念什么? 编辑 我的代码使用H2 1.3.175 Web控制台H2 1.4.178 回答1 终于我解决了我的问题... 从1.4.x开始,H2使用MV_STORE(请参见此处的解答和Thomas Mueller的评论)。 显然,Web控制台尝试自动附加.mv.db扩展名。 即使已经有一个带有h2.db扩展名的文件。 因此,我将代码的H2版本从1.3.175升级到1.4.178,最后,我可以看到我的数据了... 编辑这是@devdanke提出的替代解决方案: 您必须手动告诉H2 1.4.x不要使用MV_Store:“; mv_store = false”。 真麻烦 例如,您将以类似于以下代码的结尾: Class.forName("org.h2.Driver"); Connection conn = DriverManager.getConnection( // "jdbc:h2:file:C:\\my\\java\
  • 无法使用 EFCore 编辑数据库条目,EntityState.Modified:“数据库操作预计会影响 1 行,但实际上影响了 0 行。”(Unable to edit db entries using EFCore, EntityState.Modified: “Database operation expected to affect 1 row(s) but actually affected 0 row(s).”)
    问题 我正在使用带有 ASP.NET MVC Core 1.0 和 Entity Framework Core 1.0 的 Identity Core 1.0,以本文为起点创建一个简单的用户注册系统,并且我正在尝试添加用户角色。 我可以添加用户角色,但我无法编辑它们。 这是RolesController的Edit操作: [HttpPost] [ValidateAntiForgeryToken] public IActionResult Edit(IdentityRole role) { try { _db.Roles.Attach(role); _db.Entry(role).State = Microsoft.EntityFrameworkCore.EntityState.Modified; _db.SaveChanges(); return RedirectToAction("Index"); } catch (Exception ex) { Console.WriteLine(ex); return View(); } } 这是相应视图中的表单: @model Microsoft.AspNet.Identity.EntityFramework.IdentityRole @{ ViewBag.Title = "Edit"; } <h2>Edit Role</h2> <hr />
  • Spring Boot + IntelliJ + 嵌入式数据库 = 头痛(Spring Boot + IntelliJ + Embedded Database = Headache)
    问题 要么我错过了一些文档(Spring、Spring Boot、H2、HSQLDB、Derby、IntelliJ)中深藏的核心概念,要么我已经盯着这个看太久了。 我有一个 Spring Boot 项目。 首先尝试使用和初始化 H2 数据库,尝试在 IntelliJ 中连接到它只是意识到我可能无法在不放弃我的第一个孩子的情况下轻松浏览数据库(使用 IntelliJ 数据库客户端连接到 H2 数据库)。 所以我搬到了 DerbyDB。 同样的事情 - 在我的应用程序中创建了 db 根文件夹,我在 IntelliJ 中连接到它,但是我的表,刚从启动应用程序创建的表无法浏览。 我什至尝试过 SQLite,但对 SQLite 的支持不太好,某些更新功能不可用,但我至少可以在 IntelliJ 浏览器中找到我的表! 我只想要一个简单的单文件嵌入式数据库,我可以轻松使用、浏览和使用它。 有什么建议么?! 当我运行应用程序时,我看到模式被导出: 2015-07-19 09:37:45.836 INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export Hibernate: drop table user_roles if
  • 在Spring应用程序中运行junit test时访问h2 Web控制台(Access to h2 web console while running junit test in a Spring application)
    问题 我正在构建一个Spring应用程序,并且需要从Web浏览器运行JUnit测试时,需要检查我的H2内存数据库。 在我的Spring配置中,我有一个Bean,它负责创建数据库模式并用一些将在我的JUnit测试中使用的数据填充它。 我还在测试上下文中添加了一个bean,该bean创建了一个Web服务器,最终我将在其中查找数据。 <bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" lazy-init="false"> <constructor-arg value="-web,-webAllowOthers,-webPort,11111" /> </bean> 一切正常,因为数据库已正确填充,因为我可以从JUnit测试访问其数据,并且H2 Server仅在处于测试阶段时才运行(我可以知道,因为如果尝试访问my_ip:111111在调试测试之前,我无法连接,但是一旦开始测试,我就可以连接。 无论如何,如果我从Web浏览器打开H2控制台,则不会显示任何架构。 有任何想法吗?? 非常感谢!! 回答1 由于这可能会成为测试调试功能,因此可以在运行时使用@Before将其添加: import org.h2
  • 如何将 H2Database 数据库文件转换为 MySQL 数据库 .sql 文件?(How to convert H2Database database file to MySQL database .sql file?)
    问题 我在 H2Database 文件中有一些数据,我想将其转换为 MySQL .sql数据库文件。 我可以遵循哪些方法? 回答1 在回答 Thomas Mueller 时,SquirrelSQL 对我来说效果很好。 以下是 Windows 转换 H2 数据库的过程: 转到“驱动程序列表”,默认情况下所有内容都是红色的。 选择“H2”驱动,在“Extra Class Path”中指定“h2-1.3.173.jar”的完整路径(例如)。 H2 驱动程序应在列表中显示蓝色勾号。 选择您的目标驱动程序(PostgreSQL、MySQL),并执行相同操作,例如对于 PostgreSQL,在 Extra Class Path 中指定“postgresql-9.4-1201.jdbc41.jar”的完整路径。 转到“别名”,然后单击 H2 的“+”:配置您的 JDBC 链,例如复制/粘贴您在启动 H2 时获得的 jdbc 链,并对目标数据库执行相同操作:单击“+”,配置和“测试”。 当您双击别名时,您应该会在新选项卡中看到数据库中的所有内容。 转到源数据库中的表,对所有表进行多选并右键单击:“复制表”。 从 Alias 转到目标数据库,然后执行“粘贴表”。 当所有表都被完全复制时,也会生成外键引用。 检查您的主键:从 H2 到 PostgreSQL,我丢失了主键约束和自动递增功能。
  • Spring的嵌入式H2数据源和DB_CLOSE_ON_EXIT(Spring’s embedded H2 datasource and DB_CLOSE_ON_EXIT)
    问题 对于单元测试(如果需要,可以将它们称为集成测试),我已经在Spring配置中配置了嵌入式数据库,如下所示: <jdbc:embedded-database id="dataSource" type="H2"> <jdbc:script location="classpath:schema_h2.sql" /> </jdbc:embedded-database> 现在,从命令行运行测试时,它们可以正常工作,但是最后我得到一些错误(无害,但很烦人): WARN 2013-03-25 12:20:22,656 [Thread-9] o.s.j.d.e.H2EmbeddedDatabaseConfigurer 'Could not shutdown embedded database' org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-170] at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) ~[h2-1.3.170.jar:1.3