2

我正在用 Java 编写一个简单的程序,该程序使用用户插入的信息编写数据库。我已经为保存这些信息的按钮实现了一个监听器,因此更新了连接的服务器(所以连接正常)。我想得到第一个空白行并在上面写。通过这种方式,我可以编写整个数据库调用相同的方法。有什么建议吗?这是代码(它从一个监听器开始)

Object src = e.getSource();
            if (src == insTeaching)
            {
                String teachName = teachNameField.getText();
                int studentsNumber = (int) studentsNumberSpinner.getValue();
                DBConnect connection = new DBConnect();
connection.updateDB(teachName, studentSNumber);
}

其中 updateDB 是以下方法:

public void updateDB (String name, int student){ 
try {
    String query1 = "UPDATE subject SET name='" + name
+"', student='" + student+"' WHERE (conditions...);
    PreparedStatement statement=con.prepareStatement(query1);
    statement.executeUpdate();

显然这种方法此时无法工作..我怎样才能实现它以在第一个空白行上写字?这样,每次用户单击按钮时,我都可以调用该方法。我的情况清楚吗?


这是我的问题的解决方案。我想在这里插入这个解决方案来帮助所有有我自己问题的访问者。

@Rahul,我已经尝试过您所写的内容,但它不起作用。问题在于“名称为空”。我也试过“name = null”,但没有什么好转的!所以我改变了匹配的列:我选择了学生(默认值为 0),我按照你告诉我的写了。所以:

WHERE Student = '0' LIMIT 1

限制 1 强制程序只写第一个而不是其他所有。现在它起作用了!所以我谢谢你!

4

3 回答 3

1

您似乎想到了 Excel 表格之类的数据库表格,您可以无休止地向下滚动以找到无限数量的空行。但这不是 SQL 数据库的工作方式。数据库表仅由包含数据的行组成。表格在最后填充的行之后结束。

通常,一个数据库表没有“空白”行(并不是说技术上不可能有至少一个空行,但这种情况相当罕见)。当您想向表中添加新条目时,请使用 INSERT 命令:

INSERT INTO subject VALUES ("English", "Bob");

这将在表中添加一个新行。假设您的表有两列,新行的这两个字段现在将具有值“English”和“Bob”。

UPDATE 命令用于更改表中已经存在的一行或多行

UPDATE subject SET subject="Math" WHERE name="Bob";

此命令将搜索名称为“Bob”的所有行并将主题更改为“Math”。

于 2013-09-03T14:59:22.610 回答
0

要获得一列中的空白行,您可以这样写:-

select * from table where column IS NULL;

尝试这个:-

public void updateDB (String name, int student){ 
try 
{
    final String q = "UPDATE subject SET name=?, student=? WHERE name = (select name from subject where name is null");
    final PreparedStatement ps=con.prepareStatement(q);
    ps.setString(1,name);
    ps.setInt(2,student);
    ps.executeUpdate();
于 2013-09-02T15:28:50.430 回答
0

这是使用 PreparedStatement 的正确方法:

他们这样做的方式对各种 SQL 注入攻击都是开放的,而且完全不正确。

final String q = "UPDATE subject SET name=?, student=? WHERE name = (select name from subject where name is null");
final PreparedStatement ps=con.prepareStatement(q);
ps.setString(1,name);
ps.setInt(2,student);
final int recsAffected = ps.executeUpdate();

阅读 JavaDocsPreparedStatement

这没有逻辑意义:

WHERE name = (select name from subject where name is null)

基本上是说WHERE name is null,如果这是您的意图,那么这里的子选择是不正确的做法。

您最有可能需要在 Java 中做您想做的事情:

来自评论:

“我必须更新一些行,但我不想更新同一行!!所以我想浏览这些行。”

我假设你有一个列表,你想用不同的数据更新空白行。如果没有看到您的表的确切架构,以及其中填充的数据,互联网上的任何人都无法回答您的问题。

使用模式 DDL 和您要更新的整行数据的一些示例更新您的问题,也许有人可以进一步帮助您。否则这个问题将被搁置。

于 2013-09-03T14:50:57.680 回答