java - 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());
}
}
}
解决方案
当您认为您已经创建了表时,“表不存在”的三个常见原因:
您连接到的数据库与您认为连接的不同,并且由于您在连接 URL 上指定了“create=true”,因此 Derby 悄悄地为您创建了一个新的空数据库。
如果您使用的是 Derby 的“内存中”配置,这意味着当数据库关闭(或您的应用程序退出)时,数据库的所有内容都会消失。
您以不同的用户身份连接到数据库,并且您没有发出 SET SCHEMA 语句,因此您使用的是默认模式名称,该名称基于您的用户名,因此两个模式不同并且完全不同表,因此当您使用其他模式时,您创建的表似乎不存在。
推荐阅读
- typescript - Typescript 的“对象”类型错误中不存在属性
- javascript - 保护公共 API 免受不需要的“提交”
- pandas - 可以使用 PANDAS 从文件大小超过 500MB 的 csv 中提取数据。是否有替代数据框框架来处理大型数据集
- javascript - 材料表中带有按钮的 Onclick
- apache-spark - 如何在 shell 脚本中捕获作业状态以进行 spark-submit
- python - 无法在 html 中找到特定标签,即使它已被解析器提取
- xamarin - Xamarin 表单中的 Razorpay 集成
- ios - 运行时显示“线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)”的问题
- python - “UnityEnvironment”对象没有属性“get_agent_groups”(mlagents_envs 0.16.1)
- laravel - 为什么通知:table create table with primary key is uuid