首页 > 解决方案 > JDK 9.0.4 和 Derby 10.14.2 找不到创建的表

问题描述

我试图运行一些 java 类 InsertApp,它应该将几行推入现有表 MYTABELLE22。我从控制台异常中得到该表不存在。

import java.sql.*;
public class InsertApp {
public static void main(String [] args) {
Connection con = null;
try {
  con = DriverManager.getConnection(
    "jdbc:derby:/Users/apolit/DerbyDatenbank;create=true");
  Statement sta = con.createStatement(); 

// insert 3 rows
  int count = 0;
  int c = sta.executeUpdate("INSERT INTO MyTabelle22"
    + " (ID, MYKEY, CONTENT)"
    + " VALUES (1, 1, 'Bellevue')");
  count = count + c;

  c = sta.executeUpdate("INSERT INTO MyTabelle22"
    + " (ID, MYKEY, CONTENT)"
    + " VALUES (2, 2, 'Hull')");
  count = count + c;

  c = sta.executeUpdate("INSERT INTO MyTabelle22"
    + " (ID, MYKEY, CONTENT)"
    + " VALUES (3, 2, 'W. York')");
  count = count + c;
  System.out.println("Number of rows inserted: "+count);

  sta.close();
  con.close();        
} catch (Exception e) {
  System.err.println("Exception: "+e.getMessage());
}
}
}

另请参阅打印屏幕

标签: javasqlderby

解决方案


当您认为您已经创建了表时,“表不存在”的三个常见原因:

  1. 您连接到的数据库与您认为连接的不同,并且由于您在连接 URL 上指定了“create=true”,因此 Derby 悄悄地为您创建了一个新的空数据库。

  2. 如果您使用的是 Derby 的“内存中”配置,这意味着当数据库关闭(或您的应用程序退出)时,数据库的所有内容都会消失。

  3. 您以不同的用户身份连接到数据库,并且您没有发出 SET SCHEMA 语句,因此您使用的是默认模式名称,该名称基于您的用户名,因此两个模式不同并且完全不同表,因此当您使用其他模式时,您创建的表似乎不存在。

设置架构语句


推荐阅读