Java “无法修复”;未知表格“;来自JOOQ查询的异常
我很难从我知道存在的数据库中获取数据,我知道数据库的格式 在下面的代码段中,“if conn!=null”只是一个测试,用于验证数据库名、表名等是否正确,并且它们确实进行了验证 下面的最后一行是生成异常的内容Java “无法修复”;未知表格“;来自JOOQ查询的异常,java,mysql,sql,jooq,Java,Mysql,Sql,Jooq,我很难从我知道存在的数据库中获取数据,我知道数据库的格式 在下面的代码段中,“if conn!=null”只是一个测试,用于验证数据库名、表名等是否正确,并且它们确实进行了验证 下面的最后一行是生成异常的内容 public static HashMap<Integer, String> getNetworkMapFromRemote(DSLContext dslRemote, Connection conn, Logger logger) { HashMap<Integ
public static HashMap<Integer, String> getNetworkMapFromRemote(DSLContext dslRemote, Connection conn, Logger logger) {
HashMap<Integer,String> remoteMap = new HashMap<Integer, String>();
// conn is only used for test purposes
if (conn != null) {
// test to be sure database is ok
try
{
ResultSet rs = conn.createStatement().executeQuery("SELECT networkid, name FROM network");
while (rs.next()) {
System.out.println("TEST: nwid " + rs.getString(1) + " name " + rs.getString(2));
}
rs.close();
}
catch ( SQLException se )
{
logger.trace("getNetworksForDevices SqlException: " + se.toString());
}
}
// ----------- JOOQ problem section ------------------------
Network nR = Network.NETWORK.as("network");
// THE FOLLOWING LINE GENERATES THE UNKNOWN TABLE
Result<Record2<Integer, String>> result = dslRemote.select( nR.NETWORKID, nR.NAME ).fetch();
为了完整性,这里是JOOQ为网络生成的类文件的一部分
package com.wbcnvi.intravue.generated.tables;
@javax.annotation.Generated(value = { "http://www.jooq.org", "3.3.1" },
comments = "This class is generated by jOOQ")
@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Network extends org.jooq.impl.TableImpl<com.wbcnvi.intravue.generated.tables.records.NetworkRecord> {
private static final long serialVersionUID = 1729023198;
public static final com.wbcnvi.intravue.generated.tables.Network NETWORK = new com.wbcnvi.intravue.generated.tables.Network();
@Override
public java.lang.Class<com.wbcnvi.intravue.generated.tables.records.NetworkRecord> getRecordType() {
return com.wbcnvi.intravue.generated.tables.records.NetworkRecord.class;
}
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NWID = createField("NwId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NETWORKID = createField("NetworkId", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.String> NAME = createField("Name", org.jooq.impl.SQLDataType.CHAR.length(40).nullable(false).defaulted(true), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> USECOUNT = createField("UseCount", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NETGROUP = createField("NetGroup", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.String> AGENT = createField("Agent", org.jooq.impl.SQLDataType.CHAR.length(16), this, "");
public Network() {
this("network", null);
}
public Network(java.lang.String alias) {
this(alias, com.wbcnvi.intravue.generated.tables.Network.NETWORK);
}
..........
package com.wbcnvi.intraue.generated.tables;
@javax.annotation.Generated(值={”http://www.jooq.org", "3.3.1" },
comments=“该类由jOOQ生成”)
@SuppressWarnings({“all”、“unchecked”、“rawtypes”})
公共类网络扩展org.jooq.impl.TableImpl{
私有静态最终长serialVersionUID=1729023198;
public static final com.wbcnvi.intraue.generated.tables.Network Network=new com.wbcnvi.intraue.generated.tables.Network();
@凌驾
public java.lang.Class getRecordType(){
返回com.wbcnvi.intraue.generated.tables.records.NetworkRecord.class;
}
public final org.jooq.TableField NWID=createField(“NWID”,org.jooq.impl.SQLDataType.INTEGER.nullable(false),this,”;
public final org.jooq.TableField NETWORKID=createField(“NETWORKID”,org.jooq.impl.SQLDataType.INTEGER.nullable(false)。defaulted(true),this,”;
public final org.jooq.TableField NAME=createField(“NAME”,org.jooq.impl.SQLDataType.CHAR.length(40).nullable(false).defaulted(true),this,”;
public final org.jooq.TableField USECOUNT=createField(“USECOUNT”,org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true),this,”;
public final org.jooq.TableField NETGROUP=createField(“NETGROUP”,org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true),this,”;
public final org.jooq.TableField AGENT=createField(“AGENT”,org.jooq.impl.SQLDataType.CHAR.length(16),this,”;
公共网络(){
此(“网络”,空);
}
公共网络(java.lang.String别名){
这(别名com.wbcnvi.intraue.generated.tables.Network.Network);
}
..........
基于“unknown table”异常,我认为连接到错误的数据库或服务器时出现了问题,但控制台输出对于JDBC查询是正确的
任何想法都值得赞赏,可能是其他原因造成的,或者DSLContext无效(但我认为这会产生一个不同的例外)。答案很简单,我没有包括.from()方法
Result-Result=dslmote.select(nR.NETWORKID,nR.NAME)
。由(北区)
.fetch();
这就是为什么表是未知的,我从来没有把from方法放进去。是的,这当然有帮助:-)
package com.wbcnvi.intravue.generated.tables;
@javax.annotation.Generated(value = { "http://www.jooq.org", "3.3.1" },
comments = "This class is generated by jOOQ")
@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Network extends org.jooq.impl.TableImpl<com.wbcnvi.intravue.generated.tables.records.NetworkRecord> {
private static final long serialVersionUID = 1729023198;
public static final com.wbcnvi.intravue.generated.tables.Network NETWORK = new com.wbcnvi.intravue.generated.tables.Network();
@Override
public java.lang.Class<com.wbcnvi.intravue.generated.tables.records.NetworkRecord> getRecordType() {
return com.wbcnvi.intravue.generated.tables.records.NetworkRecord.class;
}
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NWID = createField("NwId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NETWORKID = createField("NetworkId", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.String> NAME = createField("Name", org.jooq.impl.SQLDataType.CHAR.length(40).nullable(false).defaulted(true), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> USECOUNT = createField("UseCount", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NETGROUP = createField("NetGroup", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, "");
public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.String> AGENT = createField("Agent", org.jooq.impl.SQLDataType.CHAR.length(16), this, "");
public Network() {
this("network", null);
}
public Network(java.lang.String alias) {
this(alias, com.wbcnvi.intravue.generated.tables.Network.NETWORK);
}
..........
Result<Record2<Integer, String>> result = dslRemote.select( nR.NETWORKID, nR.NAME )
.from(nR)
.fetch();