如何获取数据库中的第一个空行?

时间:2013-09-02 15:25:37

标签: java mysql

我正在用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强制程序只写第一个而不是全部。现在它有效! 所以我感谢你!

3 个答案:

答案 0 :(得分:1)

您似乎想到了像Excel表这样的数据库表,您可以无限地向下滚动以查找无限数量的空行。但这不是SQL数据库的工作方式。数据库表仅包含具有数据的行。该表只是在最后一行填充后结束。

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

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

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

UPDATE命令用于更改表中已有的一行或多行

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

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

答案 1 :(得分: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();

答案 2 :(得分: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();

阅读JavaDocs PreparedStatement

这没有逻辑意义:

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

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

您最需要用Java做您想做的事情:

来自评论:

  

“我必须更新一些行,但我不想更新相同的内容   行!!所以我想浏览行。“

我假设您有一个列表,您想要更新每个具有不同数据的空白行。如果没有看到您的表格的确切模式,并且互联网上的任何人都无法回答您填写的数据。

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