我正在使用Netbeans 7.2.1上的嵌入式数据库构建Java应用程序。现在,我可以通过以下代码与derby数据库建立连接:
Connection con = DriverManager.getConnection(
"jdbc:derby:database;create=true",
uName,
uPass);
但是,我无法对数据库的表执行查询。经过一些研究,我尝试执行以下代码,但没有成功:
Statement stmt = con.createStatement();
ResultSet rs;
rs = stmt.executeQuery("SELECT descricao FROM fichas");
while (rs.next()) {
String s = rs.getString("descricao");
System.out.println(s);
}
我这里有两个问题。首先,基于搜索,我应该使用Statement stmt,如上例所示,但netbeans给我一个错误。为了能够执行跟随他的方法“stmt.executeQuery()”,我必须将语句定义为:
java.sql.Statement stmt = con.createStatement();
如果我不这样使用它,我就不能选择“executeQuery”方法。其次,即使使用此查询也不会执行。我在控制台上收到错误:
java.sql.SQLSyntaxErrorException:架构'ADMIN_DATABASE'不存在
任何提示我如何解决这个问题?谢谢!
新更新:
我正在进行一些测试,这里有一些新的结论。如果不是通过netbeans的服务面板创建表,而是运行代码:
stmt.execute("create table test_table (name varchar(128))");
它有效。该表已创建,如果我再次尝试,它会给出表已存在的预期错误。但是,我看一下服务面板,应用嵌入式德比数据库,这个'测试表'与其他人不在一起。
除此之外,如果我在该表上执行select,它不会给出架构错误,但在我在服务面板上手动创建的其他错误中,它会继续给出错误。
那么,任何人都可以解释一下有什么区别吗?我创建的test_table
去了哪里?这种创作模式与在德比中创建表格的区别是什么?为什么我会收到模式错误而不是其他错误?
很抱歉这么多问题,但现在我很困惑。谢谢!
答案 0 :(得分:1)
netbeans中服务面板中的数据库在不同的JVM中运行,并且是Derby的网络实例。使用您使用的URL jdbc:derby:database;create=true
连接到数据库时,最终会在JVM中创建嵌入式数据库,并且此数据库将为空。
要连接到服务面板中的数据库,请使用正确的连接网址,例如jdbc:derby://localhost:1527/DATABASE_NAME
(更多信息here。
答案 1 :(得分:0)
因为它不会让我发表评论,直到我有50个代表,因为原因,我会在这里发布我的回复,以及一些靠近底部的实际示例代码,这些代码应该有助于指向正确的方向
这是一个很好的做法,如果您正在尝试测试创建表的能力,则可以事先打开DROP TABLE TABLE_NAME语句,只是在再次尝试创建它之前将其删除。尝试使用已存在的TABLE_NAME创建表时,它不会替换它,您的语句将失败。
除了指定数据库的名称外,您可能还必须引用您的架构,但这不是确定的。
我建议使用java方法分隔SELECT,INSERT INTO,UPDATE,CREATE TABLE等语句。不确定你是否已经这样做了,但是嘿,只是想帮忙。
最后,这是我在去年夏天学习的大学课程中用于类似项目的语法。希望您可以从中获得实现目标所需的适当语法。我也使用Derby数据库在Netbeans中完成了这一切。 (见下文)
//Variables for database connection below
final String rolodexDriver = "org.apache.derby.jdbc.ClientDriver";
final String rolodexURL = "jdbc:derby://localhost:1527/rolodexDatabase";
final String dbName = "rolodexDatabase"; //db is short for database
final String tableName = "Rolodex_Table";
final String user = "Joey";
final String password = "dbpassword"; //db is again short for database
以下是我用于通过方法建立与数据库的连接的代码。
// Below is the method invoked to establish a connection to the database
public void accessDatabase() throws ClassNotFoundException{
try {
Class.forName(rolodexDriver).newInstance();
connection = DriverManager.getConnection(rolodexURL, user, password);
statement = connection.createStatement();
} catch (InstantiationException | IllegalAccessException | SQLException ex) {
Logger.getLogger(rolodexBean.class.getName()).log(Level.SEVERE, null, ex);
}
} // end of accessDatabase method
下面是我用于SELECT语句的代码,请务必在此处注明语法。
String sql = "SELECT \"Person_name\", \"Person_phone_number\" FROM \"Rolodex_Table\"";
以下是我用来更新记录的代码。再次,请务必注意语法。你最好将表名,列名等放在\中,因为它将它们与编译器中的操作(即SELECT,UPDATE等)和修饰符(即WHERE,LIKE等)分开。 。
String editSQL = ("UPDATE \"Rolodex_Table\" SET \"Person_name\"='" + nameEntry +
"', \"Person_phone_number\"='" + phoneNumberEntry
+ "' WHERE \"Person_name\"='" + editNameEntry + "'" );
(顺便说一句,如果您不知道,您可以使用多行字符串以便于阅读,只需确保您只使用一个分号等。您还可以在字符串中使用您的java变量,如果您遵循我上面使用的语法。请注意,phoneNumberEntry和editNameEntry都是java变量。)
我希望这一切都可以帮助你,如果你有任何问题,请告诉我。一定要让我知道它是如何工作的,我也想知道,以供我自己将来参考。 (你看,在个人方面工作。祝你好运。