我正在使用MS-Access和Java连接JDBC-ODBC驱动程序。如下面的代码,我正在尝试创建一个注册文本框,但是当我添加值时,我只在数据库中得到结果“null”。如何获得我插入的真正价值?感谢
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:ADB");
Statement statement = con.createStatement();
statement.executeUpdate("insert into Login " + "values ('"+uname+"','"+pwd+"')");
uname = userTextBox.getText();
pwd = passTextBox.getText();
答案 0 :(得分:3)
从它的外观来看,你的语句代码没问题。问题是您在执行它之后初始化uname
和pwd
。
我假设你上面的某个地方已经将这些变量初始化为null
。因此,在执行语句时,必须插入的值为null
。
答案 1 :(得分:1)
根据您提供的信息量,如果您显示完整的代码,我可以相应地更新我的答案,我假设您需要更改此信息:
statement.executeUpdate("insert into Login " + "values ('"+uname+"','"+pwd+"')");
uname = userTextBox.getText();
pwd = passTextBox.getText();
要:
uname = userTextBox.getText();
pwd = passTextBox.getText();
statement.executeUpdate("insert into Login " + "values ('"+uname+"','"+pwd+"'")");
此外,您的查询容易受到SQL注入攻击。始终使用类似于以下的参数化查询:
insert into Login values (?,?)
答案 2 :(得分:0)
在执行更新之前,您需要初始化{{1and1}}:
uname
答案 3 :(得分:0)
您需要从
切换订单statement.executeUpdate("insert into Login " + "values ('"+uname+"','"+pwd+"')");
uname = userTextBox.getText();
pwd = passTextBox.getText();
到
uname = userTextBox.getText();
pwd = passTextBox.getText();
statement.executeUpdate("insert into Login " + "values ('"+uname+"','"+pwd+"')");
否则uname
和pwd
将为空(假设在此代码之前未给出任何值)
答案 4 :(得分:0)
更新查询不会返回插入或修改的值。 您可以做的是,不是让DB自动生成新条目的ID,而是在插入之前自己生成它,然后使用该ID查询DB。
您应该查看涵盖此主题的此堆栈溢出帖子: How to get the insert ID in JDBC?
答案 5 :(得分:0)
你只需要先获取价值观&然后把查询:)
String uname = userTextBox.getText();
String pwd = passTextBox.getText();
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:ADB");
Statement statement = con.createStatement();
statement.executeUpdate("insert into Login " + "values ('"+uname+"','"+pwd+"')");
}
catch(Exception e)
{
System.out.println(e);
}
答案 6 :(得分:0)
//before using the variables need to initialize
uname = userTextBox.getText();
pwd = passTextBox.getText();
statement.executeUpdate("insert into Login " + "values ('"+uname+"','"+pwd+"')");